如何处理Netbeans中WSDL文件生成的SOAP调用

时间:2012-02-03 12:22:47

标签: java web-services soap

我刚开始使用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消息或某种类型的整数。我如何从这里到达某个地方?

谢谢!

2 个答案:

答案 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的方法,最终可以获得一些有意义的结果。