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

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

При использовании WSDL, в котором используется Стиль документа SOAP для документа / литерала ( также описан здесь ) он генерирует интерфейс службы с «голым» стилем параметра привязки SOAP (с несколькими аргументами и возвращаемыми значениямираскрывается как "держатель" объектов * (1010 * в сигнатурах метода) вместо простого обернутого параметра и возвращаемого значения, указанного в WSDL.Другие инструменты, такие как Axis2 wsdl2java, просто используют элементы-обертки в качестве входного параметра и возвращаемого значения вместо того, чтобы автоматически «разворачивать» их.

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

Ответы [ 2 ]

37 голосов
/ 15 августа 2011

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
15 голосов
/ 16 августа 2011

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