WebSphere Application Server Version 6.1 Feature Pack for Web Services   
             オペレーティング・システム: AIX , HP-UX, i5/OS, Linux, Solaris, Windows, Windows Vista, z/OS

             目次と検索結果のパーソナライズ化
             New or updated topic for this feature pack

JAX-WS Web サービスでの MTOM の使用可能化

Java API for XML-Based Web Services (JAX-WS) の場合、 Web サービス要求のほかに、イメージやファイルなどのバイナリー添付を送信することができます。 JAX-WS では、SOAP Message Transmission Optimization Mechanism (MTOM) の規定に従い、 バイナリー・データの最適化伝送のサポートが追加されています。

このタスクについて

JAX-WS は、バイナリー添付データの送信用に SOAP Message Transmission Optimized Mechanism (MTOM) の使用をサポートします。MTOM を使用可能にすることにより、 データが XML 文書に含まれるようにするためにデータ・エンコードを行うコストを負担することなく、 バイナリー・データの送受信を最適に行うことができます。

WebSphere Application Server Feature Pack for Web Services は、JAX-WS アプリケーションの場合にのみ、MTOM を使用した添付の送信をサポートします。 本製品は、新規の MTOM および XOP 規格を使用することによって、 Web サービス・セキュリティー SOAP メッセージに添付を提供する機能も提供します。

JAX-WS アプリケーションは、XML 文書内に含まれる base64 または hexBinary エンコード・データとして、バイナリー・データを送信できます。 しかし、MTOM が備える最適化機能を利用するには、MTOM を使用可能にして、 バイナリーの base64 データを XML 文書外に含まれる添付として送信してください。 MTOM の最適化を使用できるのは、 xs:base64Binary データ型の場合のみです。 MTOM オプションは、デフォルトでは使用不可になっています。 JAX-WS アプリケーションでは、MTOM サポートを有効にするために、クライアント成果物とサーバー成果物の両方を別個に構成する必要があります。 サーバーの場合、MTOM を使用可能にできるのは、JAX-WS JavaBeans エンドポイント上のみで、 プロバイダー・ベースのエンドポイント上ではできません。

プロシージャー

  1. Web サービス・アプリケーションのデータ (バイナリー添付ファイルを含む) を表す XML スキーマまたは Web サービス記述言語 (WSDL) ファイルを含む JAX-WS アプリケーションの、Java 成果物を開発します。
    1. WSDL ファイルから開始する場合、必要な JAX-WS 移植可能成果物を生成するために、 wsimport コマンドを使用して WSDL ファイルから Java 成果物を開発します
    2. JavaBeans コンポーネントから開始する場合、 JAX-WS アプリケーションの Java 成果物を開発し、オプションとして wsgen コマンドを使用して WSDL ファイルを生成します。 XML スキーマ または WSDL ファイルには、バイナリー・データの xsd:base64Binary または xsd:hexBinary エレメント定義が含まれています。
    3. JAXB によるマッピングに影響が及ぶように、エレメントに xmime:expectedContentTypes 属性を含めることもできます。
  2. JavaBeans エンドポイントの MTOM を使用可能にします。 エンドポイントの MTOM を使用可能にするには、 サーバー・エンドポイント実装クラスで @BindingType (javax.xml.ws.BindingType) アノテーションを使用して、 エンドポイントが MTOM バインディング・タイプの 1 つをサポートするように指定し、 応答メッセージが MTOM 対応になるようにします。 javax.xml.ws.SOAPBinding クラスで、2 つの異なる定数、 SOAP11HTTP_MTOM_BINDINGSOAP12HTTP_MTOM_BINDING を定義します。この定義は、@BindingType アノテーションの値として使用できます。 以下に例を示します。
    // for SOAP version 1.1
    @BindingType(value = SOAPBinding.SOAP11HTTP_MTOM_BINDING)
    // for SOAP version 1.2
    @BindingType(value = SOAPBinding.SOAP12HTTP_MTOM_BINDING)
    
  3. クライアントの MTOM を有効にし、 javax.xml.ws.soap.SOAPBinding クライアント・サイド API を使用して、メッセージを送信します。 クライアントの MTOM を有効にすると、サーバーに送信されるバイナリー・メッセージが最適化されます。
    1. ディスパッチ・クライアントの MTOM を使用可能にします。 次の例では、SOAP バージョン 1.1 を使用します。
      - 1 番目の方法:  SOAPBinding.setMTOMEnabled() を使用する:
      
          SOAPBinding binding = (SOAPBinding)dispatch.getBinding();
          binding.setMTOMEnabled(true);
      
      - 2 番目の方法: 指定した場所で Service.addPort を使用する:
      Service svc = Service.create(serviceName);
      svc.addPort(portName,SOAPBinding.SOAP11HTTP_MTOM_BINDING,endpointUrl); 
      
    2. 動的プロキシー・クライアントの MTOM を使用可能にします。
       // Create a BindingProvider bp from a proxy port.
                  Service svc = Service.create(serviceName);
                  MtomSample proxy = svc.getPort(portName, MtomSample.class);
      BindingProvider bp = (BindingProvider) proxy;
      
      //Enable MTOM
                  SOAPBinding binding = (SOAPBinding) bp.getBinding();
                  binding.setMTOMEnabled(true);
      

