webservice的调用问题说明

上午遇见了一个很意外的事情,说明一下,基于soap消息的方式调用了一下webservice,获取结果结果是不正确的,代码如下

//转发消息并获取结果
SOAPMessage response = dispatch.invoke(message);
//解析结果,顺序与封装恰好一致,获取信封,获取body,转为 
System.out.println();
Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
response.writeTo(System.out);

?打上断点以后,发现服务端也能接收到正常数据,也能返回。看一下输出:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body/></S:Envelope>

?消息体是空的,也没有报错,经过了两三个小时我才发现问题所在:

?extractContentAsDocument方法将body的内容抽出放到doc中去了,如果在extractContentAsDocument前调用一下response.writeTo(System.out);就能显示正常的了。

代码改成这样

System.out.println("输出结果:");
//转发消息并获取结果
SOAPMessage response = dispatch.invoke(message);
//解析结果,顺序与封装恰好一致,获取信封,获取body,转为 
response.writeTo(System.out);
System.out.println();
Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
response.writeTo(System.out);

?这次输出的数据:

输出结果:
第一次:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:addUserResponse xmlns:ns2="http://service.soap.org/"><user><id>12</id><nickname>tudou123</nickname><password>123123</password><username>xxx</username></user></ns2:addUserResponse></S:Body></S:Envelope>
第二次:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body/></S:Envelope>

?

?

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。