生成的Web服务未接收参数

时间:2012-02-06 08:15:03

标签: java web-services soap

我已经从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。

我应该发布什么其他内容才能让这更容易?如果是这样,说出来,我会尝试提供所需的一切。

2 个答案:

答案 0 :(得分:1)

我已经解决了这些web服务的问题,但我仍然不知道这段代码有什么问题。

我最终做的是使用标准语法,就像在最后一段代码中一样。这很有效。

答案 1 :(得分:1)

尝试将以下命名空间添加到您的方法中。它帮助我解决了同样的问题。

<tns:getTimestampCount  xmlns:tns=\"http://external.example.com/\"><msisdn>656</msisdn>
</tns:getTimestampCount>";