我刚开始使用Java,但我的老板正在推动这一点。我已经获取了我们拥有的WSDL文件,并在Netbeans中生成了一个Web服务和一个Web客户端。此外,我已将新服务拖到我的客户端,并确保代码有效。但现在我有一个问题。如何处理结果?我的JSP中的代码如下所示:
try {
Soap.PDFSignatureServiceService service = new Soap.PDFSignatureServiceService();
javax.xml.namespace.QName portQName = new javax.xml.namespace.QName("http://external.ltc.com/", "PDFSignatureServicePort");
String req = "<getTimestamp xmlns=\"http://external.ltc.com/\"><msisdn>ENTER VALUE</msisdn></getTimestamp>";
javax.xml.ws.Dispatch<javax.xml.transform.Source> sourceDispatch = null;
sourceDispatch = service.createDispatch(portQName, javax.xml.transform.Source.class, javax.xml.ws.Service.Mode.PAYLOAD);
javax.xml.transform.Source result = sourceDispatch.invoke(new javax.xml.transform.stream.StreamSource(new java.io.StringReader(req)));
out.print(result.toString());
} catch (Exception ex) {
out.print(ex.getMessage());
}
代码有效,但打印的内容是:com.sun.xml.ws.util.xml.StAXSource@90fe8e
。我对这个世界做了什么?我期待SOAP消息或某种类型的整数。我如何从这里到达某个地方?
谢谢!
答案 0 :(得分:2)
您在这里做的是创建一个动态客户端,实际上您正在处理有效负载级别而不是SOAP消息级别。
对于SOAP级别,您必须这样做:
Dispatch<SOAPMessage> dispatch
您的案例中的结果是响应的XML有效负载 例如,您可以将其转换为字符串并查看它:
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
StringWriter writer = new StringWriter();
Result stringOut = new StreamResult(writer);
transformer.transform(result, stringOut);
writer.close();
System.out.println(writer.toString());
或将其转换为XML节点:
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
DOMResult domResult = new DOMResult();
transformer.transform(result, domResult);
rootNode = domResult.getNode();
免责声明:甚至没有尝试编译代码
答案 1 :(得分:0)
如果你看一下javadocs中的Dispatch.invoke规范,它是:
http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/Dispatch.html#invoke(T)。
如果您将代码更改为:
**javax.xml.transform.stream.StreamSource** result = sourceDispatch.invoke(new javax.xml.transform.stream.StreamSource(new java.io.StringReader(req)));
StreamSource
有获取Reader的方法,最终可以获得一些有意义的结果。