上午遇见了一个很意外的事情,说明一下,基于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>