SophiaFramework UNIVERSE 5.3 |
Web サービスを実装するためのクラスとして、 以下の SOAP(Simple Object Access Protocol) クラスが利用可能です。
表 19.18. SOAP クラス
クラス名 | 解説 |
---|---|
SFXSOAPParser | DOM 方式で SOAP メッセージを解析するためのクラスです。 |
SFXSOAPWriter | SOAP メッセージを作成するクラスです。 |
SFXSOAPRPC | SOAP-RPC プロトコルを扱うクラスです。 |
SFXSOAPServiceProxy | WSDL 文書を解析して SOAP-RPC プロキシを作成し、ダイナミックバイディングを行うクラスです。 |
SOAP ( Simple Object Access Protocol ) は、 XML と HTTP や SMTP などをベースに、サーバーのサービスを呼び出すためのプロトコルです。
SOAP によるオブジェクト間通信でやり取りされるデータ(SOAP メッセージ)は、 プロトコルバインディングヘッダーと SOAP Envelope から構成されます。
プロトコルバインディングヘッダーには、実装するプロトコル毎に定められているヘッダー情報が記述されます。
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 クラスは SFXSOAPParser と SFXSOAPWriter クラスを利用して、SOAP-RPC を実装するクラスです。
SOAP-RPC では、 予め メソッド名、メソッドの名前空間と名前空間接頭辞、パラメータなどを設定した上で、 SFXSOAPRPC::Invoke 関数の引数に Web サービスの URL、SOAPAction 属性値、コールバック関数とその参照データを指定するだけで Web サービスを呼び出せます。
注意 | |
---|---|
SFXSOAPWriter クラスで作成した SOAP メッセージ(ファイル)を SFXSOAPRPC::Invoke 関数の引数に指定して Web サービスを呼び出すことも可能です。 |
SFXSOAPServiceProxy クラスは、 内部で SFXSOAPRPC クラスを利用して、 動的に WSDL 文書から SOAP-RPC プロキシを生成し、 SOAP-RPC 通信を行います。
SFXSOAPRPC クラスでは、 以下の方法により SOAP-RPC の入出力の設定を行います。
プロトコルバインディング | |
---|---|
SFXSOAPRPC クラスは、 HTTP-POST トランスポートプロトコルによりサーバーに接続します。 |
入力パラメータは、 SFXSOAPRPC::AddParameter 関数を呼び出すこと、 もしくは直接 SOAP メッセージに書き込むことにより設定します。
SOAP-RPC の戻り値は、 結果が通知されるコールバック(SFXSOAPRPC::NotifySPP 関数) 内で以下の何れかの操作を行うことにより取得できます。
注意 | |
---|---|
このコールバックは、 SFXSOAPRPC::Invoke または SFXSOAPRPC::SetNotifyHandler 関数の spp 引数に指定する関数のことです。 |
注意 | |
---|---|
SFXSOAPRPC::GetResultValues 関数の戻り値は、 コールバックの result 引数に通知される内容と同じです。 |
SFXSOAPServiceProxy クラスを使えば、 Web サービスの名前、ポート名、メソッド名、パラメータを指定するだけで Web サービスを呼び出せます。
プロトコルバインディング | |
---|---|
SFXSOAPServiceProxy クラスは、 HTTP-POST トランスポートプロトコルによりサーバーに接続します。 |
注意 | |
---|---|
SFXSOAPServiceProxy クラスでは、 SFXXMLDOMParser クラスを使用して WSDL 文書を解析し、 WSDL 文書に対応した SOAP メッセージを生成して、SFXSOAPRPC オブジェクトに渡し、 Web サービスが実行される仕組みになっています。 そのため、WSDL 文書のサイズに応じてメモリが必要になることに注意してください。 |
入力パラメータは、SFXSOAPServiceProxy::SetParameterValue 関数を使用して設定します。
内部的に行われる SOAP-RPC の戻り値は、 結果が通知されるコールバック(SFXSOAPRPC::NotifySPP 関数) 内で以下の何れかの操作を行うことにより取得できます。
注意 | |
---|---|
このコールバックは、 SFXSOAPServiceProxy::Invoke または SFXSOAPServiceProxy::SetNotifyHandler 関数の spp 引数に指定する関数のことです。 |
注意 | |
---|---|
SFXSOAPServiceProxy::GetResultValues 関数の戻り値は、 コールバックの result 引数に通知される内容と同じです。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |