SOAP协议可以简单理解为: RPC机制+HTTP传输+SOAP协议XML报文

先看调用接口时的代码

public String soapRequest(String sendMsg, String soapAction, String url) throws TransformerException, SOAPException, IOException, DocumentException {
        HttpClient client = new HttpClient();
        //host为第三方的ip和端口,url为第三方接口
        String soapUrl = host + url;
        PostMethod postMethod = new PostMethod(soapUrl);
        StringRequestEntity requestEntity = new StringRequestEntity(sendMsg, "text/xml", "UTF-8");
        //SOAPAction属性是必须的,访问SOAP接口需要在请求头设置SOAPAction,SOAPAction是什么,得让接口方提供
        postMethod.setRequestHeader("SOAPAction", soapAction);
        postMethod.setRequestHeader("Content-Type", "text/xml");

        postMethod.setRequestEntity(requestEntity);
        int status = client.executeMethod(postMethod);
        if (200 != status) {
            logger.info("SOAP协议接口调用失败!");
            throw new IllegalArgumentException();
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream(), "UTF-8"));
        //这是响应得XML报文
        String resultXml = IOUtils.toString(in);
        return resultXml;
    }

我这里代码简化了,所以有些抛出的异常是没有的。

调用SOAP协议接口有几个重点的地方:

1、准备SOAP协议XML请求报文。

2、第三方提供的接口url是.wsdl结尾的(也有其他结尾的,本文就只是针对wsdl结尾的来讲)。

3、第三方需要提供接口的SOAPAction值,如果不在请求头设置正确的SOAPAction,不能响应正确的结果。

 

JSON字符串与SOAP协议XML字符串互转可以参考另一篇文章:https://www.cnblogs.com/pzw23/p/16547735.html

 

这里有一篇文章比较详细地介绍SOAP协议:https://blog.csdn.net/qq_14989227/article/details/78512013