7 Fast Infosetを使用した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サービスにアタッチします。詳細は、次の項を参照してください。
-
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のFusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチに関する説明
-
『Webサービスの管理』のWLSTを使用したFast Infosetの構成に関する項
-
7.3 Webサービス・クライアントでのFast Infosetの有効化と構成について
Fast Infoset機能は、デフォルトで、Webサービスで有効化され、WSDLに通知されています。次のいずれかの方法に従って、Webサービス・クライアント上で明示的にFast Infosetを有効化および構成します。
-
設計時には、「設計時のFastInfosetClientFeature機能クラスの使用」に示すように、
com.oracle.webservices.api.FastInfosetClientFeature
機能を使用します。 -
デプロイメント後に
oracle/fast_infoset_client_policy
をWebサービスにアタッチする。詳細は、次の項を参照してください。
-
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のFusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチに関する説明
-
『Webサービスの管理』のWLSTを使用したFast Infosetの構成に関する項
-
設計時にクライアントおよびWebサービスでFast Infosetを有効化および構成するには、次の項を参照してください。
7.3.1 コンテンツ・ネゴシエーション方針
クライアントでFast Infosetを有効にするとき、コンテンツ・ネゴシエーション・ポリシーを構成できます。
表7-1は、com.oracle.webservices.api.FastInfosetContentNegotiationType
で定義する、有効なコンテンツ・ネゴシエーション方針をまとめたものです。
表7-1 コンテンツ・ネゴシエーション方針
値 | 説明 |
---|---|
|
Fast Infosetがサービスで有効と見なします。すべてのリクエストが、Fast Infosetを使用して送信されます。 |
|
クライアントからの最初のリクエストは、Fast Infosetを有効にするのではなく、クライアントでFast Infoset機能がサポートされていることを示すHTTP受入れヘッダーを使用して送信されます。サービス・レスポンスがFast Infoset形式の場合、サービスでFast Infosetが有効になっていることが確認された後、クライアントからの後続リクエストはFast Infoset形式で送信されます。 |
|
クライアント・リクエストでは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を明示的に無効にするには、次のようにします。
-
「WebサービスでのFast Infosetの有効化」の説明に従って、Webサービスで注釈の
enabled
フラグをfalse
に設定します -
Webサービス・クライアントの場合、アノテーションまたは機能クラスで
enabled
フラグをfalse
に設定するか、コンテンツ・ネゴシエーション方針をNONE
に設定します(「Webサービス・クライアントでの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を無効にするには次のようにします。
-
Webサービスまたはクライアントから、それぞれ
oracle/fast_infoset_service_policy
ポリシー、oracle/fast_infoset_client_policy
ポリシーをデタッチする。詳細は、次の項を参照してください。
-
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のFusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチに関する説明
-
『Webサービスの管理』のWLSTを使用したFast Infosetの構成に関する項
-
-
グローバルにFast Infosetを無効にする場合は、Webサービスまたはクライアントの上位スコープで、それぞれ
oracle/no_fast_infoset_service_policy
ポリシー、oracle/no_fast_infoset_client_policy
ポリシーを含むポリシー・セットを定義する。詳細は、次の項を参照してください。
-
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシー・セットを使用したポリシーのグローバルなアタッチに関する説明
-
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWLSTによるポリシー・セットを使用したグローバルなポリシーのアタッチに関する項
-