Java SOAP "wsimport" - принудительное связывание привязки с WSDL с документами/буквами?
Утилита "wsimport" Java 6 JAX-WS отлично справляется с созданием скелета веб-службы (интерфейса) с помощью WSDL файла, но с одним из раздражающих исключений.
Когда задан WSDL, который использует SOAP Document/literal wrapped style (также описанный здесь), он создает служебный интерфейс с "голой" Стиль привязки SOAP (с несколькими аргументами и возвращаемыми значениями как "держатель" объектов в сигнатурах метода) вместо простого обернутого параметра и возвращаемого значения, заданного WSDL. Другие инструменты, такие как Axis2 wsdl2java, просто используют элементы оболочки как входной параметр и возвращаемое значение, а не автоматически "разворачивают" их.
Можно ли указать "wsimport", чтобы сохранить параметры привязки SOAP как "завернутые", а не "голые"?
Ответы
Ответ 1
AFAIK, вам нужно указать собственный файл привязки, чтобы отключить стиль оболочки:
<bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="OperationService.wsdl"
xmlns="http://java.sun.com/xml/ns/jaxws">
<!-- Disable default wrapper style -->
<enableWrapperStyle>false</enableWrapperStyle>
</bindings>
а затем вызовите wsimport
$ wsimport -b binding.xml OperationService.wsdl
Ответ 2
Ответ от @beny23 на правильном пути; однако, оказывается, что вы можете вставлять инструкции привязки JAX-WS в сам файл WSDL, что устраняет необходимость добавления переключателей "-b binding.xml
" в Команда "wsimport
":
<wsdl:portType name="HelloPortType">
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>
<wsdl:operation name="sayHello">...</wsdl:operation>
</wsdl:portType>