#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>
теги, и, наконец, он начал работать у меня.