前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXSOAPServiceProxy
WSDL 文書を解析して SOAP-RPC プロキシを作成し、ダイナミックバイディングを行うクラスです。
#include <SFXSOAPServiceProxy.hpp>
class SFXSOAPServiceProxy;
SFMTYPEDEFCLASS(SFXSOAPServiceProxy)

協調図

SFXSOAPServiceProxy クラスの協調図

解説

[Caution] 注意

SFXSOAPServiceProxy クラスは、 部分的にしか WSDL に対応していません。

SFXSOAPServiceProxy クラスは、 WSDL 文書を使用して Web サービスにアクセスするためのクラスです。

具体的には、 SFXSOAPServiceProxy クラスは、 SFXXMLDOMParser クラスのパーサーを利用して WSDL 文書を解析し、動的に SOAP-RPC プロキシを生成して SFXSOAPRPC クラスを利用して Web サービスにアクセスします。

以下は、加減乗除を行う Web サービスを定義する WSDL 文書(ファイル名: "Arithmetic.wsdl")です。

[Note] 注意

この Web サービスは、www.s-cradle.com でサンプルとして利用可能です。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
                  xmlns:ns1="http://org.apache.axis2/xsd" 
                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
                  xmlns:ns0="http://soapsample.s_cradle.com" 
                  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
                  targetNamespace="http://soapsample.s_cradle.com">
  <wsdl:types>
    <xs:schema xmlns:ns="http://soapsample.s_cradle.com" attributeFormDefault="qualified" elementFormDefault="qualified" 
               targetNamespace="http://soapsample.s_cradle.com">
      <xs:element name="Add">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="left" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="right" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AddResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Divide">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="left" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="right" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="DivideResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Multiply">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="left" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="right" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MultiplyResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Substract">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="left" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="right" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SubstractResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </wsdl:types>
  <wsdl:message name="SubstractRequest">
    <wsdl:part name="parameters" element="ns0:Substract"/>
  </wsdl:message>
  <wsdl:message name="SubstractResponse">
    <wsdl:part name="parameters" element="ns0:SubstractResponse"/>
  </wsdl:message>
  <wsdl:message name="AddRequest">
    <wsdl:part name="parameters" element="ns0:Add"/>
  </wsdl:message>
  <wsdl:message name="AddResponse">
    <wsdl:part name="parameters" element="ns0:AddResponse"/>
  </wsdl:message>
  <wsdl:message name="DivideRequest">
    <wsdl:part name="parameters" element="ns0:Divide"/>
  </wsdl:message>
  <wsdl:message name="DivideResponse">
    <wsdl:part name="parameters" element="ns0:DivideResponse"/>
  </wsdl:message>
  <wsdl:message name="MultiplyRequest">
    <wsdl:part name="parameters" element="ns0:Multiply"/>
  </wsdl:message>
  <wsdl:message name="MultiplyResponse">
    <wsdl:part name="parameters" element="ns0:MultiplyResponse"/>
  </wsdl:message>
  <wsdl:portType name="ArithmeticPortType">
    <wsdl:operation name="Substract">
      <wsdl:input message="ns0:SubstractRequest" wsaw:Action="urn:Substract"/>
      <wsdl:output message="ns0:SubstractResponse" wsaw:Action="urn:SubstractResponse"/>
    </wsdl:operation>
    <wsdl:operation name="Add">
      <wsdl:input message="ns0:AddRequest" wsaw:Action="urn:Add"/>
      <wsdl:output message="ns0:AddResponse" wsaw:Action="urn:AddResponse"/>
    </wsdl:operation>
    <wsdl:operation name="Divide">
      <wsdl:input message="ns0:DivideRequest" wsaw:Action="urn:Divide"/>
      <wsdl:output message="ns0:DivideResponse" wsaw:Action="urn:DivideResponse"/>
    </wsdl:operation>
    <wsdl:operation name="Multiply">
      <wsdl:input message="ns0:MultiplyRequest" wsaw:Action="urn:Multiply"/>
      <wsdl:output message="ns0:MultiplyResponse" wsaw:Action="urn:MultiplyResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="ArithmeticSOAP11Binding" type="ns0:ArithmeticPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <wsdl:operation name="Substract">
      <soap:operation soapAction="urn:Substract" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Add">
      <soap:operation soapAction="urn:Add" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Divide">
      <soap:operation soapAction="urn:Divide" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Multiply">
      <soap:operation soapAction="urn:Multiply" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="ArithmeticSOAP12Binding" type="ns0:ArithmeticPortType">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <wsdl:operation name="Substract">
      <soap12:operation soapAction="urn:Substract" style="document"/>
      <wsdl:input>
        <soap12:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Add">
      <soap12:operation soapAction="urn:Add" style="document"/>
      <wsdl:input>
        <soap12:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Divide">
      <soap12:operation soapAction="urn:Divide" style="document"/>
      <wsdl:input>
        <soap12:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Multiply">
      <soap12:operation soapAction="urn:Multiply" style="document"/>
      <wsdl:input>
        <soap12:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="ArithmeticHttpBinding" type="ns0:ArithmeticPortType">
    <http:binding verb="POST"/>
    <wsdl:operation name="Substract">
      <http:operation location="Arithmetic/Substract"/>
      <wsdl:input>
        <mime:content type="text/xml" part="Substract"/>
      </wsdl:input>
      <wsdl:output>
        <mime:content type="text/xml" part="Substract"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Add">
      <http:operation location="Arithmetic/Add"/>
      <wsdl:input>
        <mime:content type="text/xml" part="Add"/>
      </wsdl:input>
      <wsdl:output>
        <mime:content type="text/xml" part="Add"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Divide">
      <http:operation location="Arithmetic/Divide"/>
      <wsdl:input>
        <mime:content type="text/xml" part="Divide"/>
      </wsdl:input>
      <wsdl:output>
        <mime:content type="text/xml" part="Divide"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Multiply">
      <http:operation location="Arithmetic/Multiply"/>
      <wsdl:input>
        <mime:content type="text/xml" part="Multiply"/>
      </wsdl:input>
      <wsdl:output>
        <mime:content type="text/xml" part="Multiply"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Arithmetic">
    <wsdl:port name="ArithmeticSOAP11port_http" binding="ns0:ArithmeticSOAP11Binding">
      <soap:address location="/soapsample/Arithmetic"/>
    </wsdl:port>
    <wsdl:port name="ArithmeticSOAP12port_http" binding="ns0:ArithmeticSOAP12Binding">
      <soap12:address location="/soapsample/Arithmetic"/>
    </wsdl:port>
    <wsdl:port name="ArithmeticHttpport" binding="ns0:ArithmeticHttpBinding">
      <http:address location="/soapsample/Arithmetic"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

