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