WSIF の目標

WSIF は、基本バインディングまたはアクセス・プロトコルに関係なく、SOAP サービスにより提供される柔軟性を一般モデルに拡張し、Web サービスを呼び出せるようにすることを目標としています。

Web サービスの SOAP バインディングは、Web Services Description Language (WSDL) 仕様の一部です。 したがって、ほとんどの開発者は、Web サービスの使用を検討する際に、SOAP クライアント API を使用して、SOAP メッセージをアセンブルし、ネットワークを介してそれをサービス・エンドポイントに送信することをまず考えます。 例えば、クライアントは Apache SOAP を使用して、Call オブジェクトを作成して取り込みます。 このオブジェクトは、サービス・エンドポイント、呼び出される SOAP オペレーションの識別番号、 送信するパラメーターなどをカプセル化します。

したがって、Web Services Invocation Framework (WSIF) の目標は、以下のようになります。

  • Web サービスの呼び出しに、バインディングに依存しないメカニズムを提供すること。
  • クライアント・コードを、 Web サービスへのアクセスに使用される特定プロトコルの複雑さから解放すること。
  • Web サービスへの複数のバインディング間の動的選択を使用可能にすること。
  • Web サービス仲介プログラムの開発を助けること。

Web サービスは単なる SOAP サービスを超えたものである

任意のアプリケーションの機能およびアクセス・プロトコル の WSDL ベースの記述を使用すると、 そのアプリケーションを Web サービスとしてデプロイすることができます。 Java™ Platform, Enterprise Edition (Java EE) 環境を使用している場合、アプリケーションは複数のトランスポートおよびプロトコルで使用できます。

例えば、データベースに保管されたプロシージャー (ストアード・プロシージャー) を使用し、それをステートレス・セッション Bean として公開し、次にそれを SOAP サービスとして SOAP ルーターにデプロイすることができます。 各段階で、 基本的なサービスは同じです。 変更されるのはアクセス・メカニズムのみです。Java DataBase Connectivity (JDBC) から Remote Method Invocation over Internet Inter-ORB Protocol (RMI-IIOP)、次に SOAP です。

WSDL 仕様は Web サービスの SOAP バインディングを定義しますが、WSDL にバインディング拡張を追加することにより、例えば、アクセス・プロトコルとして RMI-IIOP を使用する Enterprise Bean を Web サービスとして提供することができます。 単一の Java クラスを Web サービスとして扱い、スレッド内 Java メソッド呼び出しをアクセス・プロトコルとして扱うこともできます。 このように Web サービスをより広く定義する場合は、 サービス呼び出しにはバインディングに依存しないメカニズムが必要です。

クライアント・コードを特定のプロトコル実装に結び付けることによって生じる制限

クライアント・コードが、 特定のプロトコル実装のクライアント・ライブラリーに強固にバインドされていると、保守がむずかしい場合があります。

例えば、Apache SOAP から Java Message Service (JMS) またはエンタープライズ Bean に移行する場合、このプロセスには多くの時間と労力がかかる可能性があります。 このような問題を回避するためには、サービス呼び出しのための、 プロトコル実装に依存しないメカニズムが必要です。

新しいバインディングをクライアント・コードに取り込むことは困難

カスタム・プロトコル作業を Web サービスとして使用するアプリケーションを作成する場合には、拡張性エレメントを WSDL に追加して、新規バインディングを定義することができます。 しかし、この機能を実現は複雑です。

例えば、このプロトコルを使用するようクライアント API を設計する必要があります。 また、アプリケーションが Web サービスの抽象インターフェースだけを使用する場合は、抽象化層を使用可能にするスタブを生成するツールを作成しなければなりません。 これらの作業には、かなりの時間と手間がかかる場合があります。 必要なのは、既存のバインディングの更新および新規バインディングの追加に使用できるサービス呼び出しメカニズムです。

複数のバインディングを柔軟に使用できる

複数のバインディングを提供する Web サービスを利用するためには、 スタブを生成または再コンパイルしなくても、 実行時に使用可能なサービス・バインディングを切り替えることができるサービス呼び出しメカニズムが必要です。

複数のバインディングを提供する Web サービスを使用するアプリケーションが正常にデプロイされたとします。 例えば、サービス用の SOAP バインディングと、ローカル・サービス実装 (Java クラス) を Web サービスとして扱うことができるローカル Java バインディングがあるとします。

サービスのローカル Java バインディングは、クライアントがサービスと同じ環境にデプロイされている場合にのみ使用できます。 この場合、SOAP バインディングを使用するよりも、直接 Java 呼び出しを行うことによってサービスと通信する方が効率的です。

クライアントがランタイム情報に基づいて使用するバインディングを切り替えることができる場合は、 状況ごとに、使用可能なバインディングの中から最も効率的なものを選択することができます。

Web サービス環境の自由度を高めることで仲介プログラムを使用できる

Web サービスは、アプリケーション・インテグレーターに疎結合パラダイムを提供します。 このような環境では、仲介プログラムが強い力を持つ場合があります。

仲介プログラムは、 サービス要求元とターゲットの Web サービスの間で送受信されるメッセージをインターセプトし、メッセージを渡す前に何らかの仲介タスク (例えばロギング、高可用性、変換など) を実行するアプリケーションです。 Web Services Invocation Framework (WSIF) は、 仲介プログラムを簡単に作成できるように設計されています。 WSIF を使用すると、仲介プログラムは、トランスポート固有のプログラミングを行わ ずにサービス呼び出しに値を追加することができます。