Как передать параметры через SOAP-сообщение для использования параметризованного метода веб-сервиса - PullRequest
0 голосов
/ 27 января 2012

Я написал 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 gen, int age);

и Iполучаю следующее исключение.

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

1 Ответ

1 голос
/ 27 января 2012

Вы не определили пространства имен xsi или xsd.Попробуйте что-то вроде следующего (но см. Комментарии ниже о правильной проверке пространств имен):

<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">

(они не понадобятся для вашего метода без параметров, поэтому он работал в этом случае).

Отредактировано : следующее подтверждает правильность XML на http://validator.w3.org/check

<?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 (в зависимости от того, что вы используете) для определенных пространств имен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...