JAX-WS Web サービスでの WSDL バインディングの順守

Java™ API for XML-Based Web Services (JAX-WS) バージョン 2.1 では、特定の機能および動作をプログラムで制御する方法として、フィーチャー の 概念が導入されました。 サポートされる標準フィーチャーの 1 つが RespectBindingFeature です。 RespectBindingFeature を使用することによって、 エンドポイントに関連付けられている Web Services Description Language (WSDL) バインディングの内容 を JAX-WS 実装が順守する必要があるかどうかを制御できます。

このタスクについて

WSDL 文書は開発プロセス中は頻繁に使用されますが、 WSDL 文書に指定があればその指定内容をランタイムで使用 するよう実際に強制することについては、バージョン 2.1 より前の バージョンの JAX-WS 仕様では明確に定義されていませんでした。JAX-WS ランタイム環境での wsdl:binding の影響を はっきりさせるため、JAX-WS バージョン 2.1 仕様では フィーチャー RespectBindingFeature が追加されました。

この フィーチャー RespectBindingFeature が使用可能になっていると、JAX-WS ランタイム 環境は実行時にエンドポイントの wsdl:binding を検査して、 サービス・エンドポイント・インターフェース (SEI) のパラメーターおよび戻り値 のバインディングが順守されるようにします。それに加えて、この フィーチャーは、すべての必要な wsdl:binding 拡張がランタイム環境に よって解釈され、使用されるか、そうでなければ、アプリケーションによって 明示的に使用不可にされているかのどちらかであることを保証します。JAX-WS アプリケーション は、WebServiceFeature インターフェースが定義されている特定の wsdl:binding 拡張を、 そのフィーチャーに関連した適切なアノテーションを使用することで使用不可にできます。 そのためには、javax.xml.ws.WebServiceFeature インターフェースを受け入れる API を 使用するか、デプロイメント記述子を構成します。

RespectBindingFeature フィーチャーが 使用可能になっていない場合 (これがデフォルトです)、 ランタイム環境は wsdl:binding の各パートを順守するかどうかを 選択できます。

手順

  1. Web サービス・アプリケーションを表す Web Services Description Language (WSDL) ファイルを含む JAX-WS アプリケーション用の Java 成果物を開発します。
    1. WSDL ファイルから開始する場合、必要な JAX-WS 移植可能成果物を生成するために、wsimport コマンドを使用して WSDL ファイルから Java 成果物を開発します
    2. JavaBeans コンポーネントから開始する 場合、JAX-WS アプリケーションの Java 成果物を 開発し、wsgen コマンドを使用して WSDL ファイルを生成します。
  2. エンドポイント実装クラスで RespectBindingFeature を使用可能に する場合、以下のいずれかの方法を使用します。
    • エンドポイントで @RespectBinding アノテーションを使用します。

      エンドポイント で RespectBinding を使用可能にするには、エンドポイントで @RespectBinding (javax.xml.ws.RespectBinding) アノテーションを 使用します。@RespectBinding アノテーションの パラメーターは 1 つだけで、enabled です。このパラメーターはオプションです。 enabled パラメーターの値はブール値であり、RespectBindingFeature が JAX-WS エンドポイントに対して使用可能にされているかどうかを示します。

      次のスニペット例 は、JAX-WS MyServiceImpl エンドポイントのための @RespectBinding アノテーションの追加を示します。
      @RespectBinding(enabled=true))
      @WebService
      public class MyServiceImpl {
      ...
      }
    • <respect-binding> デプロイメント記述子エレメントを 使用します。
      サービス・エンドポイント実装クラスで @RespectBinding アノテーション を使用することに代わる方法として、webservices.xml デプロイメント記述子において、<port-component> エレメントの 中で <respect-binding> エレメントを使用 することができます。以下に例を示します。
      <port-component>
           			<port-component-name>MyPort1</port-component-name>
           <respect-binding>
               <enabled>true</enabled>
           </respect-binding>
           <service-impl-bean>
               				<servlet-link>MyPort1ImplBean</servlet-link>
           </service-impl-bean>
      </port-component>
  3. クライアントで RespectBindingFeature を使用可能に する場合、以下のいずれかの方法を使用します。
    • 次の例のように、ディスパッチ・クライアントで RespectBindingFeature を使用可能にします。
      RespectBindingFeature respectBinding = new RespectBindingFeature();
      Service svc = Service.create(serviceName);
      svc.addPort(portName, SOAPBinding.SOAP11_HTTP_BINDING, endpointUrl);
      Dispatch<Source> dsp = svc.createDispatch(portName, Source.class, Service.Mode.PAYLOAD, respectBinding);
    • 次の例のように、動的プロキシー・クライアントで RespectBindingFeature を使用可能に します。
      // Create a dynamic proxy with RespectBinding enabled.
        Service svc = Service.create(serviceName);
        RespectBindingFeature respectBinding = new RespectBindingFeature();
        RespectBindingSample proxy = svc.getPort(portName, RespectBindingSample.class, respectBinding);
    • 次の例のように、@RespectBinding アノテーションを使用してクライアントで RespectBindingFeature を 使用可能にします。
      public class MyClientApplication {
      
                     // Enable RespectBinding for a port-component-ref resource injection.
                         @RespectBinding(enabled=true)
                         		   @WebServiceRef(MyService.class)
                         		   private MyPortType myPort;
                     ...
      }
    • 次の例のように、port-component-ref エレメントの中でデプロイメント記述子エレメントを 使用して、クライアントで RespectBindingFeature を使用可能にします。
      <service-ref>
          <service-ref-name>service/MyPortComponentRef</service-ref-name>
          <service-interface>com.example.MyService</service-ref-interface>
          <port-component-ref>
              <service-endpoint-interface>com.example.MyPortType</service-endpoint-interface>
              <respect-binding>
                  <enabled>true</enabled>
              </respect-binding>
          </port-component-ref>
      </service-ref>

タスクの結果

フィーチャー RespectBindingFeature を実装することに よって、JAX-WS アプリケーションのエンドポイントに関連付けられた WSDL バインディング の内容を順守するよう指定できました。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_enablerespectbindingfeature
ファイル名:twbs_enablerespectbindingfeature.html