15

Java 6 JAX-WS "wsimport" ユーティリティは、指定された WSDL ファイルから Web サービス スケルトン (インターフェース) を生成するという素晴らしい仕事をしますが、個人的に厄介な例外が 1 つあります。

SOAP ドキュメント/リテラル​​ ラップ スタイル(ここでも説明)を使用する WSDL を指定すると、「ベア」SOAP バインディング パラメーター スタイル(複数の引数と戻り値をメソッド シグネチャの「ホルダー」オブジェクトとして展開) でサービス インターフェイスを生成します。 WSDL で指定された単純なラップされたパラメーターと戻り値の代わりに。Axis2 wsdl2java などの他のツールは、ラッパー要素を入力パラメーターとして使用し、値を自動的に「アンラップ」する代わりに値を返します。

「wsimport」に SOAP バインディング パラメータを「ベア」ではなく「ラップ」として保持するように指示することはできますか?

4

2 に答える 2

39

私の知る限り、ラッパー スタイルを無効にするには、カスタム バインディング ファイルを指定する必要があります。

<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
于 2011-08-15T00:36:39.260 に答える
15

@ 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>
于 2011-08-16T00:43:38.840 に答える