9.3. MTOM の有効化

デフォルトでは、Apache CXF ランタイムは MTOM サポートを有効にしません。通常の SOAP メッセージの一部として、または最適化されていない添付ファイルとしてすべてのバイナリーデータを送信します。MTOM サポートは、プログラムを用いて、または設定を使用してアクティベートできます。

9.3.1. JAX-WS API の使用

概要

サービスプロバイダーとコンシューマーの両方で、MTOM の最適化を有効にする必要があります。JAX-WS API は、各タイプのエンドポイントに異なるメカニズムを提供します。

Service provider

JAX-WS API を使用してサービスプロバイダーを公開した場合は、以下のようにランタイムの MTOM サポートを有効にします。

  1. 公開されたサービスの Endpoint オブジェクトにアクセスします。

    Endpoint オブジェクトにアクセスするための最も簡単な方法として、エンドポイントをパブリッシュするときが挙げられます。詳細は、31章サービスの公開 を参照してください。

  2. 例9.4「エンドポイントからの SOAP バインディングの取得」 で示すように、getBinding() メソッドを使用して Endpoint から SOAP バインディングを取得します。

    例9.4 エンドポイントからの SOAP バインディングの取得

    // Endpoint ep is declared previously
    SOAPBinding binding = (SOAPBinding)ep.getBinding();

    MTOM プロパティーにアクセスするには、返されたバインディングオブジェクトを SOAPBinding オブジェクトにキャストする必要があります。

  3. 例9.5「サービスプロバイダーの MTOM 有効プロパティーの設定」 に示されるように、バインディングの setMTOMEnabled() メソッドを使用して、バインディングの MTOM enabled プロパティーを true に設定します。

    例9.5 サービスプロバイダーの MTOM 有効プロパティーの設定

    binding.setMTOMEnabled(true);

コンシューマー

MTOM で JAX-WS コンシューマーを有効にするには、以下を行う必要があります。

  1. コンシューマーのプロキシーを BindingProvider オブジェクトにキャストします。

    コンシューマープロキシーの取得は、25章WSDL コントラクトなしでコンシューマーの開発 または 28章WSDL コントラクトからのコンシューマーの開発 を参照してください。

  2. 例9.6「BindingProvider からの SOAP バインディングの取得」 で示すように、getBinding() メソッドを使用して BindingProvider から SOAP バインディングを取得します。

    例9.6 BindingProvider からの SOAP バインディングの取得

    // BindingProvider bp declared previously
    SOAPBinding binding = (SOAPBinding)bp.getBinding();
  3. 例9.7「コンシューマーの MTOM 有効プロパティーの設定」 に示されるように、バインディングの setMTOMEnabled() メソッドを使用して、バインディングの MTOM enabled プロパティーを true に設定します。

    例9.7 コンシューマーの MTOM 有効プロパティーの設定

    binding.setMTOMEnabled(true);

9.3.2. 設定の使用

概要

コンテナーへのデプロイ時など、XML を使用してサービスを公開する場合、エンドポイントの MTOM サポートをエンドポイントの設定ファイルで有効にすることができます。エンドポイントの設定に関する詳細は、パートIV「Web サービスエンドポイントの設定」 を参照してください。

手順

MTOM プロパティーは、エンドポイントの jaxws:endpoint 要素内に設定されます。MTOM を有効にするには、以下を実行します。

  1. jaxws:property 子要素をエンドポイントの jaxws:endpoint 要素に追加します。
  2. entry 子要素を jaxws:property 要素に追加します。
  3. entry 要素の key 属性を mtom-enabled に設定します。
  4. entry 要素の value 属性を true に設定します。

例9.8「MTOM の有効化設定」 は、MTOM が有効なエンドポイントを示しています。

例9.8 MTOM の有効化設定

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

  <jaxws:endpoint id="xRayStorage"
                  implementor="demo.spring.xRayStorImpl"
                  address="http://localhost/xRayStorage">
    <jaxws:properties>
      <entry key="mtom-enabled" value="true"/>
    </jaxws:properties>
  </jaxws:endpoint>
</beans>