Подтвердить что ты не робот

Java SOAP "wsimport" - принудительное связывание привязки с WSDL с документами/буквами?

Утилита "wsimport" Java 6 JAX-WS отлично справляется с созданием скелета веб-службы (интерфейса) с помощью WSDL файла, но с одним из раздражающих исключений.

Когда задан WSDL, который использует SOAP Document/literal wrapped style (также описанный здесь), он создает служебный интерфейс с "голой" Стиль привязки SOAP (с несколькими аргументами и возвращаемыми значениями как "держатель" объектов в сигнатурах метода) вместо простого обернутого параметра и возвращаемого значения, заданного WSDL. Другие инструменты, такие как Axis2 wsdl2java, просто используют элементы оболочки как входной параметр и возвращаемое значение, а не автоматически "разворачивают" их.

Можно ли указать "wsimport", чтобы сохранить параметры привязки SOAP как "завернутые", а не "голые"?

4b9b3361

Ответ 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>