前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXSOAPRPC
SOAP RPC を扱うクラスです。
#include <SFXSOAPRPC.hpp>
class SFXSOAPRPC;
SFMTYPEDEFCLASS(SFXSOAPRPC)

協調図

SFXSOAPRPC クラスの協調図

解説

SFXSOAPRPC クラスは、 HTTP-POST トランスポートプロトコルにバインディングされた SOAP-RPC を実装するクラスです。

クライアント側では SOAP 1.1 の仕様に従った SOAP リクエストメッセージが作成され、 HTTP-POST トランスポートプロトコルにより、Web サーバーに送られます。 そして、Web サーバーから SOAP 1.1 の仕様に従った SOAP レスポンスメッセージを受信します。

[Note] Simple Object Access Protocol (SOAP) 1.1 の仕様

W3C SOAP : Simple Object Access Protocol (SOAP) 1.1

※ SOAP Attachment は実装されていません。

例 847. SOAP-RPC による Web サービス呼び出し

SFMTYPEDEFCLASS(xmlexplainer)
class xmlexplainer : public SFCApplication {
    SFMSEALCOPY(xmlexplainer)
private:
    // SFXSOAPRPC オブジェクトはクラス変数にする
    SFXSOAPRPC _rpc;

public:
    static SFCInvokerPtr Factory(Void);
private:
    explicit xmlexplainer(Void) static_throws;
    virtual ~xmlexplainer(Void);
    virtual Bool HandleEvent(SFXEventConstRef event);
    virtual Bool HandleRender(SFXEventConstRef event);

    Void _SFXSOAPRPC(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 xmlexplainer::_SFXSOAPServiceProxy(Void)
{
    // www.s-cradle.com の "Arithmetic" サービスにアクセスするコード: 
    // ※ 組み込み向けシステムの場合、メモリの制約から、WSDL ファイルのサイズは小さい方が望ましい

    // SFXSOAPServiceProxy クラスが自動生成する SOAP-RPC リクエストメッセージの内容: 2.0 と 3.0 の和を求める
    // <?xml version="1.0" encoding="UTF-8"?>
    // <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    //  <SOAP-ENV:Body>
    //   <Add xmlns="http://soapsample.s-cradle.com">
    //    <left>2.0</left>
    //    <right>3.0</right>
    //   </Add>
    //  </SOAP-ENV:Body>
    // </SOAP-ENV:Envelope>

    // 呼び出す Web サービスの機能 (メソッド) を設定する
    // ※ この場合、足し算の結果を求める
    _rpc.SetMethodName("Add");

    // 指定されたパラメータの値を設定する
    _rpc.AddParameter("left", SFXBuffer(SFXAnsiString("2.0")));
    _rpc.AddParameter("right", SFXBuffer(SFXAnsiString("3.0")));

    // Web サービスを呼び出す: 同時に、サーバから返答を受け取るためのコールバック関数(エントリ)を設定する
    // ※ コールバック関数は静的関数でなければいけないので、一旦 OnResultSHP_SOAP 静的関数を呼び出し、
    //    OnResultSHP_SOAP() 内からコールバック関数の本体である OnResult_SOAP メンバ関数を呼び出す
    _rpc.Invoke("/soapsample/Arithmetic", "urn:Add", OnResultSHP_SOAP, this);
    }
    return;
}

// サーバから返答を受け取るためのコールバック関数(エントリ)
Void xmlexplainer::OnResultSHP_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap, VoidPtr reference)
{
    // サーバから返答を受け取るためのコールバック関数(実体)を呼び出す
    static_cast<xmlexplainerPtr>(reference)->OnResult_SOAP(error, result, fault, soap);
}

