前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

19.6. Web サービスの開発

Web サービスを実装するためのクラスとして、 以下の SOAP(Simple Object Access Protocol) クラスが利用可能です。

表 19.18. SOAP クラス

クラス名 解説
SFXSOAPParser DOM 方式で SOAP メッセージを解析するためのクラスです。
SFXSOAPWriter SOAP メッセージを作成するクラスです。
SFXSOAPRPC SOAP-RPC プロトコルを扱うクラスです。
SFXSOAPServiceProxy WSDL 文書を解析して SOAP-RPC プロキシを作成し、ダイナミックバイディングを行うクラスです。

19.6.1. SOAP

SOAP ( Simple Object Access Protocol ) は、 XML と HTTP や SMTP などをベースに、サーバーのサービスを呼び出すためのプロトコルです。

SOAP によるオブジェクト間通信でやり取りされるデータ(SOAP メッセージ)は、 プロトコルバインディングヘッダーと SOAP Envelope から構成されます。

図 19.5. SOAP メッセージの構造

SOAP メッセージの構造

プロトコルバインディングヘッダーには、実装するプロトコル毎に定められているヘッダー情報が記述されます。

SOAP Envelope は、 Envelope 要素(<SOAP-ENV:Envelope>)をルート要素(最上位要素)とする XML 文書のことで、 SOAP Header と SOAP Body から構成されます。 SOAP Header と SOAP Body の最上位要素はそれぞれ <SOAP-ENV:Header> と <SOAP-ENV:Body> になります。 つまり、Envelope 要素は、Header 要素(SOAP Header)と Body 要素(SOAP Body)を子要素に持ちます。

SOAP Header には、SOAP メッセージの受信者が SOAP Body に記述された情報をどのサーバーに渡し、 どのように処理するかといった情報(セキュリティ情報、トランザクション情報、セッション情報など)が記述されます。 SOAP Header は、任意です(SOAP Envelope に存在しない場合もあります)。

SOAP Body には、実際のメッセージが記され、SOAP Envelope には必須です。 例えば、SOAP-RPC の場合、この部分には Web サービスのメソッド名やパラメータ情報が記述されます。

SFXSOAPParser クラスは、 SFXXMLDOMParser クラスを継承し、 SOAP メッセージの Envelope 要素(SOAP Envelope)以下の内容を DOM ツリーをメモリ上に展開します。

SFXSOAPParser クラスに定義されている以下の関数を利用することにより、 開発者は DOM ツリーを操作することなく、直接 SOAP メッセージの各種情報を取得できます。

主な SFXSOAPParser クラスの機能

表 19.19. SFXSOAPParser クラスの関数 ( 抜粋 1 )

関数名 解説
SFXSOAPParser::GetEnvelope SOAP メッセージの Envelope 要素(SOAP Envelope)を取得します。
SFXSOAPParser::GetHeader SOAP メッセージの Header 要素(SOAP Header)を取得します。
SFXSOAPParser::GetBody SOAP メッセージの Body 要素(SOAP Body)を取得します。
SFXSOAPParser::GetFault SOAP メッセージの Fault 要素(SOAP Fault)を取得します。

表 19.20. SFXSOAPParser クラスの関数 ( 抜粋 2 )

関数名 解説
SFXSOAPParser::GetBodyEntries SOAP メッセージの Body 要素(SOAP Body)のすべての子要素を取得します。
SFXSOAPParser::GetBodyEntry SOAP メッセージの Body 要素(SOAP Body)の指定された子要素を取得します。
SFXSOAPParser::GetHeaderEntries SOAP メッセージの Header 要素(SOAP Header)のすべての子要素を取得します。
SFXSOAPParser::GetHeaderEntry SOAP メッセージの Header 要素(SOAP Header)の指定された子要素
SFXSOAPParser::GetRPCParameter SOAP メッセージの Body 要素(SOAP Body)の各子要素の第 1 子要素の中から指定されたパラメータと一致する最初の要素を取得します。
SFXSOAPParser::GetRPCResult SOAP メッセージの Body 要素(SOAP Body)の第 1 子要素の第 1 子要素を取得します。
SFXSOAPParser::GetRPCStruct SOAP メッセージの Body 要素(SOAP Body)の第 1 子要素を取得します。

SFXSOAPWriter クラスは SFXXMLDocument クラスを利用して、 SOAP メッセージの各要素を生成するクラスです。

SFXSOAPRPC クラスは SFXSOAPParserSFXSOAPWriter クラスを利用して、SOAP-RPC を実装するクラスです。

