拿到SOAP请求的时候,先使用SOAPUI工具解析WSDL文件,得到请求方法列表,新建一个请求,SOAPUI查看协议版本和Action如下:
如下为解析出的XML入参示例。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="namespace">
<soapenv:Header/>
<soapenv:Body>
<web:method>
<!--Optional:-->
<param1></param1>
<!--Optional:-->
<param2></param2>
<!--Optional:-->
<param3></param3>
<!--Optional:-->
<param4></param4>
</web:method>
</soapenv:Body>
</soapenv:Envelope>
上述XML中 xmlns:web 此为web标签的命名空间,web:method?这里的method是示例,为方法名称。以上述入参为例,使用hutool包发出SOAP请求代码如下:
String result = SoapUtil.createClient(url, SoapProtocol.SOAP_1_1)
.header("SOAPAction", action)
.setMethod(method, namespace)
.setParam("param1", 1, false)
.setParam("param2", 2, false)
.setParam("param3", 3, false)
.setParam("param4", 4, false).send();
各参数含义:
请求后出参如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:method xmlns:ns2="namespace">
<return></return>
</ns2:method>
</soap:Body>
</soap:Envelope>
取return标签内容代码如下:
Document document = XmlUtil.parseXml(result);
NodeList nodeList = document.getElementsByTagName("return");
if (nodeList.getLength() > 0) {
Node returnNode = nodeList.item(0);
if (returnNode.getNodeType() == Node.ELEMENT_NODE) {
Element returnElement = (Element) returnNode;
String content = returnElement.getTextContent();
System.out.println(content);
}
}