cl
2024-07-02 8c5c9cfbe2dfa4b40636ec974feaf48ace0d271f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.jcdm.main.webservice;
 
 
import java.io.InputStream;
import java.util.List;
 
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.json.XML;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.io.IOUtils;
 
 
public class test {
 
    public static void main(String[] args) throws Exception {
        String serviceUrl = "http://podqapp.cfmoto.com.cn:50200/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES";
 
        String content = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">\n" +
                "   <soapenv:Header/>\n" +
                "   <soapenv:Body>\n" +
                "      <urn:ZPP_CF_MES_005>\n" +
                "         <!--Optional:-->\n" +
                "         <IV_WERKS>1000</IV_WERKS>\n" +
                "         <!--Optional:-->\n" +
                "         <IV_ZSCTZD>A0055577</IV_ZSCTZD>\n" +
                "      </urn:ZPP_CF_MES_005>\n" +
                "   </soapenv:Body>\n" +
                "</soapenv:Envelope>";
        // HttpClient发送SOAP请求
        int timeout = 10000;
        HttpClient client = new HttpClient();
        //如果需要用户名密码验证;不需要验证登录则不需要以下4行
        String username = "POMESUSER";
        String password = "12345tgb";
        UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password);
        client.getState().setCredentials(AuthScope.ANY, creds);
 
        PostMethod postMethod = new PostMethod(serviceUrl);
        // 设置连接超时
        client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
        // 设置读取时间超时
        client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
        // 然后把Soap请求数据添加到PostMethod中
        RequestEntity requestEntity = new StringRequestEntity(content, "text/xml", "UTF-8");
 
        // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误
        postMethod.setRequestHeader("SOAPAction", "");
        // 设置请求体
        postMethod.setRequestEntity(requestEntity);
        int status = client.executeMethod(postMethod);
 
        if (status == 200) {// 成功
            InputStream is = postMethod.getResponseBodyAsStream();
            // 获取请求结果字符串
            String result = IOUtils.toString(is);
            String jsonStr = xmlToJSON2(result);
            Gson gson = new Gson();
            // 将json字符串转换成对象
            ItemList itemList = gson.fromJson(jsonStr, ItemList.class);
            System.out.println("返回结果:" + result);
        } else {
            System.out.println("错误代码:" + status + ":" + postMethod.getResponseBodyAsString());
        }
    }
 
    /**
     * 方式--贰
     * 使用hutool工具包中的工具转化
     * @param xmlStr
     * @return
     */
    public static String xmlToJSON2(String xmlStr){
        JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true);
 
        Gson gson = new Gson();
        JsonObject jsonObject2 = gson.fromJson(jsonObject1.toString(), JsonObject.class);
        JsonObject etData = jsonObject2
                .getAsJsonObject("SOAP:Envelope")
                .getAsJsonObject("SOAP:Body")
                .getAsJsonObject("n0:ZPP_CF_MES_005.Response")
                .getAsJsonObject("ET_DATA");
        return etData.toString();
    }
 
}