結果

MTOM を使用してバイナリー・データを最適な状態で送受信する、JAX-WS Web サービスのサーバーおよびクライアント・アプリケーションを開発しました。

以下の例は、WSDL ファイルから開始する際に、Web サービスのクライアント・エンドポイントとサーバー・エンドポイントの両方で MTOM サポートを有効にする方法を示しています。

  1. xsd:base64Binary エレメントを含む WSDL ファイルを見つけます。 次の例は、xsd:base64Binary エレメントを含む WSDL ファイルの一部分です。
      <types>
        ........
    <xs:complexType name="ImageDepot">
           <xs:sequence>
               <xs:element name="imageData" 
                           type="xs:base64Binary"                        
                           xmime:expectedContentTypes="image/jpeg"/>
    
           </xs:sequence>
        </xs:complexType>
        ........
        </types>
    
  2. WSDL ファイルの app_server_root¥bin¥ ディレクトリーから wsimport コマンドを実行して、一連の JAX-WS 移植可能成果物を生成します。 [Windows]
    app_server_root¥bin¥wsimport.bat <wsdl_url>
    [Linux] [AIX] [HP-UX] [Solaris]
    app_server_root/bin/wsimport.sh <wsdl_url> 
    WSDL ファイルに含まれる expectedContentTypes 値に応じて、 生成される JAXB 成果物は次表に記述されている Java タイプになります。
    MIME タイプ Java 型
    image/gif java.awt.Image
    image/jpeg java.awt.Image
    text/plain java.lang.String
    text/xml javax.xml.transform.Source
    application/xml javax.xml.transform.Source
    */* javax.activation.DataHandler
  3. 他の JAX-WS アプリケーションで使用されるような JAXB 成果物を使用します。 これらの Bean を使用して、ディスパッチ・クライアント API と動的プロキシー・クライアント API の両方からバイナリー・データを送信します。
  4. ディスパッチ・クライアントで MTOM を使用可能にします。
    //Create the Dispatch instance.
            JAXBContext jbc = JAXBContext.newInstance("org.apache.axis2.jaxws.sample.mtom");
            Dispatch<Object> dispatch = svc.createDispatch(portName, jbc, Service.Mode.PAYLOAD);
    
    //Enable MTOM.
            SOAPBinding binding = (SOAPBinding) dispatch.getBinding();
            binding.setMTOMEnabled(true);
    
  5. 動的プロキシー・クライアントで MTOM を使用可能にします。
    //Create the Dynamic Proxy instance.
            Service svc = Service.create(serviceName);
            MtomSample proxy = svc.getPort(portName, MtomSample.class);
    
    //Enable MTOM.
            BindingProvider bp = (BindingProvider) proxy;
            SOAPBinding binding = (SOAPBinding) bp.getBinding();
            binding.setMTOMEnabled(true);
    
    JAX-WS クライアントを MTOM 対応にしたので、サーバーに送られるメッセージでも MTOM が使用可能になっています。しかし、サーバーが MTOM を使用してクライアントに応答する場合は、 JavaBeans エンドポイントで MTOM が使用できるようにする必要があります。
  6. JavaBeans エンドポイントで MTOM を使用可能にします。
    WebService (endpointInterface="org.apache.axis2.jaxws.sample.mtom.MtomSample")
    @BindingType (SOAPBinding.SOAP11HTTP_MTOM_BINDING)
    public class MtomSampleService implements MtomSample {
       ....
    }
    jaxax.xml.ws.SOAPBinding クラスには、サポートされるバインディング・タイプごとに静的メンバーが含まれています。 SOAP11HTTP_MTOM_BINDING または SOAP12HTTP_MTOM_BINDING のいずれかを、@BindingType アノテーションの値として含めます。 この値により、すべてのサーバー応答で MTOM が使用可能になります。

サーバーおよびクライアントで MTOM を使用可能にすると、 添付を表すバイナリー・データは Multipurpose Internet Mail Extensions (MIME) 添付として SOAP メッセージに組み込まれます。MTOM を使用しない場合、 同じデータは XML スキーマを記述するフォーマット (base64 または 16 進数) でエンコードされて、XML 文書に組み込まれます。

この例は、 添付データ付きの MTOM 対応 SOAP バージョン 1.1 メッセージを示しています。 type 属性と content-type 属性は、両方とも値 application/xop+xml を取ります。 これは、MTOM を有効にしたときに XML-binary Optimized Packaging (XOP) を使用してメッセージが正常に最適化されたことを示します。 この例は、MTOM を有効にした通信線上で、最適化されたメッセージがどのようになるかを示しています。
… other transport headers ... 
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812; type="application/xop+xml"; start="
<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>"; start-info="text/xml"; charset=UTF-8

--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: application/xop+xml; charset=UTF-8; type="text/xml";
content-transfer-encoding: binary
content-id: 
   <0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>

<?xml version="1.0" encoding="UTF-8"?>
         <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
            <soapenv:Header/>
            <soapenv:Body>
               <sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
                  <input>
                     <imageData>
                        <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org"/>
                     </imageData>
                  </input>
               </sendImage>
            </soapenv:Body>
         </soapenv:Envelope>
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: text/plain
content-transfer-encoding: binary
content-id:
         <1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org>

… binary data goes here …
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812--
それとは対照的に、 次の例は、MTOM を無効にした通信線上の SOAP バージョン 1.1 メッセージを示しています。 添付は SOAP メッセージの本体に組み込まれており、 SOAP メッセージは最適化されません。
… other transport headers ...
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header/>
      <soapenv:Body>
         <sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
            <input>
               <imageData>R0lGADl  … more base64 encoded data …  KTJk8giAAA7</imageData>
            </input>
         </sendImage>
      </soapenv:Body>
   </soapenv:Envelope>



関連概念
XML-binary Optimized Packaging
XML 情報セット
メッセージ送信最適化メカニズム
Web サービスの保護のための新機能
関連タスク
JavaBeans からの Web サービス・アプリケーションの開発
ポリシー・セットを使用したメッセージ・パーツの署名と暗号化
WSS API を使用したメッセージ・レベルでの Web サービス・アプリケーションの保護
WSSEncryption API を使用した SOAP メッセージの暗号化
関連資料
JAX-WS のアノテーション
関連情報
Web サービス仕様と API
Java API for XML Web Services (JAX-WS) API documentation
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 4:10:06 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/twbs_enablemtom.html