以下は、 SFXSOAPServiceProxy クラスを使用して、 WSDL 文書(ファイル名: "Arithmetic.wsdl")から SOAP-RPC プロキシを生成し、 ダイナミックバイディングを行うコードです。

例 848. WSDL 文書から SOAP-RPC プロキシを生成し、ダイナミックバイディングを行うコード

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

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 _SFXSOAPServiceProxy(Void);

    // サーバから返答を受け取るためのコールバック関数(エントリ)
    static Void OnResultSHP_WSDL(SFCError error, const SFXSOAPRPC::Params& result, const SFXSOAPRPC::FAULT& fault, SFXSOAPParserConstRef soap, VoidPtr reference);
    // サーバから返答を受け取るためのコールバック関数(本体)
    Void OnResult_WSDL(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>
    //   <Multiply xmlns="http://soapsample.s-cradle.com">
    //    <left>2.0</left>
    //    <right>3.0</right>
    //   </Multiply>
    //  </SOAP-ENV:Body>
    // </SOAP-ENV:Envelope>

    // サーバから返答を受け取るためのコールバック関数(エントリ)を設定する
    // ※ コールバック関数は静的関数でなければいけないので、一旦 OnResultSHP_WSDL 静的関数を呼び出し、
    //    OnResultSHP_WSDL() 内からコールバック関数の本体である OnResult_WSDL メンバ関数を呼び出す
    _wsdl.SetNotifyHandler(OnResultSHP_WSDL, this);

    // Webサービス記述言語 WSDL を設定する
    if (_wsdl.SetWSDLDocument("Arithmetic.wsdl") == SFERR_NO_ERROR) {

        // Web サービスの名前を設定する
        _wsdl.SetServiceName("Arithmetic");

        // Web サービスのポート名を設定する
        _wsdl.SetPortName("ArithmeticSOAP11port_http");

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

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

        // Web サービスを呼び出す
        _wsdl.Invoke();
    }
    return;
}

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

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

