この章では、Oracle Infrastructure WebサービスでFast Infosetを有効化および使用してXML送信を最適化する方法について説明します。
この章の内容は次のとおりです。
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を明示的に有効化し構成できます。
デフォルトでは、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の構成に関する説明。
次のいずれかの方法を使用して、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の構成に関する説明。
クライアントでFast Infosetを有効化する際に、コンテンツ・ネゴシエーション・ポリシーを構成できます。表7-1は、com.oracle.webservices.api.FastInfosetContentNegotiationType
で定義する、有効なコンテンツ・ネゴシエーション方針をまとめたものです。
表7-1 コンテンツ・ネゴシエーション方針
値 | 説明 |
---|---|
|
サービスでFast Infosetが有効になっていると想定します。すべてのリクエストはFast Infosetを使用して送信されます。 |
|
クライアントからの最初のリクエストはFast Infosetを有効にせずに送信されますが、クライアントがFast Infoset機能をサポートしていることを示すHTTP Acceptヘッダーが付きます。サービス・レスポンスがFast Infoset形式である場合は、サービスでFast Infosetが有効になっていると確認し、クライアントからのそれ以降のリクエストはFast Infoset形式で送信されます。 |
|
クライアント・リクエストはFast Infosetを使用しません。 |
次のことに注意してください。
コンテンツ・ネゴシエーション方針がクライアントで明示的に構成されている場合:
WSDLで通知されたネゴシエーション方針よりも優先されます。
構成されたコンテンツ・ネゴシエーション方針が、サービスによって通知された機能と競合する場合(たとえば、クライアントではOPTIMISTIC
が構成され、サービスではFast Infosetを無効にしていた場合)には例外が発生します。
コンテンツ・ネゴシエーション方針がクライアントで明示的に構成されていない場合:
サービスでFast Infosetが有効化され通知されている場合は、OPTIMISTIC
コンテンツ・ネゴシエーション方針が使用されます。
サービスでFast Infosetが無効化され通知されていない場合には、NONE
コンテンツ・ネゴシエーション方針が使用されます。
次に示すコードの抜粋は、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); ... }
設計時にFast Infosetを明示的に無効化する場合:
Webサービスの場合、アノテーションでenabled
フラグをfalse
に設定する(「WebサービスでのFast Infosetの有効化について」を参照)。
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によるポリシー・セットを使用したポリシーのグローバルなアタッチに関する説明。