ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Infrastructure Webサービスの開発
12c (12.1.2)
E48045-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 Fast Infosetを使用したXML送信の最適化

この章では、Oracle Infrastructure WebサービスでFast Infosetを使用する方法について説明します。

この章の内容は次のとおりです。

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で通知された場合にのみ有効になります。

次の項の手順に従って、WebサービスまたはクライアントでFast Infosetを明示的に有効化し構成できます。

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

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

設計時に@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)"; 
   } 
} 

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

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

次のいずれかの方法を使用して、Webサービス・クライアントでFast Infosetを明示的に有効化して構成できます。

コンテンツ・ネゴシエーション方針の構成

クライアントでFast Infosetを有効化する際に、コンテンツ・ネゴシエーション・ポリシーを構成できます。表7-1は、com.oracle.webservices.api.FastInfosetContentNegotiationTypeで定義する、有効なコンテンツ・ネゴシエーション方針をまとめたものです。

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

説明

OPTIMISTIC

サービスでFast Infosetが有効になっていると想定します。すべてのリクエストはFast Infosetを使用して送信されます。

PESSIMISTIC

クライアントからの最初のリクエストはFast Infosetを有効にせずに送信されますが、クライアントがFast Infoset機能をサポートしていることを示すHTTP Acceptヘッダーが付きます。サービス・レスポンスがFast Infoset形式である場合は、サービスでFast Infosetが有効になっていると確認し、クライアントからのそれ以降のリクエストはFast Infoset形式で送信されます。

NONE

クライアント・リクエストはFast Infosetを使用しません。


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

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

    • WSDLで通知されたネゴシエーション方針よりも優先されます。

    • 構成されたコンテンツ・ネゴシエーション方針が、サービスによって通知された機能と競合する場合(たとえば、クライアントではOPTIMISTICが構成され、サービスではFast Infosetを無効にしていた場合)には例外が発生します。

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

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

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

設計時にFastInfosetClientFeature機能を使用する例

次に示すコードの抜粋は、com.oracle.webservices.api.FastInfosetClientFeature機能クラスを使用して、設計時にWebサービスでFast Infosetを有効化し構成する例を示しています。

package examples.webservices.fastinfoset;
import com.oracle.webservices.api.FastInfosetClientFeature;
import com.oracle.webservices.api.FastInfosetContentNegotiationType;
import javax.xml.ws.WebServiceRef;
...
public class HelloServicePortClient {
    @WebServiceRef
    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);
...
}

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を無効化する場合: