我编写了一个java SOAP WebService。和消费者一样。如果我将SOAP消息发送到没有参数的方法。它工作得很好,收到了适当的回应。
但是,我无法使用具有参数的方法。我的SOAP消息以下列模式存储在以下字符串中。
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<S:Header/>"+
"<S:Body>"+
"<ns2:addPerson xmlns:ns2=\"http://service.cass.com/\">"+
"<fName xsi:type=\"xsd:string\">vbn</fName>"+
"<lName xsi:type=\"xsd:string\">yyyy</lName>"+
"<gender xsi:type=\"xsd:string\">879</gender>"+
"<age xsi:type=\"xsd:int\">90</age>"+
"</ns2:addPerson>"+
"</S:Body>"+
"</S:Envelope>";
方法原型是: public boolean addPerson(String fName,String lName,String gender,int age);
我正在追踪异常。
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/ServerSide/ws/personService
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1305)
at com.cass.testRequest.makeSOAPRequest(testRequest.java:71)
at com.cass.testRequest.main(testRequest.java:37)
请注意,如果我发送一个没有参数的SOAPMessage,那么对于一个带有0参数的方法。一切正常,我得到了适当的回应。在我看来,我在SOAPMessage中传递参数的方式出了问题。请建议如何做到这一点。
的问候, Aqif
答案 0 :(得分:1)
您尚未定义xsi
或xsd
命名空间。尝试类似下面的内容(但请参阅下面有关命名空间的正确veriosn的评论):
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
(没有参数的方法不需要这些,这就是为什么它适用于那种情况)。
已修改:以下内容在http://validator.w3.org/check
验证为正确的XML<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<S:Header/>
<S:Body>
<ns2:addPerson xmlns:ns2="http://service.cass.com/">
<fName xsi:type="xsd:string">vbn</fName>
<lName xsi:type="xsd:string">yyyy</lName>
<gender xsi:type="xsd:string">879</gender>
<age xsi:type="xsd:int">90</age>
</ns2:addPerson>
</S:Body>
</S:Envelope>
虽然这并不意味着它符合SOAP模式......这将是下一步检查...
如果客户端使用SOAP 1.1并且服务器正在使用SOAP 1.2,则可能会出现问题,因为我认为名称空间不同。同样,不要混合两个版本的命名空间 - 它必须一致。
我认为xsd和xsi的最新命名空间现在是2001而不是1999,(我的错误,我使用的是旧例子)。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
但请参阅最终命名空间的SOAP 1.1或1.2(无论您使用哪个)的规范!