9.3. MTOM の有効化
デフォルトでは、Apache CXF ランタイムは MTOM サポートを有効にしません。通常の SOAP メッセージの一部として、または最適化されていない添付ファイルとしてすべてのバイナリーデータを送信します。MTOM サポートは、プログラムを用いて、または設定を使用してアクティベートできます。
9.3.1. JAX-WS API の使用
概要
サービスプロバイダーとコンシューマーの両方で、MTOM の最適化を有効にする必要があります。JAX-WS API は、各タイプのエンドポイントに異なるメカニズムを提供します。
Service provider
JAX-WS API を使用してサービスプロバイダーを公開した場合は、以下のようにランタイムの MTOM サポートを有効にします。
公開されたサービスの
Endpoint
オブジェクトにアクセスします。Endpoint
オブジェクトにアクセスするための最も簡単な方法として、エンドポイントをパブリッシュするときが挙げられます。詳細は、31章サービスの公開 を参照してください。例9.4「エンドポイントからの SOAP バインディングの取得」 で示すように、
getBinding()
メソッドを使用してEndpoint
から SOAP バインディングを取得します。例9.4 エンドポイントからの SOAP バインディングの取得
// Endpoint ep is declared previously SOAPBinding binding = (SOAPBinding)ep.getBinding();
MTOM プロパティーにアクセスするには、返されたバインディングオブジェクトを
SOAPBinding
オブジェクトにキャストする必要があります。例9.5「サービスプロバイダーの MTOM 有効プロパティーの設定」 に示されるように、バインディングの
setMTOMEnabled()
メソッドを使用して、バインディングの MTOM enabled プロパティーをtrue
に設定します。例9.5 サービスプロバイダーの MTOM 有効プロパティーの設定
binding.setMTOMEnabled(true);
コンシューマー
MTOM で JAX-WS コンシューマーを有効にするには、以下を行う必要があります。
コンシューマーのプロキシーを
BindingProvider
オブジェクトにキャストします。コンシューマープロキシーの取得は、25章WSDL コントラクトなしでコンシューマーの開発 または 28章WSDL コントラクトからのコンシューマーの開発 を参照してください。
例9.6「
BindingProvider
からの SOAP バインディングの取得」 で示すように、getBinding()
メソッドを使用してBindingProvider
から SOAP バインディングを取得します。例9.6
BindingProvider
からの SOAP バインディングの取得// BindingProvider bp declared previously SOAPBinding binding = (SOAPBinding)bp.getBinding();
例9.7「コンシューマーの MTOM 有効プロパティーの設定」 に示されるように、バインディングの
setMTOMEnabled()
メソッドを使用して、バインディングの MTOM enabled プロパティーをtrue
に設定します。例9.7 コンシューマーの MTOM 有効プロパティーの設定
binding.setMTOMEnabled(true);
9.3.2. 設定の使用
概要
コンテナーへのデプロイ時など、XML を使用してサービスを公開する場合、エンドポイントの MTOM サポートをエンドポイントの設定ファイルで有効にすることができます。エンドポイントの設定に関する詳細は、パートIV「Web サービスエンドポイントの設定」 を参照してください。
手順
MTOM プロパティーは、エンドポイントの jaxws:endpoint
要素内に設定されます。MTOM を有効にするには、以下を実行します。
-
jaxws:property
子要素をエンドポイントのjaxws:endpoint
要素に追加します。 -
entry
子要素をjaxws:property
要素に追加します。 -
entry
要素のkey
属性をmtom-enabled
に設定します。 -
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>