FR11 webservice程序数据集

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();
    }
}

 

posted on 2022-11-23 14:00  -韩帅  阅读(75)  评论(0编辑  收藏  举报

导航