WSIF(Web Services Invocation Framework)
2002年5月10
日本アイ・ビー・エム株式会社 ソフトウェア事業部エマージング・テクノロジー
 米持 幸寿
WSIF(Web Services Invocation Framework)

WSIFは以下の側面をもっています。

いずれにせよWSDLさえあればWebサービスを呼び出すことは可能な訳ですが、このWSIFのAPIを使ったクライアントコードと、通常のApache SOAP 2.2 APIのクライアントコードを比較してみると違いが良く分かります。

まず、比較の対象となるWebサービスは、会社の名前をStringで渡すと株価が返ってくる「StockQuote」Webサービスで、そのWSDLは下記のものとします。

fig1

fig2

このWSDLで表現されるWebサービスを呼び出すプログラムコードを、ApacheSOAP 2.2 APIとWSIF APIで比較してみましょう。

Apache SOAP 2.2 APIによるクライアントコード

fig3

WSIF APIによるクライアントコード

fig4

これらをよく観察して判ることは、WSIFの方は、

  1. WSDL自身を要求する
  2. 実行したいメソッド名と引数を要求する
のみという事実です。それに対してApache SOAP 2.2の方は、サービスid/エンドポイントURL/エンコーディングスタイルなどの情報が、ハードコーディングされていることに気づきます。ずばり、相違点を述べてしまったきらいがあるので、WSIFが出てきた背景や詳細な意味合いをここからは、解説したいと思います。

WSIFが必要な背景は次のようなことです。

fig5

さて、今までの考察からすると、WSIFではサービスの呼び出し方法がいくつも存在することになります。バインディングの拡張ができるということは、いくつものクライアントから自分自身にアクセスし、実行してもらえるという意味では大変よいのですが、クライアントから見れば、サービスの表示方法の統一で問題が生じます。それを、解決しているのが、WSIFの代表的なAPIであるWSIFDynamicPortFactoryというクラスなどです。

【現在の呼び出しスタイルとその欠点】

現在の呼び出しスタイルは、以下のような欠点をもっています。

【WSIFの特徴】

WSIFの特徴は以下のようなことです。

ここで、また一言で結局のところどういう仕組みか?というと、WSIF APIは『WSDLを直接読むように、APIは書かれている』と言ってよいでしょう。つまり、WSDLの中身を走査しながら、実装手順としては

  1. 必要なポートタイプ(portType)をサポートするportを選ぶ
  2. 必須情報から構成される抽象入力メッセージを提供する
  3. メソッドを呼び出す
  4. 抽象出力メッセージを得る
としてやればいいわけです。

また、別の特徴としては、『メッセージinput,outputと、特定のbinding/protocolとの対応を意識する必要がない』ということも挙げられます。行き交うメッセージの特徴は

fig6

で表現し、

<binding>・・・・</binding> や

<port name="SOAPPort" binding="tns:SOAPBinding">

   <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/>

</port>

とは別に部品的にメッセージ部分と、binding/protocol部分を考えればよいわけです。

WSIFは、最新のIBMのテクノロジーWSHT1.1(料金制Webサービス構築環境)で外部のWebサービスを課金対象とする場合に使われる、WSGWの主要な技術として使われています。また、今後はWebサービスにアクセスするアプリケーション部品を自動生成したり、Webサービスのワークフローエンジンが実行フレームワークとして利用したりするようになります。WSIFがフレームワークとして利用されることにより、アプリケーションの寿命が長くなります。