我已经从Netbeans 7.1中的WSDL生成了我的Web服务。出于安全考虑,我无法展示它,但您可以放心地认为它没问题,它已经过生产测试。
我可以调用网络服务。如果我让函数返回然后转储它,它甚至会返回正确的值。但是,它从来没有从SOAP调用接收任何参数。这是我在index.jsp
:
try {
Soap.ServiceService service = new Soap.ServiceService();
javax.xml.namespace.QName portQName = new javax.xml.namespace.QName("http://external.example.com/", "ServicePort");
String req = "<getTimestampCount xmlns=\"http://external.example.com/\"><msisdn>656</msisdn></getTimestampCount>";
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)));
javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = factory.newTransformer();
java.io.StringWriter writer = new java.io.StringWriter();
javax.xml.transform.Result stringOut = new javax.xml.transform.stream.StreamResult(writer);
transformer.transform(result, stringOut);
writer.close();
out.print(writer.toString());
} catch (Exception ex) {
out.print(ex.getMessage());
}
这是返回结果的函数:
public long getTimestampCount(java.lang.String msisdn) throws ParameterException, UnknownException_Exception {
//TODO implement this method
System.out.println(msisdn);
throw new UnsupportedOperationException("Not implemented yet.");
}
打印始终生成null
。我不能为我的生活弄清楚它为什么有效,找到合适的功能,但不传递价值。
另外,我已经使用此代码对其进行了测试,并且返回的值是正确的:
try {
Soap.ServiceService service = new Soap.ServiceService();
Soap.Service port = service.ServicePort();
// TODO initialize WS operation arguments here
java.lang.String msisdn = "5";
// TODO process result here
long result = port.getTimestampCount(msisdn);
out.println("Result = "+result);
} catch (Exception ex) {
out.println(ex.getMessage());
// TODO handle custom exceptions here
}
如预期的那样,它返回一个值5.如果我想自己生成SOAP响应,这样就可以了,但我更愿意接收响应,就像第一个函数一样 - 作为SOAP。
我应该发布什么其他内容才能让这更容易?如果是这样,说出来,我会尝试提供所需的一切。
答案 0 :(得分:1)
我已经解决了这些web服务的问题,但我仍然不知道这段代码有什么问题。
我最终做的是使用标准语法,就像在最后一段代码中一样。这很有效。
答案 1 :(得分:1)
尝试将以下命名空间添加到您的方法中。它帮助我解决了同样的问题。
<tns:getTimestampCount xmlns:tns=\"http://external.example.com/\"><msisdn>656</msisdn>
</tns:getTimestampCount>";