// サーバから返答を受け取るためのコールバック関数(実体)
Void xmlexplainer::OnResult_SOAP(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap)
{
    // サーバから受け取った SOAP-RPC リクエストメッセージの内容は以下の通り: 結果の 5.0 が返却される
    // <?xml version="1.0" encoding="utf-8"?>
    // <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    //  <soapenv:Body>
    //   <ns:AddResponse xmlns:ns="http://soapsample.s_cradle.com">
    //    <ns:return>5.0</ns:return>
    //   </ns:AddResponse>
    //  </soapenv:Body>
    // </soapenv:Envelope>

    // SOAP-RPC 通信が成功したか判断する
    if (error == SFERR_NO_ERROR) {

        // 方法 1: result 引数の値(SFXSOAPRPC::Params 配列)から各要素の値を取得する
        // ※ SOAP-RPC の結果は SFXSOAPRPC::Params 配列に格納されている

        // SFXSOAPRPC::Params 配列の列挙子を取得する
        SFXSOAPRPC::Params::Enumerator para = result.GetFirstEnumerator();

        while (para.HasNext()) {

            // 各要素を取得する
            SFXSOAPRPC::LPPARAMETER temp = para.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()));
            }
        }

        // 方法 2: SFXSOAPServiceProxy::GetResultValueByName 関数で特定のパラメータを取得する

        // 指定した名前を持つメソッドレスポンス(SFXSOAPRPC::PARAMETER 構造体)を取得する
        SFXSOAPRPC::LPPARAMETER result = _wsdl.GetResultValueByName("return");

        if (result) {
            // パラメータの名前を取得し表示する パラメータの名前は "return" になる
            TRACE("result name: %s", result->_name.GetCString());

            // パラメータのタイプを取得し表示する
            TRACE("result type: %d", result->_type);

            // パラメータの値を取得し表示する (パラメータの値は 6.0 になる)
            TRACE("result value: %s", ACharConstPtr(result->_value.GetBuffer()));
        }

        // 方法 3: soap 引数の値(SFXSOAPParser 型)から SOAP-RPC の結果を取得する
        // ※ SOAP-RPC の結果 = SOAP メッセージの Body 要素(SOAP Body)の第 1 子要素の第 1 子要素
        SFXXMLElementPtr response = soap.GetRPCResult();
        // SOAP-RPC の結果を取得し表示する
        TRACE("result value: %s", response->GetText().GetCString());
    }

    // サーバ側からのエラーメッセージを取得する
    else if (error == SFERR_SOAP_FAULT_MESSAGE) {

        // faultactor 要素が空でない場合
        if (!fault._faultactor.IsEmpty())
            // faultactor 要素を表示する
            TRACE("faultactor: %s", fault._faultactor.GetCString());

        // faultcode 要素が空でない場合
        if (!fault._faultcode.IsEmpty())
            // faultcode 要素を表示する
            TRACE("faultcode: %s", fault._faultcode.GetCString());

        // faultstring 要素が空でない場合
        if (!fault._faultstring.IsEmpty())
            // faultstring 要素を表示する
            TRACE("faultstring: %s", fault._faultstring.GetCString());

        // detail 要素が null でない場合
        if (fault._faultdetail) {
            // detail 要素を表示する
            TRACE("faultstring: %s", fault._faultdetail->GetText().GetCString());
        }
    }
    return;
}

参照

SFXSOAPWriter | SFXSOAPParser

メンバ

