package com.fr.data;

import cn.hutool.core.lang.Console;
import cn.hutool.http.webservice.SoapClient;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ParameterProvider;
import org.apache.avro.generic.GenericData;

import javax.xml.soap.*;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class OaFLow extends SimpleTableData {
    /**
     * 定义程序数据集的列名与数据保存位置
     */

    public static String ret = "";


    @Override
    public String[] initColumnNames() {
        String[] columnNames = {"ZSN_ZHJD_OPINION", "ZSN_ZHJD_CREATEDATE", "ZSN_ZHJD_STATUS", "ZSN_ZHJD_NODE", "ZSN_ZHJD_DEPARTMENT", "ZSN_ZHJD_USERNAME"};
        return columnNames;
    }

    /**
     * 实现构建函数,在构建函数中准备数据
     */
    @Override
    public List<Object[]> loadData() {
        String[] columnNames;
        Object[][] rowData;
        String flowId = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
        List<Object[]> list = new ArrayList<>();
        try {
            // 新建客户端
            SoapClient client = SoapClient.create("http://IP/services/ConfirmFlowService")
                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间
                    .setMethod("con:ConfirmFlowService", "http://schemas.xmlsoap.org/soap/envelope/")
                    // 设置参数,此处自动添加方法的前缀:web
                    .setParam("in0", flowId);

            // 发送请求,参数true表示返回一个格式化后的XML内容
            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应
            SOAPMessage msg = formatSoapString(client.sendForResponse().body());
            SOAPBody body = msg.getSOAPBody();
            Iterator<SOAPElement> iterator = body.getChildElements();
            PrintBody(iterator, null);
            JSONArray arr = JSONUtil.parseArray(JSONUtil.parse(JSONUtil.parse(ret).getByPath("confirmFlow")).getByPath(flowId));

            for(int i=0;i<arr.size();i++){
                list.add(new Object[6]);
                list.get(i)[0] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_OPINION");
                list.get(i)[1] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_CREATEDATE");
                list.get(i)[2] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_STATUS");
                list.get(i)[3] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_NODE");
                list.get(i)[4] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_DEPARTMENT");
                list.get(i)[5] = JSONUtil.parseObj(arr.get(i)).get("ZSN_ZHJD_USERNAME");
            }
        } catch (Exception e) {
            FineLoggerFactory.getLogger().error(e.getMessage(), e);
        }
       return list;

    }
    //实现ArrayTableData的其他四个方法,因为AbstractTableData已经实现了hasRow方法


    /**
     * 把soap字符串格式化为SOAPMessage
     *
     * @param soapString
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static SOAPMessage formatSoapString(String soapString) {
        MessageFactory msgFactory;
        try {
            msgFactory = MessageFactory.newInstance();
            SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(),
                    new ByteArrayInputStream(soapString.getBytes("UTF-8")));
            reqMsg.saveChanges();
            return reqMsg;
        } catch (Exception e) {
            FineLoggerFactory.getLogger().error(e.getMessage(), e);
            return null;
        }
    }

    private static void PrintBody(Iterator<SOAPElement> iterator, String side) {
        while (iterator.hasNext()) {
            Object o=iterator.next();
            if(o!=null)  {
                SOAPElement element=null;
                try{
                    element = (SOAPElement) o;
                    System.out.println("Node Name:" + element.getNodeName());
                    System.out.println("Value:" + element.getValue());
                    if(element.getNodeName().equals("ns1:out")){
                        ret = element.getValue() + "";
                    }
                }catch(Exception e){}
                if ( element !=null ) {
                    PrintBody(element.getChildElements(), side + "-----");
                }
            }
        }
    }


    public static void main(String[] args){
            new OaFLow().loadData();
    }
}

 

原文地址:http://www.cnblogs.com/shuaihan/p/16918091.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性