SOAP-RPC では、 予め メソッド名、メソッドの名前空間と名前空間接頭辞、パラメータなどを設定した上で、 SFXSOAPRPC::Invoke 関数の引数に Web サービスの URL、SOAPAction 属性値、コールバック関数とその参照データを指定するだけで Web サービスを呼び出せます。

[Note] 注意

SFXSOAPWriter クラスで作成した SOAP メッセージ(ファイル)を SFXSOAPRPC::Invoke 関数の引数に指定して Web サービスを呼び出すことも可能です。

SFXSOAPServiceProxy クラスは、 内部で SFXSOAPRPC クラスを利用して、 動的に WSDL 文書から SOAP-RPC プロキシを生成し、 SOAP-RPC 通信を行います。

19.6.2. SOAP-RPC

SFXSOAPRPC クラスでは、 以下の方法により SOAP-RPC の入出力の設定を行います。

[Note] プロトコルバインディング

SFXSOAPRPC クラスは、 HTTP-POST トランスポートプロトコルによりサーバーに接続します。

19.6.2.1. 入力パラメータ

入力パラメータは、 SFXSOAPRPC::AddParameter 関数を呼び出すこと、 もしくは直接 SOAP メッセージに書き込むことにより設定します。

19.6.2.2. SOAP-RPC の戻り値

SOAP-RPC の戻り値は、 結果が通知されるコールバック(SFXSOAPRPC::NotifySPP 関数) 内で以下の何れかの操作を行うことにより取得できます。

[Note] 注意

このコールバックは、 SFXSOAPRPC::Invoke または SFXSOAPRPC::SetNotifyHandler 関数の spp 引数に指定する関数のことです。

  1. SFXSOAPRPC::GetResultValueByName 関数を呼び出して取得する。
  2. SFXSOAPRPC::GetResultValues 関数を呼び出して取得する。
  3. コールバックの result 引数に渡される出力パラメータ(SFXSOAPRPC::Params 配列)から取得する。
  4. コールバックの soap 引数に渡されるメソッドレスポンスの SOAP メッセージ(SFXSOAPParser)から取得する。
  5. サーバー側でエラーが発生した場合、 コールバックの error 引数には SFERR_SOAP_FAULT_MESSAGE が渡されます。 エラーの詳細情報は、コールバックの fault 引数に SFXSOAPRPC::FAULT 構造体 として渡されます。
[Note] 注意

SFXSOAPRPC::GetResultValues 関数の戻り値は、 コールバックの result 引数に通知される内容と同じです。

19.6.3. WSDL

SFXSOAPServiceProxy クラスを使えば、 Web サービスの名前、ポート名、メソッド名、パラメータを指定するだけで Web サービスを呼び出せます。

[Note] プロトコルバインディング

SFXSOAPServiceProxy クラスは、 HTTP-POST トランスポートプロトコルによりサーバーに接続します。

[Note] 注意

SFXSOAPServiceProxy クラスでは、 SFXXMLDOMParser クラスを使用して WSDL 文書を解析し、 WSDL 文書に対応した SOAP メッセージを生成して、SFXSOAPRPC オブジェクトに渡し、 Web サービスが実行される仕組みになっています。

そのため、WSDL 文書のサイズに応じてメモリが必要になることに注意してください。

19.6.3.1. 入力パラメータ

入力パラメータは、SFXSOAPServiceProxy::SetParameterValue 関数を使用して設定します。

19.6.3.2. 戻り値

内部的に行われる SOAP-RPC の戻り値は、 結果が通知されるコールバック(SFXSOAPRPC::NotifySPP 関数) 内で以下の何れかの操作を行うことにより取得できます。

[Note] 注意

このコールバックは、 SFXSOAPServiceProxy::Invoke または SFXSOAPServiceProxy::SetNotifyHandler 関数の spp 引数に指定する関数のことです。

  1. SFXSOAPServiceProxy::GetResultValueByName 関数を呼び出して取得する。
  2. SFXSOAPServiceProxy::GetResultValues 関数を呼び出して取得する。
  3. コールバックの result 引数に渡される出力パラメータ(SFXSOAPRPC::Params 配列)から取得する。
  4. コールバックの soap 引数に渡されるメソッドレスポンスの SOAP メッセージ(SFXSOAPParser)から取得する。
  5. サーバー側でエラーが発生した場合、 コールバックの error 引数には SFERR_SOAP_FAULT_MESSAGE が渡されます。 エラーの詳細情報は、コールバックの fault 引数に SFXSOAPRPC::FAULT 構造体 として渡されます。
[Note] 注意

SFXSOAPServiceProxy::GetResultValues 関数の戻り値は、 コールバックの result 引数に通知される内容と同じです。