Используйте WebServiceTemplate для вызова операции веб-службы с несколькими частями
У меня есть сообщение WSDL, которое состоит из двух частей:
<wsdl:message name="GenericWebServiceOperationRequestMessage">
<wsdl:part name="Body" element="ns:MyRequest"/>
<wsdl:part name="Security" element="ns:Security"/>
</wsdl:message>
Рабочий процесс, который я использую, запускает xjc.exe на wsdl для генерации артефактов JAXB, а затем использует их для вызова веб-службы. Ну, это все хорошо, за исключением того, что я не могу понять, каков правильный рабочий процесс для вызова сообщения, содержащего несколько частей, с помощью Spring WebServiceTemplate. Я могу создать объекты MyRequest и Security (которые являются сложными типами), но функцию:
WebServiceTemplate (). MarshalSendAndReceive(Объект requestPayload); Только берет один объект. Не части... Как правильно называть этот тип операции веб-службы?
1 ответ
Я полагаю, причина, по которой я не получил ответа, заключается в том, что это невозможно. Если я ошибаюсь, пожалуйста, исправьте меня, но, похоже, WebServiceTemplate поддерживает только вызовы веб-службы с переносом. То есть операции, которые отправляют только один вход и получают один объект вывода.
Для ситуаций, подобных этой, когда у вас есть два или более объектов, выровненных, единственное решение, которое я вижу, - это создать наиболее сложный объект и использовать функцию обратного вызова Webservice в вызове для ручного создания элементов SOAP в теле или заголовке по мере необходимости.
Используйте WebServiceMessageCallback в вызове marshalSendAndReceive() и в doWithMessage(WebServiceMessage message)
функция, я использую
SOAPMessage soapMessage = ((SaajSoapMessage)message).getSaajMessage();
чтобы получить и изменить сообщение мыла.