コンストラクタ/デストラクタ
SFXSOAPRPC( Void )
SFXSOAPRPC クラスのコンストラクタです。
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 )
Web サービスのパラメータの属性を追加します。
SFCError AddMethodAttribute( SFXAnsiStringConstRef name , SFXAnsiStringConstRef value )
Web サービスのメソッドの属性を追加します。
SFCError AddParameter( SFXAnsiStringConstRef name , SFXBufferConstRef value , PARAMETER::Types type = PARAMETER::XSD_STRING , PARAMETER::Mode mode = PARAMETER::IN )
Web サービスのパラメータを追加します。
Void Cancel( Void )
SOAP-RPC をキャンセルします。
ACharConstPtr GetEncodingStyle( Void )
SOAP エンコーディングを取得します。
ACharConstPtr GetMethodName( Void )
Webサービスのメソッド名を取得します。
ParamsConstPtr GetParams( Void )
Web サービスのメソッド呼び出しのパラメータのリストを取得します。
const LPPARAMETER GetResultValueByName( SFXAnsiStringConstRef name )
指定された名前と一致する Web サービスのメソッドレスポンスのパラメータを取得します。
ParamsConstPtr GetResultValues( Void )
Web サービスのメソッドレスポンスのパラメータのリストを取得します
ACharConstPtr GetTargetObjectURI( Void )
Web サービスのメソッドの名前空間 URI を取得します。
UInt32 GetTrustMode( Void )
HTTPS 通信の SSL 認証モードを取得します。
SFCError Invoke( SFXAnsiStringConstRef url , SFXAnsiStringConstRef SOAPActionURI , NotifySPP spp = null , VoidPtr reference = null )
Web サービスのメソッドを呼び出します。
SFCError Invoke( SFXAnsiStringConstRef url , SFXAnsiStringConstRef SOAPActionURI , SFXAnsiStringConstRef input , NotifySPP spp = null , VoidPtr reference = null )
Web サービスのメソッドを呼び出します。
Bool IsConnecting( Void )
Web サーバーに接続しているか判定します。
Void RemoveAllParams( Void )
Web サービスのメソッドのすべてのパラメータを削除します。
Void Reset( Void )
すべての内部変数をリセットします。
Void SetEncodingStyle( SFXAnsiStringConstRef encodingstyle )
SOAP エンコーディングを設定します。
SFXXMLElementPtr SetHeader( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージの Header 要素(SOAP Header)を設定します。
Void SetMethodName( SFXAnsiStringConstRef method )
Web サービスのメソッド名を設定します。
Void SetNotifyHandler( NotifySPP spp , VoidPtr reference )
SOAP-RPC の戻り値(SOAP レスポンス)を取得するためのコールバック関数とコールバック関数に渡すデータを設定します。
SFCError SetParams( ParamsConstRef params )
Web サービスのメソッド呼び出しのパラメータのリストを設定します。
Void SetTargetObjectURI( SFXAnsiStringConstRef targeturi , SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance() )
Web サービスのメソッドの名前空間 URI とその名前空間接頭辞を設定します。
Void SetTrustMode( UInt32 param )
HTTPS 通信の SSL 認証モードを設定します。
FAULT
SOAP Fault を表す構造体です。
LPFAULT
SFXSOAPRPC::FAULT 構造体のポインタ型を表します。
LPPARAMETER
SFXSOAPRPC::PARAMETER 構造体のポインタ型です。
NotifySPP
SFXSOAPRPC::Invoke 関数に指定するコールバック関数の型です。
PARAMETER
メソッド呼び出しとメソッドレスポンスのパラメータを表す構造体です。
Params
パラメータ構造体へのポインタの配列を表します。

SFXSOAPRPC::SFXSOAPRPC
SFXSOAPRPC クラスのコンストラクタです。
[ public, explicit ]
SFXSOAPRPC(Void);
[ public, explicit ]
SFXSOAPRPC(
    SFXAnsiStringConstRef targeturi                               // 名前空間 URI
    SFXAnsiStringConstRef prefix                                  // 名前空間接頭辞
    SFXAnsiStringConstRef method                                  // メソッド名
    ParamsConstRef params                                         // パラメータ
    SFXAnsiStringConstRef encodingstyle = "NONE"                  // SOAP エンコーディング
    SFXAnsiStringConstRef port = SFXAnsiString::EmptyInstance()   // Web サービスのポート名
);

解説

このコンストラクタは、この SOAP-RPC を初期化します。

具体的には、以下のことを行います。

  • Web サーバーへの接続状態を OFF にします。
  • SOAP エンコーディングを "NONE" に設定します。
  • SSL 認証モードをデフォルト値(SSL_TRUST_MODE_FAIL)に設定します。

引数を指定する場合は、以下の設定も行います。

  • SOAP エンコーディングを設定します。
  • メソッド名を設定します。
  • メソッドの名前空間 URI とその名前空間接頭辞を設定します。
  • ポート名を設定します。
  • パラメータを設定します。

参照

SFXSOAPRPC::SetTargetObjectURI | SFXSOAPRPC::SetEncodingStyle | SFXSOAPRPC::IsConnecting | SFXSOAPRPC::SetTrustMode | SFXSOAPRPC::SetMethodName | SFXSOAPRPC::AddParameter |


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

解説

SOAP-RPC をキャンセルして終了します。

[Note] 注意

内部的に SFXSOAPRPC::Cancel 関数を呼び出します。

参照

SFXSOAPRPC::Reset


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

戻り値

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

解説

この関数は、Web サービスのメソッド呼び出しまたはメソッドレスポンスのパラメータに指定された属性名と属性値を追加します。

デフォルトの設定では、Web サービスのメソッド呼び出しのパラメータに指定された属性名と属性値を追加します。

参照

SFXSOAPRPC::AddParameter


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

戻り値

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

解説

この関数は、Web サービスのメソッドの属性を追加します。

参照

SFXSOAPRPC::Reset


SFXSOAPRPC::AddParameter
Web サービスのパラメータを追加します。
[ public ]
SFCError AddParameter(
    SFXAnsiStringConstRef name                      // パラメータ名
    SFXBufferConstRef value                         // パラメータの値
    PARAMETER::Types type = PARAMETER::XSD_STRING   // パラメータのタイプ(デフォルト値: 文字列)
    PARAMETER::Mode mode = PARAMETER::IN            // パラメータのモード(デフォルト値: 入力モード): デフォルトの設定では、メソッド呼び出しのパラメータを追加します。
);

戻り値

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

解説

この関数は、Web サービスのメソッド呼び出しまたはメソッドレスポンスのパラメータを追加します。

デフォルトの設定では、Web サービスのメソッド呼び出しのパラメータを追加します。

使用例

SFXSOAPRPC rpc;

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

参照

SFXSOAPRPC::AddAttibute | SFXSOAPRPC::PARAMETER | SFXBuffer


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

解説

この関数は、この SOAP-RPC をキャンセルします。

具体的には、以下のことを行います。

  • メソッド呼び出しとメソッドレスポンスのパラメータをすべて削除します。
  • SOAP リクエストと SOAP レスポンスを空にします。
  • Web サーバーへの接続状態を OFF にします。
  • HTTP 接続を閉じます。
  • SSL 認証モードをデフォルト値(SSL_TRUST_MODE_FAIL)に設定します。
  • 内部で使用しているストリームを解放します。
[Note] 注意

この関数は、SFXSOAPRPC::Reset 関数から呼び出されます。

参照

SFXSOAPRPC::RemoveAllParams | SFXSOAPRPC::AddParameter | SFXSOAPRPC::Invoke | SFXSOAPRPC::IsConnecting | SFXSOAPRPC::SetTrustMode | SFXSOAPRPC::Reset


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

戻り値

SOAP エンコーディングの値

解説

この関数は、SOAP エンコーディングを取得します。

参照

SFXSOAPRPC::SetEncodingStyle


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

戻り値

Web サービスのメソッド名

解説

この関数は、Webサービスのメソッド名を取得します。

参照

SFXSOAPRPC::SetMethodName


SFXSOAPRPC::GetParams
Web サービスのメソッド呼び出しのパラメータのリストを取得します。
[ public, const ]
ParamsConstPtr GetParams(Void);

戻り値

Web サービスのメソッド呼び出しのパラメータのリスト(SFXSOAPRPC::Params

解説

この関数は、Web サービスのメソッド呼び出しのパラメータのリスト(SFXSOAPRPC::Params)を取得します。

使用例

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());  // パラメータの値を出力する
[Note] 注意

SFXSOAPRPC::LPPARAMETER は、 SFXSOAPRPC::PARAMETER のポインタ型です。

参照

SFXSOAPRPC::SetParams | SFXSOAPRPC::Params | SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER


SFXSOAPRPC::GetResultValueByName
指定された名前と一致する Web サービスのメソッドレスポンスのパラメータを取得します。
[ public, const ]
const LPPARAMETER GetResultValueByName(
    SFXAnsiStringConstRef name   // パラメータの名前
);

戻り値

指定された名前と一致する Web サービスのメソッドレスポンスのパラメータ(SFXSOAPRPC::LPPARAMETER

解説

この関数は、指定された名前と一致する Web サービスのメソッドレスポンスのパラメータを取得します。

[Caution] 注意

同じ名前のパラメータが複数存在する場合、最後のパラメータの値だけが保存されます。

参照

SFXSOAPRPC::LPPARAMETER


SFXSOAPRPC::GetResultValues
Web サービスのメソッドレスポンスのパラメータのリストを取得します
[ public, const ]
ParamsConstPtr GetResultValues(Void);

戻り値

Web サービスのメソッドレスポンスのパラメータのリスト(SFXSOAPRPC::Params

解説

この関数は、Web サービスのメソッドレスポンスのパラメータのリストを取得します。

[Note] 注意

この関数の戻り値は、 SFXSOAPRPC::SetNotifyHandler / SFXSOAPRPC::Invoke 関数の spp 引数に指定したコールバック (SFXSOAPRPC::NotifySPP 関数) の result 引数に通知される内容と同じです。

使用例

SFXSOAPRPC _rpc;    // SFXSOAPRPC オブジェクト

// 以下の内容は、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::SetNotifyHandler | SFXSOAPRPC::Invoke | SFXSOAPRPC::Params | SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER | SFXSOAPRPC::NotifySPP


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

解説

この関数は、Web サービスのメソッドの名前空間 URI を取得します。

参照

SFXSOAPRPC::SetTargetObjectURI


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

戻り値

SSL 認証モード

解説

この関数は、HTTPS 通信の SSL 認証モードを取得します。

以下の 4 種類の SSL 認証モードの何れかが返却されます。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。

参照

SFXSOAPRPC::SetTrustMode | BREW API ISSL_NegotiateV


SFXSOAPRPC::Invoke
Web サービスのメソッドを呼び出します。
[ public ]
SFCError Invoke(
    SFXAnsiStringConstRef url             // Web サービスの URL
    SFXAnsiStringConstRef SOAPActionURI   // HTTP プロトコルバインディングヘッダーの SOAPAction 属性値
    NotifySPP spp = null                  // コールバック関数(デフォルト値: null)
    VoidPtr reference = null              // コールバック関数に渡すデータ(デフォルト値: null)
);
[ public ]
SFCError Invoke(
    SFXAnsiStringConstRef url             // Web サービスの URL
    SFXAnsiStringConstRef SOAPActionURI   // HTTP プロトコルバインディングヘッダーの SOAPAction 属性値
    SFXAnsiStringConstRef input           // SOAP Envelope ファイルのパス: SOAP Envelope 要素をルートとする XML 文書のファイル
    NotifySPP spp = null                  // コールバック関数
    VoidPtr reference = null              // コールバック関数に渡すデータ(参照値)
);

引数

url

Web サービスの URL を指定します。

SOAPActionURI

SOAP メッセージのプロトコルバインディングヘッダーの SOAPAction 属性の URI を指定します。

input

SOAP Envelope ファイルのパスを指定します。 SOAP Envelope ファイルとは、SOAP Envelope 要素をルートとする XML 文書のファイルのことです。

(※)input 引数は、SOAP Envelope を手動で作成する場合に利用します。

spp

Web サービスのメソッド呼び出し完了後に呼び出されるコールバック関数を指定します。

reference

Web サービスのメソッド呼び出し完了後に呼び出されるコールバック関数が参照するデータを指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • Web サーバーに接続中であるとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY
  • Envelope 要素がないとき: SFERR_SOAP_EXPECT_ENVELOPE(0x699F)
  • Body 要素がないとき: SFERR_SOAP_EXPECT_BODY(0x69A0)
  • Envelope 要素が重複しているとき: SFERR_SOAP_REPEATED_ENVELOPE(0x69A2)
  • HTTP 接続に失敗したとき: SFERR_FAILED(※このエラーは引数に指定したコールバック関数の第 1 引数に渡されます)

解説

この関数は、指定された Web サービスのメソッドを呼び出します(HTTP-POST プロトコルで HTTP 接続を行います)。

input 引数で SOAP Envelope ファイルのパスを指定するタイプの場合、 予め SOAP Envelope 要素をルートとする XML 文書を作成し、 ファイルに保存しておく必要があります。

一方、input 引数を使用しないタイプでは、 SFXSOAPRPC クラスの各種関数を使用して設定した内容で SOAP Envelope が自動的に作成されます。

Web サービスの呼び出しが完了すると、 引数に指定したコールバック関数に結果が通知されます。

[Note] SFXSOAPRPC::SetNotifyHandler 関数

spp / reference 引数に null を指定して この関数を呼び出した場合、 あるいは、これらの引数を指定せずにこの関数を呼び出した場合、 SFXSOAPRPC::SetNotifyHandler 関数で設定したコールバック関数が呼び出され、 このコールバック関数に SOAP-RPC の戻り値(SOAP レスポンス)が通知されます。

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

SFXSOAPRPC クラスでは、 SOAP メッセージは HTTP-POST トランスポートプロトコルにバインディングされます。

[Note] SOAP 1.1 サポート

SFXSOAPRPC クラスは、 SOAP 1.1 のサポートなので、HTTP プロトコルバインディングヘッダーの Content-Type フィールドには、 "text/xml; charset=utf-8" が設定されます。

SOAPActionURI 引数には、 HTTP プロトコルバインディングヘッダーの SOAPAction ヘッダーフィールドを指定することも可能です。

[Note] HTTPS 通信の SSL 認証モード

SFXSOAPRPC::SetTrustMode 関数で設定した HTTPS 通信 SSL 認証モードは、 この関数内で SFXHTTPConnection::SetTrustMode 関数を呼び出して実際に設定されます。 この SSL 認証モードは、コールバック関数の実行が完了するまで有効です。

[Note] Web サーバーの接続状態

SFXSOAPRPC::Invoke 関数を呼び出してからコールバック関数の実行が完了するまでは、 SFXSOAPRPC::IsConnecting 関数によって得られる Web サーバーの接続状態は ON になったままです。 コールバック関数の実行が完了した後、OFF になります。

参照

SFXSOAPRPC::SetNotifyHandler | SFXSOAPRPC::SetTrustMode | SFXSOAPRPC::SetEncodingStyle | SFXSOAPRPC::SetHeader | SFXSOAPRPC::SetMethodName | SFXSOAPRPC::AddMethodAttribute | SFXSOAPRPC::SetParams | SFXSOAPRPC::AddParameter | SFXSOAPRPC::AddAttibute | SFXSOAPRPC::SetTargetObjectURI | SFXSOAPRPC::IsConnecting | SFXHTTPConnection::Open | SFXHTTPConnection::Connect | SFXHTTPConnection::SetTrustMode | SFXSOAPRPC::NotifySPP


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

戻り値

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

解説

この関数は、Web サーバーに接続しているか判定します。

[Note] 注意

SFXSOAPRPC::Invoke 関数を呼び出してから SFXSOAPRPC::Invoke 関数呼び出し時、または SFXSOAPRPC::SetNotifyHandler 関数で指定したコールバック関数の実行が完了するまでが Web サーバーに接続している状態になります。

参照

SFXSOAPRPC::SetNotifyHandler | SFXSOAPRPC::Invoke


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

解説

この関数は、Web サービスのメソッド呼び出しとメソッドレスポンスのパラメータをすべて削除します。

参照

SFXSOAPRPC::SetParams | SFXSOAPRPC::GetResultValues | SFXSOAPRPC::Cancel | SFXSOAPRPC::Params


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

解説

この関数は、この SOAP-RPC をキャンセルし、すべての内部変数をリセットします。

具体的には、以下のことを行います。

参照

SFXSOAPRPC::Cancel | SFXSOAPRPC::SetEncodingStyle | SFXSOAPRPC::SetMethodName | SFXSOAPRPC::SetTargetObjectURI | SFXSOAPRPC::AddMethodAttribute | SFXSOAPRPC::SetNotifyHandler | SFXSOAPRPC::SFXSOAPRPC


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

引数

encodingstyle

SOAP エンコーディングの値を指定します(デフォルト値: "NONE")。

解説

この関数は、SOAP エンコーディングを設定します。

以下の値を設定することも可能です(デフォルトは "NONE" です)。

値(文字列) 意味
"NONE" SOAP エンコーディングは何も指定されません(デフォルト)。
"STANDARD" "http://schemas.xmlsoap.org/soap/encoding/" を意味します。
[Note] SOAP エンコーディング

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

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

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

参照

SFXSOAPRPC::GetEncodingStyle | SFXSOAPRPC::Reset


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

引数

encodingstyle

SOAP エンコーディングの値を指定します(デフォルト値: "NONE")。

戻り値

Header 要素(Element ノード)

この関数を実行後、 static_exception::static_catch 関数により取得できる、エラー値は以下の通りです。

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

解説

この関数は、SOAP メッセージの Header 要素(SOAP Header)を設定します。

内部的に SFXSOAPWriter::SetHeader 関数を呼び出します。

encodingstyle 引数に指定できる SOAP エンコーディングの値は、以下の通りです。

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

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

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

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

参照

SFXSOAPWriter::SetHeader


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

解説

この関数は、Web サービスのメソッド名を設定します。

参照

SFXSOAPRPC::GetMethodName | SFXSOAPRPC::Reset


SFXSOAPRPC::SetNotifyHandler
SOAP-RPC の戻り値(SOAP レスポンス)を取得するためのコールバック関数とコールバック関数に渡すデータを設定します。
[ public ]
Void SetNotifyHandler(
    NotifySPP spp       // コールバック関数(デフォルト値: null)
    VoidPtr reference   // コールバック関数に渡すデータ(デフォルト値: null)
);

解説

この関数は、SOAP-RPC の戻り値(SOAP レスポンス)を取得するためのコールバック関数とコールバック関数に渡すデータを設定します。

デフォルト値: null

[Note] 注意

SOAP-RPC の戻り値(SOAP レスポンス)は、 SFXSOAPRPC::Invoke 関数で指定するコールバック関数で取得することも可能です。

spp 引数(コールバック関数)と reference 引数(コールバック関数に渡すデータ)に null を指定して SFXSOAPRPC::Invoke 関数を呼び出した場合、 あるいは、これらの引数を指定せずに SFXSOAPRPC::Invoke 関数を呼び出した場合、 この関数で設定したコールバック関数が SOAP-RPC の戻り値(SOAP レスポンス)を取得します。

参照

SFXSOAPRPC::Invoke


SFXSOAPRPC::SetParams
Web サービスのメソッド呼び出しのパラメータのリストを設定します。
[ public ]
SFCError SetParams(
    ParamsConstRef params   // パラメータ
);

戻り値

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

解説

この関数は、Web サービスのメソッド呼び出しのパラメータのリスト(SFXSOAPRPC::Params)を設定します。

参照

SFXSOAPRPC::GetParams | SFXSOAPRPC::Params


SFXSOAPRPC::SetTargetObjectURI
Web サービスのメソッドの名前空間 URI とその名前空間接頭辞を設定します。
[ public ]
Void SetTargetObjectURI(
    SFXAnsiStringConstRef targeturi                                 // 名前空間 URI
    SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()   // 名前空間接頭辞
);

解説

この関数は、Web サービスのメソッドの名前空間 URI とその名前空間接頭辞を設定します。

参照

SFXSOAPRPC::GetTargetObjectURI | SFXSOAPRPC::Reset


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

引数

param

SSL 認証モードを指定します。

解説

この関数は、HTTPS 通信の SSL 認証モードを設定します。

SOAP メッセージは、HTTP/HTTPS 通信によりクライアントとサーバー間でやり取りされます。 この関数は、HTTPS 通信を行う場合の SSL 認証モードを設定します。

デフォルト値: SSL_TRUST_MODE_FAIL

設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。

設定された値は、 SFXSOAPRPC::Invoke 関数、または SFXSOAPRPC::Cancel 関数が呼び出されるまで有効です。

[Note] 注意

実際に SSL 認証モードが設定されるタイミングは、 SFXSOAPRPC::Invoke 関数内で SFXHTTPConnection::SetTrustMode 関数が呼び出されたときです。

参照

SFXSOAPRPC::GetTrustMode | SFXHTTPConnection::SetTrustMode | BREW API ISSL_NegotiateV


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

typedef struct _Fault {
    SFXAnsiString    _faultactor;    // faultactor 要素
    SFXAnsiString    _faultcode;     // faultcode 要素
    SFXAnsiString    _faultstring;   // faultstring 要素
    SFXXMLElementPtr _faultdetail;   // faultdetail 要素
} FAULT;

解説

SOAP メッセージの Fault 要素(SOAP Fault)には、SOAP リクエスト処理中に発生したエラーの内容が返されます。 Fault 要素は、SOAP メッセージの Body 要素(SOAP Body)の子要素としてひとつだけ存在します。

SOAP Fault は、faultcode 要素、faultstring 要素、faultactor 要素、detail 要素の順に 4 つの子要素から構成されます。

[Note] SOAP Fault

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

SOAP Tutorial: SOAP Fault Element

※ SophiaFramework UNIVERSE では、SOAP Fault は SOAP 1.1 だけがサポートされます。

変数 説明
_faultcode [必須]SOAP レスポンスを受け取ったアプリケーションが SOAP リクエスト中に発生したエラー内容を判断するためのコードです。
_faultstring [必須]人間が理解できるメッセージとして表現されるエラー内容です。
_faultactor エラーの発生元の URI です。
_faultdetail アプリケーション処理のためのメッセージとして表現されるエラー内容です。

参照

SFXSOAPRPC::LPFAULT | SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultDetail | SFXSOAPParser::GetFaultString


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

typedef struct _Fault {
    SFXAnsiString    _faultactor;    // faultactor 要素
    SFXAnsiString    _faultcode;     // faultcode 要素
    SFXAnsiString    _faultstring;   // faultstring 要素
    SFXXMLElementPtr _faultdetail;   // faultdetail 要素
} *LPFAULT;

参照

SFXSOAPRPC::FAULT


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

typedef struct _Parameter {
    enum Types {
        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_STRING,
        SOAP_BOOLEAN,
        SOAP_DOUBLE,
        SOAP_BASE64,
        SOAP_FLOAT,
        SOAP_INT,
        SOAP_LONG,
        SOAP_SHORT,
        SOAP_BYTE,
        SOAP_ARRAY,
        UNKNOWN
    };
    enum Mode {
        IN,
        INOUT,
        OUT
    };

    Types                  _type;     // タイプ
    Mode                   _mode;     // 入出力モード
    SFXAnsiString          _name;     // 名前
    SFXBuffer              _value;    // 値
    SFXProperty            _attrlist; // 属性情報
} *LPPARAMETER;

解説

SFXSOAPRPC::PARAMETER 構造体のポインタ型です。

参照

SFXSOAPRPC::PARAMETER


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

引数

error

SFXSOAPRPC::Invoke 関数実行中に発生したエラー値が渡されます。

result

コールバック関数に渡される SOAP-RPC の戻り値です。

fault

コールバック関数に渡される SOAP Fault(構造体)です。

soap

SOAP レスポンスが DOM ツリーとして渡されます。

reference

コールバック関数が参照するデータです。

参照

SFXSOAPRPC::Invoke


SFXSOAPRPC::PARAMETER
メソッド呼び出しとメソッドレスポンスのパラメータを表す構造体です。
typedef struct SFXSOAPRPC::_Parameter SFXSOAPRPC::PARAMETER

typedef struct _Parameter {
    enum Types {
        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_STRING,
        SOAP_BOOLEAN,
        SOAP_DOUBLE,
        SOAP_BASE64,
        SOAP_FLOAT,
        SOAP_INT,
        SOAP_LONG,
        SOAP_SHORT,
        SOAP_BYTE,
        SOAP_ARRAY,
        UNKNOWN
    };
    enum Mode {
        IN,
        INOUT,
        OUT
    };

    Types                  _type;     // タイプ
    Mode                   _mode;     // 入出力モード
    SFXAnsiString          _name;     // 名前
    SFXBuffer              _value;    // 値
    SFXProperty            _attrlist; // 属性情報
} 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 関数を呼び出します。

参照

SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::AddAttibute | SFXBuffer


SFXSOAPRPC::Params
パラメータ構造体へのポインタの配列を表します。
SFMTYPEDEFALIAS(SFXArray<LPPARAMETER>, Params)

解説

パラメータ構造体へのポインタの配列を表します。

参照

SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER | SFXArray