メンバ

コンストラクタ/デストラクタ
SFXSOAPServiceProxy( Void )
SFXSOAPServiceProxy クラスのコンストラクタです。
SFXSOAPServiceProxy( SFXAnsiStringConstRef wsdl )
SFXSOAPServiceProxy クラスのコンストラクタです。
SFXSOAPServiceProxy( SFXAnsiStringConstRef wsdl , SFXAnsiStringConstRef service , SFXAnsiStringConstRef port , SFXAnsiStringConstRef method )
SFXSOAPServiceProxy クラスのコンストラクタです。
~SFXSOAPServiceProxy( Void )
SFXSOAPServiceProxy クラスのデストラクタです。
パブリック関数
Void Cancel( Void )
内部で行っている SOAP-RPC をキャンセルします。
ACharConstPtr GetMethodName( Void )
Webサービスのメソッド名を取得します。
ACharConstPtr GetPortName( Void )
Web サービスのポート名を取得します。
const SFXSOAPRPC::LPPARAMETER GetResultValueByName( SFXAnsiStringConstRef name )
指定されたパラメータの戻り値を取得します。
ParamsConstPtr GetResultValues( Void )
Web サービスのメソッドレスポンスのパラメータのリストを取得します
ACharConstPtr GetServiceName( Void )
Web サービス名を取得します。
UInt32 GetTrustMode( Void )
HTTPS 通信の SSL 認証モードを取得します。
SFCError Invoke( NotifySPP spp = null , VoidPtr reference = null )
Web サービスのメソッドを呼び出します。
Bool IsConnecting( Void )
Web サーバーに接続しているか判定します。
Void Reset( Void )
すべての内部変数をリセットします。
SFCError SetMethodAttribute( SFXAnsiStringConstRef name , SFXAnsiStringConstRef value )
Web サービスのメソッドに属性を設定します。
Void SetMethodName( SFXAnsiStringConstRef method )
Web サービスのメソッド名を設定します。
Void SetNotifyHandler( SFXSOAPRPC::NotifySPP spp , VoidPtr reference )
SOAP-RPC の戻り値(SOAP レスポンス)を取得するためのコールバック関数とコールバック関数に渡すデータを設定します。
SFCError SetParameterValue( SFXAnsiStringConstRef name , SFXBufferConstRef value , SFXPropertyConstRef attribute = SFXProperty::EmptyInstance() )
Web サービスのパラメータとその属性の内容を設定します。
Void SetPortName( SFXAnsiStringConstRef port )
Web サービスのポート名を設定します。
Void SetServiceName( SFXAnsiStringConstRef service )
Web サービス名を設定します。
Void SetTrustMode( UInt32 param )
HTTPS 通信の SSL 認証モードを設定します。
SFCError SetWSDLDocument( SFXAnsiStringConstRef wsdl )
WSDL 文書を設定します。
SFCError SetWSDLDocument( SFXPathConstRef wsdl )
WSDL 文書を設定します。

SFXSOAPServiceProxy::SFXSOAPServiceProxy
SFXSOAPServiceProxy クラスのコンストラクタです。
[ public, explicit ]
SFXSOAPServiceProxy(Void);
[ public, explicit ]
SFXSOAPServiceProxy(
    SFXAnsiStringConstRef wsdl   // WSDL 文書のパス名
);
[ public, explicit ]
SFXSOAPServiceProxy(
    SFXAnsiStringConstRef wsdl      // WSDL 文書のパス名
    SFXAnsiStringConstRef service   // サービス名
    SFXAnsiStringConstRef port      // ポート名
    SFXAnsiStringConstRef method    // メソッド名
);

解説

このコンストラクタは、この WSDL 文書の処理を初期化します。

具体的には、内部のパーサー(SFXXMLDOMParser)について以下の処理を行います。

  • 文法を SFXXMLGrammar::GRAMMAR_SCHEMA に設定します。
  • スキーマを処理するように設定します。
  • 名前空間を処理するように設定します。
  • 内部的に生成する DOM ツリー内にコメントノードを生成しないように設定します。

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

  • WSDL 文書を設定します(内部的に WSDL 文書を解析し、DOM ツリーに変換します)。
  • サービス名、メソッド名、ポート名を設定します。

参照

