7 Fast Infosetを使用したXML送信の最適化に関する概要

Fast Infosetを使用して、Oracle Infrastructure Webサービス用のXML送信を最適化する方法を、この章で詳細に説明します。

内容は次のとおりです。

7.1 Fast Infosetの概要

Fast Infosetは、テキストベースのXML形式よりも効率的にシリアライズできる、圧縮バイナリ・エンコーディング形式です。Fast Infosetは、ドキュメント・サイズと処理パフォーマンスの両方を最適化します。

有効にすると、Fast Infosetでは、データの送信前に、SOAPエンベロープのXML情報セットが圧縮バイナリ形式に変換されます。Fast Infosetは、暗号化メッセージ、署名付きメッセージ、MTOM対応メッセージおよびSOAPアタッチメントを最適化します。また、HTTPトランスポートとJMSトランスポートの両方をサポートします。

Fast Infoset機能は、すべてのWebサービスにおいて、デフォルトで有効です。Webサービス・クライアントの場合、Fast Infosetは、Webサービスで有効化されWSDLで通知されている場合にのみ有効となります。

Fast Infosetは、Webサービスまたはクライアントで、明示的に有効化および構成できます。これについて、次の項で説明します。

7.2 WebサービスでのFast Infosetの有効化

Fast Infoset機能は、デフォルトで、Webサービスで有効化され、WSDLに通知されています。次のいずれかの方法に従って、Webサービスで明示的にFast Infosetを有効にします。

  • 設計時に、com.oracle.webservices.api.FastInfosetService注釈を使用します。たとえば、次に示すコードの抜粋は、com.oracle.webservices.api.FastInfosetService注釈を使用して、設計時にWebサービスでFast Infosetを有効化し構成する例を示しています。

    package examples.webservices.fastinfoset;
    import com.oracle.webservcies.api.FastInfosetService;
    import oracle.webservices.annotations.PortableWebService;
    import javax.jws.WebMethod;
    
    @PortableWebService 
    @FastInfosetService(enabled = true) 
    public class HelloImplFastInfosetEnabled { 
       @WebMethod 
       public String hello(String name) { 
          return "Hello, " + name + "! (from FI Enabled Service)"; 
       } 
    } 
    

    この注釈の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』@FastInfosetServiceに関する説明を参照してください。

    @PortableWebService注釈の詳細は、Oracle Infrastructure WebサービスJava APIリファレンスを参照してください。

  • デプロイ後は、oracle/fast_infoset_service_policyをWebサービスにアタッチします。

    詳細は、次の項を参照してください。

7.3 Webサービス・クライアントでのFast Infosetの有効化と構成について

Fast Infoset機能は、デフォルトで、Webサービスで有効化され、WSDLに通知されています。次のいずれかの方法に従って、Webサービス・クライアント上で明示的にFast Infosetを有効化および構成します。

設計時にクライアントおよびWebサービスでFast Infosetを有効化および構成するには、次の項を参照してください。

7.3.1 コンテンツ・ネゴシエーション方針

クライアントでFast Infosetを有効にするとき、コンテンツ・ネゴシエーション・ポリシーを構成できます。

表7-1は、com.oracle.webservices.api.FastInfosetContentNegotiationTypeで定義する、有効なコンテンツ・ネゴシエーション方針をまとめたものです。

表7-1 コンテンツ・ネゴシエーション方針

説明

OPTIMISTIC

Fast Infosetがサービスで有効と見なします。すべてのリクエストが、Fast Infosetを使用して送信されます。

PESSIMISTIC

クライアントからの最初のリクエストは、Fast Infosetを有効にするのではなく、クライアントでFast Infoset機能がサポートされていることを示すHTTP受入れヘッダーを使用して送信されます。サービス・レスポンスがFast Infoset形式の場合、サービスでFast Infosetが有効になっていることが確認された後、クライアントからの後続リクエストはFast Infoset形式で送信されます。

NONE

クライアント・リクエストではFast Infosetは使用されません。

次のことに注意してください。

  • コンテンツ・ネゴシエーション戦略がクライアントで明示的に構成されている場合:

    • WSDLで通知されているネゴシエーション戦略より優先されます。

    • 構成されているコンテンツ・ネゴシエーション戦略が、サービスにより通知されている機能と競合する場合(クライアントでOPTIMISTICが構成され、サービスでFast Infosetが無効にされている場合など)は、例外が生成されます。

  • コンテンツ・ネゴシエーション戦略がクライアントで明示的に構成されていない場合:

    • Fast Infosetがサービスで有効化および通知されている場合、OPTIMISTICコンテンツ・ネゴシエーション戦略が使用されます。

    • Fast Infosetがサービスで無効化され、通知されていない場合、NONEコンテンツ・ネゴシエーション戦略が使用されます。

7.3.2 設計時のFastInfosetClientFeature機能クラスの使用

設計時にWebサービスでFast Infosetを有効にして構成するには、com.oracle.webservices.api.FastInfosetClientFeature機能クラスを使用します。

次のコードは、com.oracle.webservices.api.FastInfosetClientFeature機能クラスを使用した例の抜粋です。

package examples.webservices.fastinfoset;
import com.oracle.webservices.api.FastInfosetClientFeature;
import com.oracle.webservices.api.FastInfosetContentNegotiationType;
...
public class HelloServicePortClient {
    
    private static HelloServiceService helloServiceService;

    public static void main(String [] args)
    {
        FastInfosetContentNegotiationType clientNeg = 
            FastInfosetContentNegotiationType.PESSIMISTIC;
        FastInfosetClientFeature feature = FastInfosetClientFeature.builder().fastInfosetContentNegotiation(clientNeg).enabled(true).build(); 
        helloServiceService = new HelloServiceService();
        HelloService helloService = 
            helloServiceService.getHelloServicePort(feature);
...
}

7.4 WebサービスおよびクライアントでのFast Infosetの無効化

設計時に、WebサービスおよびクライアントでFast Infosetを明示的に無効にすることができます。

Fast Infosetを明示的に無効にするには、次のようにします。

次のコードの抜粋は、com.oracle.webservices.api.FastInfosetServiceアノテーションを使用して、設計時にWebサービスでFast Infosetを無効化する例です。

package examples.webservices.fastinfoset;
import com.oracle.webservices.api.FastInfosetService;
...
@PortableWebService 
@FastInfosetService(enabled = false) 
public class HelloImplFastInfosetDisabled{ 
   @WebMethod 
   public String hello(String name) { 
      return "Hello, " + name + "! (from FI Disabled Service)"; 
   } 
} 

デプロイメント後にFast Infosetを無効にするには次のようにします。