Web Service Invocation Framework (WSIF) は、Web サービスを呼び出すための Java™ API を提供します。
この API は、サービスのフォーマットや、そのサービスを呼び出す際に使用するトランスポート・プロトコルには依存しません。
このタスクについて
WSIF API では、Web サービス記述言語 (WSDL) で定義される Web サービスの呼び出しがサポートされています。
WSIF は、WSIF クライアントおよび Web サービス仲介の両方での使用を対象としています。
WSIF API は WSDL の抽象サービス記述で駆動し、使用されるバインディングに全く依存しません。
API では WSDL 用語を使用してメッセージ部分、操作、その他の項目を参照するため、
この独立性により、より自然に API で作業できるようになります。
WSIF API は、WSDL 使用モデル用に設計されました。
- 必要なポート・タイプをサポートするポートを選択します。
- メッセージが特定のバインディング・プロトコルにどのようにマップされるかということを気にすることなく、
必須のパーツで構成された必要な抽象入力メッセージを出すことによって操作を起動します。
SOAP API などの他の Web サービス API は WSDL で設計されておらず、
関連付けられた構文 (例えば、ターゲット URI やエンコード・スタイル) を指定された特定のバインディング・プロトコル用に設計されています。
主要な WSIF API インターフェースについては、以下の手順で説明します。
注: Apache では WSIF はサポートされなくなりました。
- WSIFMessage インターフェースを使用してポートに送信するメッセージを作成します。
WSDL では、メッセージは、操作への入力または出力の抽象タイプについて記述しています。
対応する WSIF クラスは WSIFMessage であり、
これはメモリー内の操作の入力または出力を表します。
WSIFMessage インターフェースは、データの表記を WSDL によって定義される抽象タイプから分離します。
WSIFMessage クラスは、
一連の名前付き部分用のコンテナーです。WSIFMessage クラスは Java 仮想マシン (JVM) 間で送信できます。
- 実行時の WSIF メッセージを、Java クラスまたは XML のどちらで表示するかを選択します。
ランタイム環境で WSDL メッセージを表示する一般的な方法として、以下の 2 つがあります。
- Java API for XML-based remote procedure call (JAX-RPC) によって提供される
Java クラスなどの、
WSDL から Java へのマッピングに基づいて生成された Java クラス。
- データの XML 表記 (例えば SOAP エンコード方式の使用)。
オプションごとにシナリオが異なり、それぞれに利点があります。
Java クラスは、
標準 Java クライアントで WSIF が使用されている場合の適切な方法です。
しかし、仲介プログラムで WSIF が使用されているその他のシナリオでは、
WSDL メッセージを SOAP エンコード・フォーマットにしておくほうがより効果的です。メッセージを定義するために使用されるスタイルは、メッセージ内で一貫していなければなりません。
したがって、1 つのメッセージ内の部分は、すべて一貫していなければなりません。
ストリング
getRepresentationStyle() は常に
NULL を
戻します。これは、この WSIFMessage クラスのパーツが Java オブジェクトとして表示されることを示しています。
- WSIF メッセージのパーツを取得および設定します。
setObjectPart または setTypePart メソッドを使用してパーツを WSIFMessage クラスに追加します。各パーツには名前が付いています。
メッセージ内の部分名は固有です。
パーツを複数回設定する場合、最後の設定が使用されます。
getObjectPart または getTypePart メソッドを使用して、WSIFMessage クラスから
名前によりパーツを検索します。指名されたパーツが存在しない場合、このメソッドは WSIFException エラーを戻します。
イテレーターを使用して、getParts() および getPartNames() メソッドを介して、
メッセージからパーツを検索することができます。
各パーツを設定する順序は重要ではありませんが、WSDL で指定されるパラメーターの順序でパーツを設定すると、メッセージ実装がより効率的になる場合があります。
WSIFMessage クラスは複製可能かつシリアライズ可能です。
設定された部分が複製可能でない場合、
実装はシリアライゼーションを使用してそれらの部分を複製しようとします。
それらの部分がシリアライズも可能でない場合は、
複製しようとすると CloneNotSupportedException がスローされます。
- WSIF メッセージ名を設定します。
WSIFMessage クラスには、メッセージ部分のほかに、メッセージ名も含まれています。
これは、WSDL および WSIF でサポートされている操作の過負荷の際に必要になります。
WSIFMessage インターフェース (/wsi/org/apache/wsif/WSIFMessage.html) について詳しくは、WSIF で提供される生成された API 文書を参照してください。
- WSIFService インターフェースおよび WSIFServiceFactory クラスを使用して
ポート・ファクトリーまたはサービスを検索します。
WSIFService インターフェースは、WSDL アプローチをモデル化および
サポートするポート・ファクトリーです。WSDL アプローチでは 1 つ以上のポートでサービスを使用できます。ファクトリーは、ポートの実装を隠蔽します。WSIF は、
特定のプロトコルおよびトランスポートに基づき、
実行時に WSDL を使用して構成された動的ポートをサポートします。
例えば、動的 SOAP ポートは、
そのサービスの WSDL 記述に基づいて任意の SOAP サービスを呼び出すことができます。したがって、
実行時に使用可能なポートのセットを隠蔽および変更することができます。
Web アドレスにある WSDL 文書から、またはコードで生成されたコード・ベースからサービスを検索するには、WSIFServiceFactory クラスを使用します。
- WSIFPort インターフェースおよび WSIFOperation
インターフェースを使用して操作を起動します。
WSIFPort インターフェースは、操作の呼び出しの詳細を処理します。
ポートにより、サービスの実装へのアクセスが提供されます。
WSDL 文書は、多くの異なる WSDL バインディングを提供し、
これらのバインディングは複数のポートを駆動することができます。クライアントおよびサービス・スタブはポートを選択でき、
また WSIF はデフォルト・ポートを選択することができます。
ポートは、Operation オブジェクトを取得するためのインターフェースを提供します。
WSIFOperation インターフェースは、与えられた操作を実行する機能を提供します。
ポートがシリアライズされ、その後デシリアライズされると、
WSIF は、インスタンスを識別するための正しい情報がクライアントによって確実にサーバーに提供されるようにします。
サーバー・インスタンスがもう使用可能でない場合、
サーバーが、障害を作成するか、あるいは新規インスタンスを提供するかを決める必要があります。
その動作は、サービスのタイプにより決まります。
例えば、エンタープライズ Bean の場合、WSIFPort インターフェースは EJB ホームを保管し、それぞれの呼び出しの前にそのホームを使用して Bean を選択します。
インスタンス・サポートが必要な場合、クライアントが、ポート・インスタンスのシリアライズまたは保守を行います。
クライアントは、それぞれの呼び出し用に新規オペレーションとメッセージを作成する必要があります。