SFXXMLDOMParser::SetCreateCommentNodes | SFXSOAPServiceProxy::SetWSDLDocument | SFXSOAPRPC::SetMethodName | SFXXMLDOMParser


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

解説

このデストラクタは、すべての内部変数をリセットします。

[Note] 注意

この関数は、内部で SFXSOAPServiceProxy::Reset 関数を呼び出します。

参照

SFXSOAPServiceProxy::Reset


SFXSOAPServiceProxy::Cancel
内部で行っている SOAP-RPC をキャンセルします。
[ public ]
Void Cancel(Void);

解説

この関数は、内部で行っている SOAP-RPC をキャンセルします。

[Note] 注意

この関数は、内部で SFXSOAPRPC::Cancel 関数を呼び出します。

参照

SFXSOAPRPC::Cancel


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

解説

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

参照

SFXSOAPServiceProxy::SetMethodName


SFXSOAPServiceProxy::GetPortName
Web サービスのポート名を取得します。
[ public, const ]
ACharConstPtr GetPortName(Void);

戻り値

Web サービスのポート名

解説

この関数は、Web サービスのポート名を取得します。

参照

SFXSOAPServiceProxy::SetPortName


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

戻り値

指定されたパラメータの戻り値(SFXSOAPRPC::LPPARAMETER

解説

この関数は、指定されたパラメータの戻り値を取得します。

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数の後に呼び出す必要があります。 通常、SFXSOAPServiceProxy::SetNotifyHandler 関数で指定する Web サービス呼び出しの結果を取得するコールバック関数の中で使用されます。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::SetNotifyHandler | SFXSOAPRPC::LPPARAMETER


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

戻り値

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

解説

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

[Note] 注意

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

使用例

SFXSOAPServiceProxy _wsdl;    // SFXSOAPServiceProxy オブジェクト

// 以下の内容は、SOAP-RPC のコールバック内で実行することを想定している

SFXSOAPRPC::ParamsConstPtr lp;
lp = _wsdl.GetResultValues();    // メソッドレスポンスのパラメータのリストを取得する
SFXSOAPRPC::LPPARAMETER item;
item = lp->Get(0);           // 最初の要素を取得する

TRACE("%s", item->_name.GetCString());   // パラメータの名前を出力する
TRACE("%s", item->_value.GetBuffer());   // パラメータの値を出力する

参照

SFXSOAPServiceProxy::SetNotifyHandler | SFXSOAPServiceProxy::Invoke | SFXSOAPRPC::Params | SFXSOAPRPC::LPPARAMETER | SFXSOAPRPC::PARAMETER | SFXSOAPRPC::NotifySPP


SFXSOAPServiceProxy::GetServiceName
Web サービス名を取得します。
[ public, const ]
ACharConstPtr GetServiceName(Void);

戻り値

Web サービスのサービス名

解説

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

参照

SFXSOAPServiceProxy::SetServiceName


SFXSOAPServiceProxy::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: トラストをチェックできるように常に中断します。

参照

SFXSOAPServiceProxy::SetTrustMode | BREW API ISSL_NegotiateV


SFXSOAPServiceProxy::Invoke
Web サービスのメソッドを呼び出します。
[ public ]
SFCError Invoke(
    NotifySPP spp = null       // コールバック関数(デフォルト値: null)
    VoidPtr reference = null   // コールバック関数に渡すデータ(デフォルト値: null)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • WSDL 文書、サービス名、ポート名、またはメソッド名が設定されていないとき: SFERR_INVALID_PARAM
  • Envelope 要素(SOAP Envelope)がないとき: SFERR_SOAP_EXPECT_ENVELOPE( 0x699F )
  • Body 要素(SOAP Body)がないとき: SFERR_SOAP_EXPECT_BODY( 0x69A0 )
  • Envelope 要素(SOAP Envelope)が重複しているとき: SFERR_SOAP_REPEATED_ENVELOPE( 0x69A2 )
  • WSDL 文書にルート要素がないとき: SFERR_FAILED

WSDL 文書に関するエラー値は以下になります。

  • WSDL 文書に指定された service 要素がないとき: SFERR_WSDL_EXPECT_SERVICE( 0x69A6 )
  • WSDL 文書に指定された service 要素に port 要素がないとき: SFERR_WSDL_EXPECT_PORT( 0x69A7 )
  • WSDL 文書に指定された service 要素の port 要素に binding 属性がないとき: SFERR_WSDL_EXPECT_BINDING( 0x69A8 )
  • WSDL 文書に指定された service 要素に operation 要素(メソッド)がないとき: SFERR_WSDL_EXPECT_OPERATION( 0x69A9 )
  • WSDL 文書に指定された service 要素の port 要素の binding 属性の binding 要素の type 属性の portType 要素がないとき: SFERR_WSDL_EXPECT_PORTTYPE( 0x69AA )
  • WSDL 文書に指定された service 要素の operation 要素(メソッド)に input / output 要素がないとき: SFERR_WSDL_EXPECT_MESSAGE( 0x69AB )

詳細情報: SFCErrorEnum

解説

この関数は、コンストラクタまたは Set 関数で設定された Web サービスのメソッドを呼び出します。

この関数は、SFXSOAPServiceProxy::SFXSOAPServiceProxy コンストラクタ、 SFXSOAPServiceProxy::SetNotifyHandler / SFXSOAPServiceProxy::SetTrustMode / SFXSOAPServiceProxy::SetWSDLDocument / SFXSOAPServiceProxy::SetServiceName / SFXSOAPServiceProxy::SetPortName / SFXSOAPServiceProxy::SetMethodName / SFXSOAPServiceProxy::SetMethodAttribute / SFXSOAPServiceProxy::SetParameterValue 関数によって設定された情報に基づきて、 動的に SOAP リクエストメッセージを作成し、SOAP-RPC(SFXSOAPRPC)を行います。

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

[Note] 注意

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

[Note] 注意

SFXSOAPServiceProxy::SetWSDLDocument / SFXSOAPServiceProxy::SetServiceName / SFXSOAPServiceProxy::SetPortName / SFXSOAPServiceProxy::SetMethodName 関数で WSDL 文書、サービス名、ポート名、メソッド名が設定されていない場合は、 SFERR_INVALID_PARAM エラーが返ります。

[Note] 注意

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

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

内部で SFXHTTPConnection::Connect 関数を呼び出して行われる HTTP 接続の SFERR_FAILED エラーは、 コールバック関数の第 1 引数に返されます。

参照

SFXSOAPServiceProxy::SFXSOAPServiceProxy | SFXSOAPServiceProxy::SetTrustMode | SFXSOAPServiceProxy::SetNotifyHandler | SFXSOAPServiceProxy::SetWSDLDocument | SFXSOAPServiceProxy::SetServiceName | SFXSOAPServiceProxy::SetPortName | SFXSOAPServiceProxy::SetMethodName | SFXSOAPServiceProxy::SetMethodAttribute | SFXSOAPServiceProxy::SetParameterValue | SFXSOAPServiceProxy::GetResultValueByName | SFXSOAPRPC::Invoke | SFXSOAPServiceProxy::IsConnecting | SFXHTTPConnection::SetTrustMode | SFXHTTPConnection::Connect | SFXSOAPRPC | SFCErrorEnum


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

戻り値

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

解説

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

[Note] 注意

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

SFXSOAPServiceProxy クラスでは、 内部的に SFXSOAPRPC クラスの SOAP-RPC を利用して Web サービスにアクセスします。

※この関数は、内部的に SFXSOAPRPC::IsConnecting 関数を呼び出します。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::SetNotifyHandler | SFXSOAPRPC::IsConnecting


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

解説

この関数は、すべての内部変数をリセットします。

具体的には、内部で使用するパーサーと SOAP-RPC をリセットし、 WSDL 文書の設定、Web サービスのサービス名、ポート名、メソッド名、メソッド属性、 パラメータ、パラメータ属性をクリアします。 SSL 認証モードもデフォルト値に再設定されます。

[Note] 注意

この関数は、SFXSOAPServiceProxy::~SFXSOAPServiceProxy デストラクタから呼び出されます。

参照

SFXSOAPServiceProxy::~SFXSOAPServiceProxy | SFXSOAPRPC::Reset | SFXXMLDOMParser::Reset | SFXSOAPServiceProxy::SetMethodName | SFXSOAPServiceProxy::SetMethodAttribute | SFXSOAPServiceProxy::SetPortName | SFXSOAPServiceProxy::SetServiceName | SFXSOAPServiceProxy::SetTrustMode | SFXSOAPServiceProxy::SetWSDLDocument


SFXSOAPServiceProxy::SetMethodAttribute
Web サービスのメソッドに属性を設定します。
[ public ]
SFCError SetMethodAttribute(
    SFXAnsiStringConstRef name    // 属性名
    SFXAnsiStringConstRef value   // 属性の値
);

戻り値

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

解説

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

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPRPC::AddMethodAttribute | SFXSOAPServiceProxy::Reset


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

解説

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

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::GetMethodName | SFXSOAPServiceProxy::Reset | SFXSOAPRPC::SetMethodName


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

解説

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

デフォルト値: null

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPRPC::Invoke | SFXSOAPRPC::SetNotifyHandler


SFXSOAPServiceProxy::SetParameterValue
Web サービスのパラメータとその属性の内容を設定します。
[ public ]
SFCError SetParameterValue(
    SFXAnsiStringConstRef name                                     // パラメータ名
    SFXBufferConstRef value                                        // パラメータの値
    SFXPropertyConstRef attribute = SFXProperty::EmptyInstance()   // 属性名と属性値のペアの集合(SFXProperty 型)
);

引数

name

パラメータ名を指定します。

value

パラメータの値を指定します。

attribute

属性名と属性値のペアの集合を SFXProperty インスタンスとして指定します。

戻り値

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

解説

この関数は、Web サービスのパラメータとその属性の内容を設定します。

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::Reset | SFXProperty


SFXSOAPServiceProxy::SetPortName
Web サービスのポート名を設定します。
[ public ]
Void SetPortName(
    SFXAnsiStringConstRef port   // ポート名
);

解説

この関数は、Web サービスのポート名を設定します。

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::GetPortName | SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::Reset


SFXSOAPServiceProxy::SetServiceName
Web サービス名を設定します。
[ public ]
Void SetServiceName(
    SFXAnsiStringConstRef service   // Web サービス名
);

解説

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

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::GetServiceName | SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::Reset


SFXSOAPServiceProxy::SetTrustMode
HTTPS 通信の SSL 認証モードを設定します。
[ public ]
Void SetTrustMode(
    UInt32 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: トラストをチェックできるように常に中断します。

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

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

参照

SFXSOAPServiceProxy::GetTrustMode | SFXSOAPServiceProxy::Invoke | SFXHTTPConnection::SetTrustMode | BREW API ISSL_NegotiateV


SFXSOAPServiceProxy::SetWSDLDocument
WSDL 文書を設定します。
[ public ]
SFCError SetWSDLDocument(
    SFXAnsiStringConstRef wsdl   // WSDL 文書(文字列)
);
[ public ]
SFCError SetWSDLDocument(
    SFXPathConstRef wsdl   // WSDL 文書(パス)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • パスが不正なとき、または引数が null のとき: SFERR_INVALID_PARAM
  • 解析するファイルが既に開いているとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY
  • 名前空間もしくは名前空間 URI の挿入に失敗したとき、または SFBFileMgr のインスタンスの生成に失敗したとき: SFERR_FAILED

解説

この関数は、指定された WSDL 文書を設定します。

内部的には、 SFXXMLDOMParser::Parse 関数を呼び出して指定された WSDL 文書を解析し、 DOM ツリーに変換します。

[Note] 前提条件

この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。

WSDL 文書の解析後、 static_exception::static_catch 関数により取得できる、その他のエラー値は以下の通りです。

  • Body 要素がないとき: SFERR_SOAP_EXPECT_BODY( 0x69A0 )
  • 無効な要素があるとき: SFERR_SOAP_REDUNDANT_ELEMENT( 0x69A3 )
  • version 宣言の XML のバージョンに誤りがあるとき: SFERR_XML_BAD_VERSION( 0x6901 )
  • encoding 宣言のエンコーディングに誤りがあるとき: SFERR_XML_BAD_ENCODING( 0x6902 )
  • standalone 文書宣言で指定した値に誤りがあるとき: SFERR_XML_BAD_STANDALONE( 0x6903 )
  • "<!--"、"-->"、"<[["、"]]>"などの文字列に誤りがあるとき: SFERR_XML_BAD_SEQUENCE( 0x6904 )
  • 属性のデフォルトの型に誤りがあるとき: SFERR_XML_BAD_ATTRDEFTYPE( 0x6905 )
  • 属性の型に誤りがあるとき: SFERR_XML_BAD_ATTRTYPE( 0x6907 )
  • "=" マークがないとき: SFERR_XML_EXPECT_EQUALSIGN( 0x6908 )
  • 属性名がないとき: SFERR_XML_EXPECT_ATTRNAME( 0x690A )
  • XML 宣言が完全でないとき: SFERR_XML_EXPECT_DECLSTRING( 0x690C )
  • 要素名がないとき: SFERR_XML_EXPECT_ELEMENTNAME( 0x690D )
  • 処理命令 ( PI ) にターゲット名がないとき: SFERR_XML_EXPECT_PINAME( 0x690E )
  • 空白文字がないとき: SFERR_XML_EXPECT_WHITESPACE( 0x690F )
  • 終了タグがないとき: SFERR_XML_EXPECT_ENDTAG( 0x6912 )
  • XML 宣言に引用する文字列がないとき: SFERR_XML_EXPECT_QUOTEDSTRING( 0x691D )
  • version 宣言で XML のバージョンが指定されていないとき: SFERR_XML_EXPECT_XMLVERSION( 0x691E )
  • encoding 宣言でエンコーディングが指定されていないとき: SFERR_XML_EXPECT_ENCODING( 0x691F )
  • 開始タグが終了していないとき: SFERR_XML_UNTERMINATED_STARTTAG( 0x692D )
  • 処理命令 ( PI ) が終了していないとき: SFERR_XML_UNTERMINATED_PI( 0x692E )
  • コメントが終了していないとき: SFERR_XML_UNTERMINATED_COMMENT( 0x692F )
  • XML 宣言が終了していないとき: SFERR_XML_UNTERMINATED_XMLDECL( 0x6933 )
  • エンティティ参照が終了していないとき: SFERR_XML_UNTERMINATED_ENTITYREF( 0x6934 )
  • CDATA セクションが終了していないとき: SFERR_XML_UNTERMINATED_CDATA( 0x6935 )
  • XML 1.0 / 1.1 以外のバージョンのとき: SFERR_XML_UNSUPPORT_XMLVERSION( 0x6936 )
  • 文字が有効な範囲にないとき: SFERR_XML_INVALID_CHARREF( 0x6938 )
  • 属性値に誤りがあるとき: SFERR_XML_INVALID_ATTRVALUE( 0x6939 )
  • 要素名に誤りがあるとき: SFERR_XML_INVALID_ELEMENTNAME( 0x693A )
  • エンティティ参照の名前に誤りがあるとき: SFERR_XML_INVALID_ENTITYREFNAME( 0x693B )
  • 要素に誤りがあるとき: SFERR_XML_INVALID_ELEMENT( 0x693C )
  • xml:space 属性に誤りがあるとき: SFERR_XML_INVALID_XMLSPACE( 0x693F )
  • 名前空間接頭辞の定義が見つからないとき: SFERR_XML_UNKNOWN_PREFIX( 0x696B )
  • standalone 文書宣言に誤りがあるとき: SFERR_XML_INVALID_INSTANDALONE( 0x6941 )
  • 名前空間接頭辞の定義が見つからないとき: SFERR_XML_UNKNOWN_PREFIX( 0x696B )
  • ">" タグが余分にあるとき: SFERR_XML_MORE_ENDTAG( 0x6971 )
  • タグが対称でないとき: SFERR_XML_TAGSTACK_NOTEMPTY( 0x698C )
  • 処理命令ターゲット名が "xml" であるとき: SFERR_XML_PI_START_NO_WITHXML( 0x698D )
  • DOCTYPE で定義するルート要素に誤りがあるとき: SFERR_XML_ROOTELEM_NOTLIKE_DOCTYPE( 0x698E )
  • 必須となる属性の設定がされていないとき: SFERR_XML_ATTR_NOTPROVIDED( 0x698F )
  • standalone 文書宣言がデフォルトの設定になっていないとき: SFERR_XML_NODEFAULT_ATTR_FORSTANDALONE( 0x6990 )
  • EOF に誤りがあるとき: SFERR_XML_UNEXPECTED_EOF( 0x6995 )
  • 名前空間付きの XML 文書で、要素の名前空間接頭辞で余分な xmlns があるとき: SFERR_XML_REDUNDANT_XMLNS_PREFIX( 0x6997 )

詳細情報: SFCErrorEnum

参照

SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::Reset | SFXXMLDOMParser::Parse | SFCErrorEnum | SFXXMLDOMParser