Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの開発 12c (12.2.1.2.0) E82857-02 |
|
前 |
次 |
この章の内容は次のとおりです:
Fast Infosetは圧縮されたバイナリ・エンコーディング・フォーマットで、テキストベースのXMLフォーマットより効率的にシリアライズできます。Fast Infosetでは、ドキュメント・サイズと処理パフォーマンスの両方が最適化されます。
Fast Infosetが有効な場合、データが送信される前に、SOAPエンベロープ内のXML情報セットは、圧縮されたバイナリ・フォーマットに変換されます。Fast Infosetでは、暗号化メッセージ、署名されたメッセージ、MTOM対応メッセージおよびSOAP添付ファイルが最適化され、HTTPとJMSの両方のトランスポートがサポートされます。
Fast Infosetの仕様、ITU-T Rec.X.891 and ISO/IEC 24824-1 (Fast Infoset)は、ITU-TとISOの両方の標準化団体で定義されています。この仕様は、ITU Webサイト、http://www.itu.int/rec/T-REC-X.891-200505-I/en
からダウンロードできます。
Fast Infoset機能は、すべてのWebサービスにおいて、デフォルトで有効です。Webサービス・クライアントの場合、Fast Infosetは、Webサービスで有効化されWSDLで通知されている場合にのみ有効となります。
Fast Infosetは、Webサービスまたはクライアントで、明示的に有効化および構成できます。これについて、次の項で説明します。
Fast Infoset機能は、デフォルトで、Webサービスで有効化され、WSDLに通知されています。次のいずれかの方法を使用することにより、WebサービスでFast Infosetを明示的に有効にできます。
設計時には、設計時に@FastInfosetService注釈を使用する例に示すように、com.oracle.webservices.api.FastInfosetService
注釈を使用します。この注釈の詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理の@FastInfosetServiceを参照してください。
デプロイメント後にoracle/fast_infoset_service_policy
をWebサービスにアタッチする。詳細は、次の項を参照してください。
Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のFusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチ
Webサービスの管理のWLSTを使用したFast Infosetの構成
Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のoracle/fast_infoset_service_policy
設計時に@FastInfosetServiceアノテーションを使用する例
次のコードの抜粋は、com.oracle.webservices.api.FastInfosetService
アノテーションを使用して、設計時にWebサービスでFast Infosetを有効化および構成する例です。
package examples.webservices.hello_world; import javax.jws.WebService; import com.oracle.webservices.api.FastInfosetService; @WebService(name="HelloWorldPortType", serviceName="HelloWorldService") @FastInfosetService(enabled=true) public class HelloWorldImpl { public String sayHelloWorld(String message) { try { System.out.println("sayHelloWorld:" + message); } catch (Exception ex) { ex.printStackTrace(); } return "Message from FI Enabled Service: '" + message + "'"; } }
次のいずれかの方法を使用することにより、Webサービス・クライアントでFast Infosetを明示的に有効化および構成できます。
設計時にcom.oracle.webservices.api.FastInfosetClientFeature
機能クラスを使用する(設計時にFastInfosetClientFeature機能クラスを使用する例を参照)。
com.oracle.webservices.api.FastInfosetClient
アノテーション(「設計時に@FastInfosetClientアノテーションを使用する例」を参照)。この注釈の詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理の@FastInfosetServiceを参照してください。
com.oracle.webservices.api.FastInfosetClientFeature
機能クラス(設計時にFastInfosetClientFeature機能クラスを使用する例を参照)。
デプロイメント後にoracle/fast_infoset_client_policy
をWebサービスにアタッチする。詳細は、次の項を参照してください。
Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のFusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチ
Webサービスの管理のWLSTを使用したFast Infosetの構成
Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のoracle/fast_infoset_client_policy
Fast Infosetがクライアントで有効な場合は、コンテンツ・ネゴシエーション・ポリシーの構成が可能です。表16-1で、com.oracle.webservices.api.FastInfosetContentNegotiationType
によって定義される有効なコンテンツ・ネゴシエーション戦略について説明します。
表16-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
コンテンツ・ネゴシエーション戦略が使用されます。
次のコードの抜粋は、設計時にWebサービス・クライアントでFast Infosetを有効化し、コンテンツ・ネゴシエーション戦略を構成するためのcom.oracle.webservices.api.FastInfosetClient
注釈を使用する例です。
この例は更新する必要があります。
package examples.webservices.fastinfoset.client; import com.oracle.webservices.api.FastInfosetClient; import com.oracle.webservices.api.FastInfosetContentNegotiationType; import javax.xml.ws.WebServiceRef; ... public class HelloServicePortClient { @WebServiceRef @FastInfosetClient(fastInfosetContentNegotiation = FastInfosetContentNegotiationType.OPTIMISTIC) private static HelloServiceService helloServiceService; ... }
次のコードの抜粋は、com.oracle.webservices.api.FastInfosetClientFeature
機能クラスを使用して、設計時にWebサービスでFast Infosetを有効化および構成する例です。
package examples.webservices.hello_world.client; import javax.xml.namespace.QName; import java.net.MalformedURLException; import java.net.URL; import com.oracle.webservices.api.FastInfosetClientFeature; import com.oracle.webservices.api.FastInfosetContentNegotiationType; public class Main { public static void main(String[] args) { HelloWorldService service; FastInfosetContentNegotiationType clientNeg = FastInfosetContentNegotiationType.PESSIMISTIC; FastInfosetClientFeature feature = FastInfosetClientFeature.builder().fastInfosetContentNegotiation(clientNeg).enabled(true).build(); try { service = new HelloWorldService(new URL(args[0] + "?WSDL"), new QName("http://hello_world.webservices.examples/", "HelloWorldService") ); } catch (MalformedURLException murl) { throw new RuntimeException(murl); } HelloWorldPortType port = service.getHelloWorldPortTypePort(feature); String result = null; result = port.sayHelloWorld("Hi there!"); System.out.println( "Got result: " + result ); } }
設計時に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.hello_world; import javax.jws.WebService; import com.oracle.webservices.api.FastInfosetService; @WebService(name="HelloWorldPortType", serviceName="HelloWorldService") @FastInfosetService(enabled=false) public class HelloWorldImpl { public String sayHelloWorld(String message) { try { System.out.println("sayHelloWorld:" + message); } catch (Exception ex) { ex.printStackTrace(); } return "Message from FI Enabled Service: '" + message + "'"; } }
デプロイメント後に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によるポリシー・セットを使用したグローバルなポリシーのアタッチ。