![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |

SFXSOAPRPC は、SOAP-RPC プロトコルを実装したクラスです。
![]() |
Simple Object Access Protocol ( SOAP ) の仕様 |
|---|---|
|
W3C SOAP 最新情報 : Latest SOAP versions ( SOAP 1.1 と SOAP 1.2 をサポートしています。) ※ SOAP Attachment は実装されていません。また、SOAP Fault は SOAP 1.1 だけをサポートします。 | |
例 493. SOAP-RPC による Web サービス呼び出し
#define AMAZON_ID "" // Amazon の ID を設定する SFMTYPEDEFCLASS(SOAPTest) class SOAPTest : public SFCApplication { SFMSEALCOPY(SOAPTest) private: SFXSOAPRPC _rpc; // SOAP-RPC プロトコルを扱う変数 Void OnSOAP(Void); static Void OnResultSHP_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap, VoidPtr reference); Void OnResult_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap); }; Void SOAPTest::OnSOAP() { // メソッド名を設定する _rpc.SetMethodName("ItemSearch"); // SOAP エンコーディングを設定する _rpc.SetEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/"); // 下記のように記述してもよい // _rpc.SetEncodingStyle("STANDARD"); // ターゲットとなる URI を設定する _rpc.SetTargetObjectURI("https://webservices.amazon.com/"); // Web サービスのパラメーターを設定する _rpc.AddParameter("AWSAccessKeyId", SFXBuffer(SFXAnsiString(AMAZON_ID))); _rpc.AddParameter("Keywords", SFXBuffer(SFXAnsiString("caviar"))); _rpc.AddParameter("MerchantId", SFXBuffer(SFXAnsiString("Amazon"))); _rpc.AddParameter("SearchIndex", SFXBuffer(SFXAnsiString("GourmetFood"))); // Web サービスを呼び出す _rpc.Invoke("http://soap.amazon.co.jp/onca/soap?Service=AWSECommerceService", "http://soap.amazon.com", OnResultSHP_SOAP, this); } // Web サービスの結果の通知を受け取るコールバック関数 // error : エラー値 result : SOAP の戻り値 fault : SOAP メッセージ中でエラーである Fault 要素の内容 soap : SOAP メッセージのリファレンス reference : コールバック関数に渡されるデータ Void SOAPTest::OnResultSHP_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap, VoidPtr reference) { static_cast<SOAPTestPtr>(reference)->OnResult_SOAP(error, result, fault, soap); } // 受信した SOAP メッセージを処理する関数 Void SOAPTest::OnResult_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap) { if (error == SFERR_NO_ERROR) { // SOAP メッセージの結果(result: SFXSOAPRPC::Params 配列)をパラメーターに分けて取得する // 列挙子を取得する SFXSOAPRPC::Params::Enumerator paramEtor = result.GetFirstEnumerator(); while (paramEtor.HasNext()) { // 各パラメーターを取得する SFXSOAPRPC::LPPARAMETER temp = paramEtor.GetNext(); // パラメーターの名前を表示する TRACE("parameter-name: %s", temp->_name.GetCString()); // パラメーターのタイプを表示する TRACE("parameter-type: %d", temp->_type); if (!temp->_value.IsEmpty()) { // パラメーターの値を表示する TRACE("parameter-value: %s", ACharConstPtr(temp->_value.GetBuffer())); } } } // エラー メッセージ( SOAP Fault )を表示する else if (error == SFERR_SOAP_FAULT_MESSAGE) { if(!fault._faultactor.IsEmpty()) // faultactor 要素が空でないとき、その内容を表示する TRACE("faultactor: %s", fault._faultactor.GetCString()); if(!fault._faultcode.IsEmpty()) // faultcode 要素が空でないとき、その内容を表示する TRACE("faultcode: %s", fault._faultcode.GetCString()); if(!fault._faultstring.IsEmpty()) // faultstring 要素が空でないとき、その内容を表示する TRACE("faultstring: %s", fault._faultstring.GetCString()); if (fault._faultdetail) // detail 要素が空でないとき、その内容を表示する TRACE("faultstring: %s", fault._faultdetail->GetText().GetCString()); } return; }
| コンストラクタ/デストラクタ |
|---|
|
SFXSOAPRPC( Void ) SFXSOAPRPC( SFXAnsiStringConstRef targeturi , SFXAnsiStringConstRef prefix , SFXAnsiStringConstRef method , ParamsConstRef params , SFXAnsiStringConstRef encodingstyle = "NONE" , SFXAnsiStringConstRef port = SFXAnsiString::EmptyInstance() ) SFXSOAPRPC クラスのコンストラクタです。
|
|
~SFXSOAPRPC( Void ) SFXSOAPRPC クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| SFCError |
AddAttibute(
SFXAnsiStringConstRef param
, SFXAnsiStringConstRef name
, SFXAnsiStringConstRef value
, PARAMETER::Mode mode = PARAMETER::IN
) パラメーターの属性を追加します。
|
| SFCError |
AddMethodAttribute(
SFXAnsiStringConstRef name
, SFXAnsiStringConstRef value
) メソッドの属性を追加します。
|
| SFCError |
AddParameter(
SFXAnsiStringConstRef name
, SFXBufferConstRef value
, PARAMETER::Types type = PARAMETER::XSD_STRING
, PARAMETER::Mode mode = PARAMETER::IN
) パラメーターを追加します。
|
| Void |
Cancel( Void ) SOAP-RPC 通信をキャンセルします。
|
| ACharConstPtr |
GetEncodingStyle( Void ) SOAP エンコーディングを取得します。
|
| ACharConstPtr |
GetMethodName( Void ) Webサービスのメソッド名を取得します。
|
| ParamsConstPtr |
GetParams( Void ) パラメーターのリストを取得します。
|
| const LPPARAMETER |
GetResultValueByName(
SFXAnsiStringConstRef name
) 指定したパラメーターの戻り値を取得します。
|
| ParamsConstPtr |
GetResultValues( Void ) 出力されたパラメーターのリストを取得します
|
| ACharConstPtr |
GetTargetObjectURI( Void ) ターゲットとなる URI を取得します。
|
| UInt32 |
GetTrustMode( Void ) SSL の検証モードを取得します。
|
| SFCError |
Invoke(
SFXAnsiStringConstRef url
, SFXAnsiStringConstRef SOAPActionURI
, NotifySPP spp = null
, VoidPtr reference = null
) Invoke( SFXAnsiStringConstRef url , SFXAnsiStringConstRef SOAPActionURI , SFXAnsiStringConstRef input , NotifySPP spp = null , VoidPtr reference = null ) Web サービスのメソッドを呼び出します。
|
| Bool |
IsConnecting( Void ) サーバーに接続しているかを判定します。
|
| Void |
RemoveAllParams( Void ) Web サービスのメソッドのすべてのパラメーターを削除します。
|
| Void |
Reset( Void ) すべての内部変数をリセットします。
|
| Void |
SetEncodingStyle(
SFXAnsiStringConstRef encodingstyle
) SOAP エンコーディングを設定します。
|
| SFXXMLElementPtr |
SetHeader(
SFXAnsiStringConstRef encodingstyle = "NONE"
) SOAP-RPC 文書の Header 要素を設定します。
|
| Void |
SetMethodName(
SFXAnsiStringConstRef method
) Web サービスのメソッド名を設定します。
|
| Void |
SetNotifyHandler(
NotifySPP spp
, VoidPtr reference
) 戻り値を取得するためのコールバック関数を設定します。
|
| SFCError |
SetParams(
ParamsConstRef params
) パラメーターを設定します。
|
| Void |
SetTargetObjectURI(
SFXAnsiStringConstRef targeturi
, SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()
) ターゲットとなる URI を設定します。
|
| Void |
SetTrustMode(
UInt32 param
) SSL の検証モードを設定します。
|
| 型 |
|---|
|
FAULT SOAP Fault を表す構造体です。
|
|
LPFAULT SFXSOAPRPC::FAULT のポインター型を表します。
|
|
LPPARAMETER SFXSOAPRPC::PARAMETER のポインター型です。
|
|
NotifySPP コールバック関数の型です。
|
|
PARAMETER パラメーターを表す構造体です。
|
[ public, explicit ] SFXSOAPRPC(Void);
[ public, explicit ]
SFXSOAPRPC(
SFXAnsiStringConstRef targeturi // ターゲットとなる URI
SFXAnsiStringConstRef prefix // ターゲット URI の名前空間接頭辞
SFXAnsiStringConstRef method // ターゲットとなるメソッド
ParamsConstRef params // パラメーター
SFXAnsiStringConstRef encodingstyle = "NONE" // エンコーディング
SFXAnsiStringConstRef port = SFXAnsiString::EmptyInstance() // ウェブサービスのポート
);
params(パラメーター) 引数には、以下の変数が定義されています。
| 変数 | 説明 |
|---|---|
| _type | パラメーターのタイプ |
| _mode | パラメーターの入出力モード |
| _name | パラメーターの名前 |
| _value | パラメーターの値 |
| _attrlist | パラメーターの属性情報 |
[ public ] ~SFXSOAPRPC(Void);
[ public ] SFCError AddAttibute( SFXAnsiStringConstRef param // パラメーターの名前 SFXAnsiStringConstRef name // 属性の名前 SFXAnsiStringConstRef value // 属性の値 PARAMETER::Mode mode = PARAMETER::IN // 属性のモード(デフォルト: 入力モード) );
[ public ] SFCError AddMethodAttribute( SFXAnsiStringConstRef name // 属性の名前 SFXAnsiStringConstRef value // 属性の値 );
[ public ] SFCError AddParameter( SFXAnsiStringConstRef name // パラメーターの名前 SFXBufferConstRef value // パラメーターの値 PARAMETER::Types type = PARAMETER::XSD_STRING // パラメーターのタイプ(デフォルト: 文字列) PARAMETER::Mode mode = PARAMETER::IN // パラメーターのモード(デフォルト: 入力モード) );
SFXSOAPRPC rpc;
rpc.AddParameter("Index", SFXBuffer(SFXAnsiString("1")),
SFXSOAPRPC::PARAMETER::SOAP_INT, SFXSOAPRPC::PARAMETER::IN );
[ public ] Void Cancel(Void);
[ public, const ] ACharConstPtr GetEncodingStyle(Void);
SOAP エンコーディングとは、文字のエンコーディングのことではなく、SOAP メッセージで使うデータ型を XML 形式としてどのように表現するかを定めるものです。
通常、SOAP エンコーディングは、URI " http://schemas.xmlsoap.org/soap/envelope/ " で定義されるものを使います。
![]() |
SOAP エンコーディングについて |
|---|---|
W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding | |
[ public, const ] ACharConstPtr GetMethodName(Void);
[ public, const ] ParamsConstPtr GetParams(Void);
SFXSOAPRPC::LPPARAMETER 構造体へのポインターを返します。
SFXSOAPRPC::PARAMETER を取得します。
SFXSOAPRPC _rpc; // SOAP-RPC プロトコルを扱う変数 SFXSOAPRPC::ParamsConstPtr lp; lp = _rpc.GetParams(); // パラメーターのリストを取得する SFXSOAPRPC::LPPARAMETER item; item = lp->Get(0); // 最初の要素を取得する TRACE("%s",item->_name.GetCString()); // パラメーターのタイプを出力する TRACE("%s",item->_value.GetBuffer()); // パラメーターの値を出力する
SFXSOAPRPC::LPPARAMETER は SFXSOAPRPC::PARAMETER のポインター型です。
[ public, const ]
const LPPARAMETER GetResultValueByName(
SFXAnsiStringConstRef name
);[ public, const ] ParamsConstPtr GetResultValues(Void);
SFXSOAPRPC::LPPARAMETER 構造体へのポインターを返します。
出力された SFXSOAPRPC::PARAMETER を取得します。
SFXSOAPRPC _rpc; // SOAP RPC プロトコルを扱う変数 SFXSOAPRPC::ParamsConstPtr lp; lp = _rpc.GetResultValues(); // 出力パラメーターのリストを取得する SFXSOAPRPC::LPPARAMETER item; item = lp->Get(0); // 最初の要素を取得する TRACE("%s",item->_name.GetCString()); // パラメーターのタイプを出力する TRACE("%s",item->_value.GetBuffer()); // パラメーターの値を出力する
[ public, const ] ACharConstPtr GetTargetObjectURI(Void);
[ public, const ] UInt32 GetTrustMode(Void);
[ public ] SFCError Invoke( SFXAnsiStringConstRef url // Web サービスの IP アドレス SFXAnsiStringConstRef SOAPActionURI // soapAction 属性値 NotifySPP spp = null // コールバック関数 VoidPtr reference = null // コールバック関数に渡すデータ );
[ public ] SFCError Invoke( SFXAnsiStringConstRef url // Web サービスの IP アドレス SFXAnsiStringConstRef SOAPActionURI // soapAction 属性値 SFXAnsiStringConstRef input // SOAP メッセージ NotifySPP spp = null // コールバック関数 VoidPtr reference = null // コールバック関数に渡すデータ );
[ public, const ] Bool IsConnecting(Void);
[ public ] Void RemoveAllParams(Void);
[ public ] Void Reset(Void);
[ public ] Void SetEncodingStyle( SFXAnsiStringConstRef encodingstyle // SOAP エンコーディング );
SOAP エンコーディングの値です。以下のように定義されています。
| 値 | 意味 |
|---|---|
| "NONE" | SOAP エンコーディングは何も指定されません。 |
| "STANDARD" | "http://schemas.xmlsoap.org/soap/encoding/" を意味します。 |
SOAP エンコーディングとは、文字のエンコーディングのことではなく、SOAP メッセージで使うデータ型を XML 形式としてどのように表現するかを定めるものです。
通常、SOAP エンコーディングは、URI " http://schemas.xmlsoap.org/soap/envelope/ " で定義されるものを使います。
![]() |
SOAP エンコーディングについて |
|---|---|
W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding | |
[ public ] SFXXMLElementPtr SetHeader( SFXAnsiStringConstRef encodingstyle = "NONE" // SOAP エンコーディング );
SOAP エンコーディングの値です。以下のように定義されています。
| 値 | 意味 |
|---|---|
| "NONE" | SOAP エンコーディングは何も指定されません。 |
| "STANDARD" | "http://schemas.xmlsoap.org/soap/encoding/" を意味します。 |
SOAP-RPC 文書の Header 要素を設定します。Header 要素が既に存在する場合は設定されません。
SOAP エンコーディングとは、文字のエンコーディングのことではなく、SOAP メッセージで使うデータ型を XML 形式としてどのように表現するかを定めるものです。
通常、SOAP エンコーディングは、URI " http://schemas.xmlsoap.org/soap/envelope/ " で定義されるものを使います。
![]() |
SOAP エンコーディングについて |
|---|---|
W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding | |
[ public ] Void SetMethodName( SFXAnsiStringConstRef method // メソッド );
[ public ] SFCError SetParams( ParamsConstRef params // パラメーター );
[ public ] Void SetTargetObjectURI( SFXAnsiStringConstRef targeturi // ターゲットとなる URI SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance() // ターゲット URI の名前空間接頭辞 );
SSL の検証モード : SFXHTTPConnection::SetTrustMode
typedef struct SFXSOAPRPC::_Fault SFXSOAPRPC::FAULT
SOAP Fault 要素には、SOAP リクエスト中に発生したエラーが返されます。Fault 要素は Body 要素中にひとつだけ存在します。
SOAP Fault 要素は、faultactor 要素、faultcode 要素、faultstring 要素、detail 要素から構成されます。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
| 変数 | 説明 |
|---|---|
| _faultactor | エラーの発生元の URI です。 |
| _faultcode | SOAP レスポンスを受け取ったアプリが SOAP リクエスト中に発生したエラー内容を判断するためのコードです。 |
| _faultstring | 人間が理解できるメッセージとして表現されるエラー内容です。 |
| _faultdetail | アプリ処理のためのメッセージとして表現されるエラー内容です。 |
SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultDetail | SFXSOAPParser::GetFaultString
typedef struct SFXSOAPRPC::_Fault * SFXSOAPRPC::LPFAULT
typedef struct SFXSOAPRPC::_Parameter * SFXSOAPRPC::LPPARAMETER
typedef Void(* SFXSOAPRPC::NotifySPP)(SFCError error, const Params &result, const FAULT &fault, SFXSOAPParserConstRef soap, VoidPtr reference)
エラー値です。
SOAP の戻り値です。
SOAP メッセージの Fault 要素です。
SOAP メッセージのリファレンスです。
コールバック関数に渡されるデータです。
typedef struct SFXSOAPRPC::_Parameter SFXSOAPRPC::PARAMETER
| 変数 | 説明 |
|---|---|
| _type | パラメーターのタイプ |
| _mode | パラメーターの入出力モード |
| _name | パラメーターの名前 |
| _value | パラメーターの値 ( SFXBuffer クラスのインスタンス ) |
| _attrlist | パラメーターの属性情報 |
_type の値
スキーマ定義用
SOAP 定義用
_mode の値
_attrlist はパラメーターの属性のリストです。 パラメーターの属性を保存するには SFXSOAPRPC::AddAttibute 関数を使います。
|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|