Webサービスの高度なトピック
メッセージの操作
Webサービスに送られる要求メッセージを直接操作すると便利なことがある.このメッセージはToServiceRequest関数を使って取り出すことができる.ToServiceRequestは,Webサービス関数を第1パラメータに,そのパラメータを追加のパラメータに与えることにより呼び出す.この関数はWebサービス操作は実行しない.これは通常Webサービスに送られる要求メッセージを記号的XMLで表現したものを返す.
要求メッセージは,異なる値または属性を持つように変更することができる.しかし,そのメッセージはSOAPの仕様で指定された形式に従わなければならない.ToServiceRequestを使うことがユーザにはちょうどよい開始点となる.要求メッセージはInvokeServiceOperation関数を使って起動される.この関数の第1パラメータはエンドポイントURIかWebサービス関数を表すシンボルである.Webサービス関数はサービスを起動する他のオプションとともに内部的にエンドポイントURIを指定する.第2引数は要求メッセージを記号的なXMLで表したものである.
この呼び出しの結果は応答メッセージである.直接応答メッセージを扱うと便利なことがある.しかし,Webサービス関数はデフォルトで応答メッセージのデシリアライズされたものを返す.もとの応答メッセージはInvokeServiceOperation関数を使って得ることができる.第1パラメータはWebサービス関数で,関数のパラメータが続く.InvokeServiceOperationはサービスを起動し,応答メッセージすべてを記号的なXMLで返す.これにより,ユーザはどのようにデータをWolfram言語表現にデシリアライズするかをカスタマイズすることができる.
一旦InvokeServiceOperationを使ってWebサービス関数が呼び出されると,結果はSOAPエンベロプの形式で戻る.FromServiceResponseを使うとSOAPエンベロプから結果を抽出することができる.データは操作記号により指定された適切なWolfram言語型にデシリアライズされる.
WSDLなしの操作
WebサービスはWSDLファイルなしでも動作する.ユーザはWSDLファイルが利用できない状況に追い込まれることもある.WebサービスはWSDLファイルで使用した方がずっと便利であるが,Wolfram言語のWebサービスクライアントはWSDLなしで使うこともできる.ユーザは記号的なXMLを使い,SOAPメッセージを最初からWolfram言語で構築すればよい.
ToServiceRequestはXML Schema定義を使ってSOAPメッセージを構築するために使用することもできる.DefineSchemaはWebサービスの型の定義を定義するために使用することができる.この例では,IntegrateString WebサービスがIntegrateStringのルート要素を持っており,http://localhost:8080/webMathematica/Examples/WebServices/Integrate.mという名前空間を持ち,パラメータとしてstrという名の文字列を取る.
NewSchemaInstanceを使って今定義した型のインスタンスが作成でき,それはToServiceRequestに渡すことができる.これは2つのパラメータを取り,最初はメッセージのボディに対するパラメータのリストを,次にヘッダに対するパラメータのリストを取る.
ToServiceRequestも2つのオプションをサポートする.最初にOperationNameは,Webサービス操作を識別する要素をパラメータの周りにラップするために使うことができる.これはRPCスタイルのWebサービスを使うときやドキュメントスタイルのWebサービスを関数にマップするときに便利なことがある.2つ目のEncodingStyleURIは,符号化を設定するために使うことができる.サポートされる唯一の符号化スタイルは,次で示すようにSOAP符号化だけである.以下は,パラメータに型の属性を加える.
このあとInvokeServiceOperationを使って,生成されたメッセージを使ってサービスを起動することができる.InvokeServiceOperationには2つのパラメータが必要である.まず,メッセージが送られるURLを指定する終点が必要である.2つ目のパラメータはメッセージである.いくつかのオプションもサポートされる.SOAPActionURIはSOAP Actionヘッダを設定するのに使うことができる.TransportStyleURIは転送スタイルを設定するために使うことができる(現在サポートされている転送スタイルはhttpだけである).UsernameおよびPasswordは認証に使うことができ,Timeoutはタイムアウトの設定に使うことができる.
FromServiceResponseはXML Schema定義を使ってSOAPメッセージを処理するために使うことができる.DefineSchemaはWebサービスに対する戻り型を定義するために使うことができる.以下の例では,IntegrateStringがelementという名前の文字列を持つ要素を返している.FromServiceResponseはパラメータにメッセージを取り,戻り型を指定するためにオプションReturnTypeが使われる.
InstallServiceOperationはこれらの定義をWolfram言語関数としてインストールするために使うことができる.これは第1パラメータとして,関数定義が関連付けられているシンボルを取る.第2パラメータとしては,メッセージが送られる場所を定義するURLを取る.第3パラメータは関数に対するパラメータのリストである.これらのパラメータは,DefineSchemaを使って定義されたXML Schema要素定義シンボルを使って定義される.第4パラメータはヘッダパラメータのリストである.また,オプションを使うことができる.ToServiceRequest,InvokeServiceOperation,FromServiceResponseからのそれぞれのオプションが使える.
一旦関数がインストールされると, Web Services Link を使ってインストールされた他の関数と同じように使うことができる.
デバッグ
Web Services Link はデバッグの助けとなる関数を含んでいる.デバッグシンボルは次の表で定義されている.
シンボル | 説明 |
$PrintServiceRequest | Print関数を使ってWebサービスに送られるメッセージをXML形式で出力する |
$PrintServiceResponse | Print関数を使って,Webサービスから受け取られるメッセージが規則の文法式にデシリアライズされる前に,そのメッセージをXML形式で出力する |
$PrintWSDLDebug | デバッグに使うことのできる,インストールされているWebサービスについての情報を出力する.出力される情報には,オプション値,パラメータシグネチャ,Webサービス操作の終点URIがある |
$PrintShortErrorMessages | ユーザが長く威圧的なエラーメッセージを避けられるよう,エラーメッセージを短縮するかどうかを指定する |