前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1
SFXSOAPRPC
SOAP-RPC プロトコルを扱うクラスです。
#include <SFXSOAPRPC.hpp>
class SFXSOAPRPC;
SFMTYPEDEFCLASS(SFXSOAPRPC)

協調図

SFXSOAPRPC クラスの協調図

解説

SFXSOAPRPC は、SOAP-RPC プロトコルを実装したクラスです。

[Note] 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;
}

参照

SFXSOAPWriter | SFXSOAPParser

メンバ

コンストラクタ/デストラクタ
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
パラメーターを表す構造体です。

SFXSOAPRPC::SFXSOAPRPC
SFXSOAPRPC クラスのコンストラクタです。
[ 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 パラメーターの属性情報

SFXSOAPRPC::~SFXSOAPRPC
SFXSOAPRPC クラスのデストラクタです。
[ public ]
~SFXSOAPRPC(Void);

SFXSOAPRPC::AddAttibute
パラメーターの属性を追加します。
[ public ]
SFCError AddAttibute(
    SFXAnsiStringConstRef param            // パラメーターの名前
    SFXAnsiStringConstRef name             // 属性の名前
    SFXAnsiStringConstRef value            // 属性の値
    PARAMETER::Mode mode = PARAMETER::IN   // 属性のモード(デフォルト: 入力モード)
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

SFXSOAPRPC::AddMethodAttribute
メソッドの属性を追加します。
[ public ]
SFCError AddMethodAttribute(
    SFXAnsiStringConstRef name    // 属性の名前
    SFXAnsiStringConstRef value   // 属性の値
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

SFXSOAPRPC::AddParameter
パラメーターを追加します。
[ public ]
SFCError AddParameter(
    SFXAnsiStringConstRef name                      // パラメーターの名前
    SFXBufferConstRef value                         // パラメーターの値
    PARAMETER::Types type = PARAMETER::XSD_STRING   // パラメーターのタイプ(デフォルト: 文字列)
    PARAMETER::Mode mode = PARAMETER::IN            // パラメーターのモード(デフォルト: 入力モード)
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

使用例

SFXSOAPRPC rpc;

rpc.AddParameter("Index", SFXBuffer(SFXAnsiString("1")), 
                 SFXSOAPRPC::PARAMETER::SOAP_INT, SFXSOAPRPC::PARAMETER::IN );

参照

SFXSOAPRPC::PARAMETER


SFXSOAPRPC::Cancel
SOAP-RPC 通信をキャンセルします。
[ public ]
Void Cancel(Void);

SFXSOAPRPC::GetEncodingStyle
SOAP エンコーディングを取得します。
[ public, const ]
ACharConstPtr GetEncodingStyle(Void);

解説

SOAP エンコーディングとは、文字のエンコーディングのことではなく、SOAP メッセージで使うデータ型を XML 形式としてどのように表現するかを定めるものです。

通常、SOAP エンコーディングは、URI " http://schemas.xmlsoap.org/soap/envelope/ " で定義されるものを使います。

[Note] SOAP エンコーディングについて

W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding


SFXSOAPRPC::GetMethodName
Webサービスのメソッド名を取得します。
[ public, const ]
ACharConstPtr GetMethodName(Void);

SFXSOAPRPC::GetParams
パラメーターのリストを取得します。
[ 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::LPPARAMETERSFXSOAPRPC::PARAMETER のポインター型です。

参照

SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER


SFXSOAPRPC::GetResultValueByName
指定したパラメーターの戻り値を取得します。
[ public, const ]
const LPPARAMETER GetResultValueByName(
    SFXAnsiStringConstRef name   
);

SFXSOAPRPC::GetResultValues
出力されたパラメーターのリストを取得します
[ 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());   // パラメーターの値を出力する

参照

SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER


SFXSOAPRPC::GetTargetObjectURI
ターゲットとなる URI を取得します。
[ public, const ]
ACharConstPtr GetTargetObjectURI(Void);

SFXSOAPRPC::GetTrustMode
SSL の検証モードを取得します。
[ public, const ]
UInt32 GetTrustMode(Void);

参照

SFXHTTPConnection::GetTrustMode


SFXSOAPRPC::Invoke
Web サービスのメソッドを呼び出します。
[ 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              // コールバック関数に渡すデータ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • Envelope 要素がないとき : SFERR_SOAP_EXPECT_ENVELOPE( 0x699F )
  • Body 要素がないとき : SFERR_SOAP_EXPECT_BODY( 0x69A0 )
  • Envelope 要素が重複しているとき : SFERR_SOAP_REPEATED_ENVELOPE( 0x69A2 )
  • 引数が不正であるとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

SFXSOAPRPC::IsConnecting
サーバーに接続しているかを判定します。
[ public, const ]
Bool IsConnecting(Void);

戻り値

  • 接続しているとき : true
  • 接続していないとき : false

SFXSOAPRPC::RemoveAllParams
Web サービスのメソッドのすべてのパラメーターを削除します。
[ public ]
Void RemoveAllParams(Void);

SFXSOAPRPC::Reset
すべての内部変数をリセットします。
[ public ]
Void Reset(Void);

SFXSOAPRPC::SetEncodingStyle
SOAP エンコーディングを設定します。
[ public ]
Void SetEncodingStyle(
    SFXAnsiStringConstRef encodingstyle   // SOAP エンコーディング
);

引数

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

意味
"NONE" SOAP エンコーディングは何も指定されません。
"STANDARD" "http://schemas.xmlsoap.org/soap/encoding/" を意味します。

解説

SOAP エンコーディングとは、文字のエンコーディングのことではなく、SOAP メッセージで使うデータ型を XML 形式としてどのように表現するかを定めるものです。

通常、SOAP エンコーディングは、URI " http://schemas.xmlsoap.org/soap/envelope/ " で定義されるものを使います。

[Note] SOAP エンコーディングについて

W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding


SFXSOAPRPC::SetHeader
SOAP-RPC 文書の Header 要素を設定します。
[ public ]
SFXXMLElementPtr SetHeader(
    SFXAnsiStringConstRef encodingstyle = "NONE"   // SOAP エンコーディング
);

引数

encodingstyle

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/ " で定義されるものを使います。

[Note] SOAP エンコーディングについて

W3C Simple Object Access Protocol (SOAP) 1.1 : SOAP Encoding


SFXSOAPRPC::SetMethodName
Web サービスのメソッド名を設定します。
[ public ]
Void SetMethodName(
    SFXAnsiStringConstRef method   // メソッド
);

SFXSOAPRPC::SetNotifyHandler
戻り値を取得するためのコールバック関数を設定します。
[ public ]
Void SetNotifyHandler(
    NotifySPP spp       // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ
);

SFXSOAPRPC::SetParams
パラメーターを設定します。
[ public ]
SFCError SetParams(
    ParamsConstRef params   // パラメーター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

SFXSOAPRPC::SetTargetObjectURI
ターゲットとなる URI を設定します。
[ public ]
Void SetTargetObjectURI(
    SFXAnsiStringConstRef targeturi                                 // ターゲットとなる URI
    SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()   // ターゲット URI の名前空間接頭辞
);

SFXSOAPRPC::SetTrustMode
SSL の検証モードを設定します。
[ public ]
Void SetTrustMode(
    UInt32 param   // SSL 検証モード
);

解説

SSL の検証モード : SFXHTTPConnection::SetTrustMode

参照

SFXHTTPConnection::SetTrustMode


SFXSOAPRPC::FAULT
SOAP Fault を表す構造体です。
typedef struct SFXSOAPRPC::_Fault SFXSOAPRPC::FAULT

解説

SOAP Fault 要素には、SOAP リクエスト中に発生したエラーが返されます。Fault 要素は Body 要素中にひとつだけ存在します。

SOAP Fault 要素は、faultactor 要素、faultcode 要素、faultstring 要素、detail 要素から構成されます。

[Note] 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


SFXSOAPRPC::LPFAULT
SFXSOAPRPC::FAULT のポインター型を表します。
typedef struct SFXSOAPRPC::_Fault * SFXSOAPRPC::LPFAULT

SFXSOAPRPC::LPPARAMETER
SFXSOAPRPC::PARAMETER のポインター型です。
typedef struct SFXSOAPRPC::_Parameter * SFXSOAPRPC::LPPARAMETER

SFXSOAPRPC::NotifySPP
コールバック関数の型です。
typedef Void(* SFXSOAPRPC::NotifySPP)(SFCError error, const Params &result, const FAULT &fault, SFXSOAPParserConstRef soap, VoidPtr reference)

引数

error

エラー値です。

result

SOAP の戻り値です。

fault

SOAP メッセージの Fault 要素です。

soap

SOAP メッセージのリファレンスです。

reference

コールバック関数に渡されるデータです。


SFXSOAPRPC::PARAMETER
パラメーターを表す構造体です。
typedef struct SFXSOAPRPC::_Parameter SFXSOAPRPC::PARAMETER

解説

変数 説明
_type パラメーターのタイプ
_mode パラメーターの入出力モード
_name パラメーターの名前
_value パラメーターの値 ( SFXBuffer クラスのインスタンス )
_attrlist パラメーターの属性情報

_type の値

スキーマ定義用

  • XSD_STRING
  • XSD_FLOAT
  • XSD_BOOLEAN
  • XSD_DOUBLE
  • XSD_INTEGER
  • XSD_INT
  • XSD_LONG
  • XSD_SHORT
  • XSD_DECIMAL
  • XSD_BASE64
  • XSD_HEXBINARY
  • XSD_BYTE
  • XSD_DATETIME
  • XSD_QNAME

SOAP 定義用

  • SOAP_STRING
  • SOAP_BOOLEAN
  • SOAP_DOUBLE
  • SOAP_BASE64
  • SOAP_FLOAT
  • SOAP_INT
  • SOAP_LONG
  • SOAP_SHORT
  • SOAP_BYTE
  • SOAP_ARRAY
  • UNKNOWN

_mode の値

  • IN : 入力モード
  • INOUT : 入出力モード
  • OUT : 出力モード

_attrlist はパラメーターの属性のリストです。 パラメーターの属性を保存するには SFXSOAPRPC::AddAttibute 関数を使います。