Как добавить пользовательский элемент SOAP-Header в сгенерированный WSDL в Spring-WS
-
19-09-2019 - |
Вопрос
мы переходим с веб-сервисов WebLogic на Spring-WS (1.5.X).В настоящее время мы столкнулись с одной проблемой:
Нам нужно передать объект контекста (в WLS он передается как элемент SOAP-Header) другим службам, которые все еще работают в WLS, из службы на базе Spring-WS.Элемент заголовка по-прежнему формулируется на стороне клиента, и вновь созданный WS (Spring-WS) должен просто передать его другим службам.
Я могу представить, как будет передаваться пользовательский элемент:переопределить метод doWithMessage(сообщение WebServiceMessage)...
Есть ли способ сгенерировать wsdl с помощью DefaultWsdl11Definition, чтобы он содержал этот пользовательский элемент заголовка?См. пример:
<wsdl:operation name="GetSomeInformation">
<soap:operation
soapAction="http://www.dummyservice.com/InformationService/GetSomeInformation" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="ctx:ServiceContextMessage" part="serviceContext" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="Error">
<soap:fault name="Error" use="literal" />
</wsdl:fault>
</wsdl:operation>
Спасибо за помощь
Решение
В моем проекте мы столкнулись с похожей проблемой.Проверьте расширение SuffixBasedPortTypesProvider, SuffixBasedMessagesProvider и Soap11Provider.Мы используем InliningXsdSchemaTypesProvider для импорта схемы, которую мы используем для построения WSDL.Если вы запустите генерацию WSDL через отладчик, вы поймете, как это работает.Код Spring легко следовать и расширять.