前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0

20.6. Web サービスの開発

Web サービスには SOAP ( Simple Object Access Protocol )WSDL ( Web Services Description Language )UDDI ( Universal Description, Discovery and Integration ) という 3 つの要素技術があります。 データはすべて XML の形式に基づいて記述され、HTTP / SMTP などのインターネットプロトコルによって実装されます。

SophiaFramework では、SOAP と WSDL を処理するためのクラスが提供されます。

表 20.14. SOAP クラス

クラス名 解説
SFXSOAPParser DOM 方式で SOAP メッセージを解析するためのクラスです。
SFXSOAPWriter SOAP メッセージを作成するクラスです。
SFXSOAPRPC SOAP-RPC プロトコルを扱うクラスです。

表 20.15. WSDL クラス

クラス名 解説
SFXSOAPServiceProxy WSDL 文書を解析し、自動的に SOAP メッセージを生成します。

20.6.1. SOAP

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

SOAP メッセージは Envelope、Header、Body の 3 つの要素から構成されます。

SFXSOAPParser クラスは SFXXMLDOMParser クラスを継承し、DOM ツリーをメモリ上に展開します。DOM ツリーを取得することなく、SOAP メッセージを解析するだけで、SOAP メッセージの任意の情報を取得できます。

主な SFXSOAPParser クラスの機能

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

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

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

関数名 解説
SFXSOAPParser::GetBodyEntries SOAP メッセージの Body 要素に含まれるすべての子要素を取得します。
SFXSOAPParser::GetHeaderEntries SOAP メッセージの Header 要素に含まれるすべての子要素を取得します。
SFXSOAPParser::GetBodyEntry SOAP メッセージの Body 要素の中で、指定した要素を取得します。
SFXSOAPParser::GetRPCParameter SOAP メッセージの Body 要素の中で、指定したパラメーターと一致する要素を取得します。
SFXSOAPParser::GetRPCResult SOAP メッセージの Body 要素の第 1 子要素の第 1 子要素を取得します。
SFXSOAPParser::GetRPCStruct SOAP メッセージの Body 要素の第 1 子要素を取得します。

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

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

Web サービスの関数名、ターゲットとなる URI、パラメーター、サーバーの IP アドレス、Web サービスとその機能の soapAction 属性値は、コールバック関数を設定するだけで、Web サービスが呼び出せます。

SFXSOAPWriter クラスで作成した SOAP メッセージを SFXSOAPRPC::Invoke 関数に渡して、Web サービスを呼び出します。最短の場合、コードは数行で済みます。

20.6.2. WSDL

WSDL ( Web Services Description Language ) は Web サービスの API を定義するための標準的な言語です。 WSDL を使えば、SOAP メッセージの交換レイヤーよりも上位レベルで、SOAP バインディングなどの Web サービス関連処理を抽象的に定義できます。

SFXSOAPServiceProxy クラスを使えば、WSDL 文書で記述された内容を理解する必要はありません。Web サービスの名前、ポート名、呼び出す機能のパラメーターを入力するだけで、Web サービスを呼び出せます。

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

SFXXSDDOMParser クラスは XMLSchema 文法に対応したパーサー クラスです。( WSDL 文書は XMLSchema によって実現されています )

[Caution] 注意

WSDL 文書は DOM 方式で解析されるので、たくさんのメモリが必要になります。

20.6.3. 入力パラメーター

SFXSOAPRPC クラスでは、SOAP メッセージに記されたパラメーターを設定します。

SFXSOAPServiceProxy クラスでは、WSDL 文書に記されたパラメーターを設定します。

20.6.4. 戻り値

レスポンスとして返される SOAP メッセージはコールバック関数に渡されます。そのとき、Web サービスの戻り値は次のいずれかの方法で取得します。

  • SFXSOAPRPC::GetResultValueByName 関数 または SFXSOAPServiceProxy::GetResultValueByName 関数で指定したパラメーターの戻り値を取得します。
  • SFXSOAPParser クラスを使って、SOAP メッセージを解析して戻り値を取得します。( WSDL 文書でmaxOccurs="unbounded"と宣言した結果、同じ名前のパラメーターが複数存在する場合、最後のパラメーターの値だけが保存されます。 )
  • SFXSOAPRPC::GetParams 関数を使って各要素の値を取得します。SOAP メッセージのパラメーター要素は SFXSOAPRPC::PARAMETER 構造体として順に保存します。

サーバーから、レスポンスとして Fault 要素を含む SOAP メッセージが返されたとき、 コールバック関数の error パラメーターは SFERR_SOAP_FAULT_MESSAGE になります。 具体的なエラー情報は、SFXSOAPRPC::FAULT によって取得できます。

[Note] 注意

SFXSOAPRPC クラスまたは SFXSOAPServiceProxy クラスでサーバーに接続するときは、HTTP または HTTPS が使われます。