XML-запрос SOAP для инициализации значения объекта в классе JAVA

#java #soap #soapui #soap-client

#java #soap #soapui #soap-клиент

Вопрос:

У меня есть приведенный ниже класс JAVA :

 @WebService()
@SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL, parameterStyle = ParameterStyle.BARE)
public class Demo extends JaxWsWebService
{
@WebMethod(operationName = "createMethod")
@WebResult(targetNamespace = "xyz.com/")
@RequestWrapper(localName = "Testing", targetNamespace = "xyz.com/", className = "com.Test")
public void createMethod(Testing testingData) throws SOAPException {

    System.out.println(" createMethod service --- xId = "   testingData.getXId() "); // xId is coming as NULL
    System.out.println(" createMethod service --- name = "   testingData.getName() "); // name is coming as NULL
}
}
  

Теперь я вызываю вышеупомянутый JAVA-метод, используя мой XML-запрос SOAP, который приведен ниже :

 <x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="xyz.com/">
<x:Header/>
<x:Body>
<NS1:createMethod>
<NS1:Testing>
    <xId>12345</xId>
    <name>abcd</name>
</NS1:Testing>
</NS1:createMethod>
</x:Body>
</x:Envelope>
  

Теперь, когда я вызываю запрос SOAP с помощью SOAP-клиента, вызов выполняется успешно и выполняется внутри метода JAVA, но основная проблема заключается в том, что экземпляр «testingData» класса «Testing» не инициализируется.

Из-за этого я получаю значение переменных ‘xId’ и ‘name’ как NULL в моем JAVA-методе. Любые предложения по этому поводу были бы полезны, похоже, я совершаю ошибку при вызове запроса SOAP, но не могу понять это.

Пожалуйста, предложите. TIA

Комментарии:

1. SoapUI сгенерировал этот XML-запрос для вас? Я несколько озадачен тем, что у вас есть аннотации, объявляющие операцию, но внутри вашего XML он просто используется как тип данных. Глядя на ваш Java-код, я бы не ожидал, что <NS1:createMethod> должен быть там вообще. Возможно, я ошибаюсь.

2. Необходимо использовать Steen: createMethod, иначе он не попадет внутрь метода JAVA. У меня есть еще несколько параметров внутри тестового компонента, нужно ли мне объявлять их все в моем запросе SOAP?

3. Я бы начал с импорта сгенерированного WSDL непосредственно из самого веб-сервиса. Как только SoapUI получит WSDL, он может сгенерировать для вас XML-запрос, соответствующий тому, что веб-сервис ожидает, что вы ему отправите.

4. @Steen: У меня есть файл wsdl, и я его импортировал. После этого я отправляю этот конкретный запрос, в котором класс параметров «Testing» объект «testingData» не инициализируется

5. И он проверяется в соответствии со схемой? Тогда я не думаю, что смогу вам помочь. Должно быть, это проблема на стороне сервера. Извините.

Ответ №1:

Понял, где я ошибался :

 <x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="xyz.com/">
<x:Header/>
<x:Body>
<NS1:createMethod>
    <xId>12345</xId>
    <name>abcd</name>
</NS1:createMethod>
</x:Body>
</x:Envelope>
  

В XML-запросе я удалил <NS1:Testing> начальный и конечный </NS1:Testing> теги, и, наконец, он начал работать у меня.