CACHÉによるWebサービスクライアントの作成方法
Caché WebサービスコンシューマがWebサービスプロデューサと通信するには、プロデューサのプロキシクラスを必要とします。Cachéでは、このプロキシクラスを、ウィザードを利用し、WSDLドキュメントに基づいて自動的に生成します。ウィザードでは、WSDLドキュメントのアドレスを指定するだけです。また、Cachéは、SOAP―オブジェクト間の変換をすべて自動的に行うため、CachéのアプリケーションとWebサービスとの通信が完全に透過的になります。
ウィザードを利用したプロキシクラスの作成
Caché Webサービスクライアントウィザードを利用して、プロキシクラスを生成してみましょう。
- Cachéスタジオで、プロデューサ側とは異なるネームスペースを選択します。
- [ツール]の[アドイン]メニューから[アドイン]を選択して、[アドイン]ダイアログを表示させます。
- [SOAP Client Wizard]を選択し、[OK]ボタンを押して、[SOAPクライアントウィザード]を起動します。
- プロデューサアプリケーションのWSDLドキュメントのURLを入力し、[次]ボタンを押します。クライアントウィザードの[WSDLソース]画面で、WSDLドキュメントが表示されるので、問題がなければ、オプションはデフォルトのままで[次]ボタンを押します。
- [SOAPクライアントクラスを生成中]と表示された画面に変わりますので、生成が完了したら、[完了]ボタンを押します。これで指定したネームスペースにプロキシクラスがインストールされて、生成は完了です。
CACHÉによるWebサービスのエラー処理
SOAPには、フォルト要素という、フォルトの原因となった特定のエラーに関する情報を、Webサービスプロデューサから返す仕組みがあります。Cachéでは%SOAP.Fault
オブジェクトを使用しますが、CachéのWebサービスプロデューサは、これらのオブジェクトをSOAPの標準的なフォルト要素に変換してからクライアントに返します。このようにプロデューサから受け取ったフォルト要素は、CachéのWebサービスコンシューマによって、%SOAP.Fault
オブジェクトに自動的に変換されます。
%SOAP.Fault
オブジェクトには、次表のようなプロパティがあります。
プロパティ | 説明 |
detail | フォルトの原因に関する情報 |
faultactor | フォルトを生成したサービスのURI |
faultcode | SOAPの仕様で定義されているSOAPフォルトコード |
faultstring | フォルトの原因に関する説明 |
Webサービスプロデューサ側では、エラーの可能性がある箇所すべてでSOAPフォルトを生成させる必要があります。しかし、SOAPフォルト生成コードが何度も実行される事態は回避しなければなりません。そのためには、エラーコードと詳細をパラメータとして受け取り、適切なSOAPフォルトを生成する、次のようなメソッドを用意しておく必要があります。
ClassMethod ApplicationError(code, detail) { set fault=##class(%SOAP.Fault).%New() set fault.faultcode=code set fault.detail=detail set fault.faultstring="application error" do ..ReturnFault(fault) }
このメソッドは、%SOAP.WebService ReturnFault
メソッドを呼び出し、Webサービスの実行を即座に停止し、有効なSOAPメッセージをクライアントに返します。
サンプルアプリケーションについて
Cachéでは、Webサービスの演習用に、前述したサンプルカタログページ「SOAP.Demo」が用意されています(http://localhost:57772/csp/samples/SOAP.Demo.cls)。生成されたソースコードは、SAMPLESネームスペース内の「SOAPDemo」内にありますので、参照してください。
まとめ
今回は、CachéによるWebサービスの概要として、「Webサービスウィザード」と「Webサービスクライアントウィザード」を中心に解説しました。本稿は、Cachéドキュメントをもとに構成していますので、さらに詳しく知りたい方は、「ドキュメント」の「Caché言語バインディング」と「Cachéチュートリアル」の該当ページを参照してください。