SophiaFramework UNIVERSE 5.3 |
注意 | |
---|---|
SFXSOAPServiceProxy クラスは、 部分的にしか WSDL に対応していません。 |
SFXSOAPServiceProxy クラスは、 WSDL 文書を使用して Web サービスにアクセスするためのクラスです。
具体的には、 SFXSOAPServiceProxy クラスは、 SFXXMLDOMParser クラスのパーサーを利用して WSDL 文書を解析し、動的に SOAP-RPC プロキシを生成して SFXSOAPRPC クラスを利用して Web サービスにアクセスします。
以下は、加減乗除を行う Web サービスを定義する WSDL 文書(ファイル名: "Arithmetic.wsdl")です。
注意 | |
---|---|
この 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; }
コンストラクタ/デストラクタ |
---|
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 文書を設定します。
|
[ public, explicit ] SFXSOAPServiceProxy(Void);
[ public, explicit ] SFXSOAPServiceProxy( SFXAnsiStringConstRef wsdl // WSDL 文書のパス名 );
[ public, explicit ] SFXSOAPServiceProxy( SFXAnsiStringConstRef wsdl // WSDL 文書のパス名 SFXAnsiStringConstRef service // サービス名 SFXAnsiStringConstRef port // ポート名 SFXAnsiStringConstRef method // メソッド名 );
このコンストラクタは、この WSDL 文書の処理を初期化します。
具体的には、内部のパーサー(SFXXMLDOMParser)について以下の処理を行います。
引数を指定する場合は、以下の設定も行います。
SFXXMLDOMParser::SetCreateCommentNodes | SFXSOAPServiceProxy::SetWSDLDocument | SFXSOAPRPC::SetMethodName | SFXXMLDOMParser
[ public ] ~SFXSOAPServiceProxy(Void);
[ public ] Void Cancel(Void);
[ public, const ] ACharConstPtr GetMethodName(Void);
この関数は、Web サービスのメソッド名を取得します。
[ public, const ] ACharConstPtr GetPortName(Void);
Web サービスのポート名
この関数は、Web サービスのポート名を取得します。
[ public, const ] const SFXSOAPRPC::LPPARAMETER GetResultValueByName( SFXAnsiStringConstRef name // パラメータ名 );
指定されたパラメータの戻り値(SFXSOAPRPC::LPPARAMETER)
この関数は、指定されたパラメータの戻り値を取得します。
前提条件 | |
---|---|
この関数は、SFXSOAPServiceProxy::Invoke 関数の後に呼び出す必要があります。 通常、SFXSOAPServiceProxy::SetNotifyHandler 関数で指定する Web サービス呼び出しの結果を取得するコールバック関数の中で使用されます。 |
[ public, const ] ParamsConstPtr GetResultValues(Void);
Web サービスのメソッドレスポンスのパラメータのリスト(SFXSOAPRPC::Params)
この関数は、Web サービスのメソッドレスポンスのパラメータのリストを取得します。
注意 | |
---|---|
この関数の戻り値は、 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
[ public, const ] ACharConstPtr GetServiceName(Void);
Web サービスのサービス名
この関数は、Web サービスのサービス名を取得します。
[ public, const ] UInt32 GetTrustMode(Void);
SSL 認証モード
この関数は、HTTPS 通信の SSL 認証モードを取得します。
以下の 4 種類の SSL 認証モードの何れかが返却されます。
[ public ] SFCError Invoke( NotifySPP spp = null // コールバック関数(デフォルト値: null) VoidPtr reference = null // コールバック関数に渡すデータ(デフォルト値: null) );
WSDL 文書に関するエラー値は以下になります。
詳細情報: 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 サービスの呼び出しが完了すると、引数に指定されたコールバック関数が呼び出されます。
注意 | |
---|---|
spp 引数(コールバック関数)と reference 引数(コールバック関数に渡すデータ)に null を指定して この関数を呼び出した場合、 あるいは、これらの引数を指定せずにこの関数を呼び出した場合、 SFXSOAPServiceProxy::SetNotifyHandler 関数で設定したコールバック関数が呼び出され、 このコールバック関数が SOAP-RPC の戻り値(SOAP レスポンス)を取得します。 |
注意 | |
---|---|
SFXSOAPServiceProxy::SetWSDLDocument / SFXSOAPServiceProxy::SetServiceName / SFXSOAPServiceProxy::SetPortName / SFXSOAPServiceProxy::SetMethodName 関数で WSDL 文書、サービス名、ポート名、メソッド名が設定されていない場合は、 SFERR_INVALID_PARAM エラーが返ります。 |
注意 | |
---|---|
この関数を呼び出してからコールバック関数の実行が完了するまでは、 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
[ public, const ] Bool IsConnecting(Void);
この関数は、Web サーバーに接続しているか判定します。
注意 | |
---|---|
SFXSOAPServiceProxy::Invoke 関数を呼び出してから SFXSOAPServiceProxy::SetNotifyHandler 関数に指定したコールバック関数の実行が完了するまでが Web サーバーに接続している状態になります。 SFXSOAPServiceProxy クラスでは、 内部的に SFXSOAPRPC クラスの SOAP-RPC を利用して Web サービスにアクセスします。 ※この関数は、内部的に SFXSOAPRPC::IsConnecting 関数を呼び出します。 |
[ public ] Void Reset(Void);
この関数は、すべての内部変数をリセットします。
具体的には、内部で使用するパーサーと SOAP-RPC をリセットし、 WSDL 文書の設定、Web サービスのサービス名、ポート名、メソッド名、メソッド属性、 パラメータ、パラメータ属性をクリアします。 SSL 認証モードもデフォルト値に再設定されます。
注意 | |
---|---|
この関数は、SFXSOAPServiceProxy::~SFXSOAPServiceProxy デストラクタから呼び出されます。 |
SFXSOAPServiceProxy::~SFXSOAPServiceProxy | SFXSOAPRPC::Reset | SFXXMLDOMParser::Reset | SFXSOAPServiceProxy::SetMethodName | SFXSOAPServiceProxy::SetMethodAttribute | SFXSOAPServiceProxy::SetPortName | SFXSOAPServiceProxy::SetServiceName | SFXSOAPServiceProxy::SetTrustMode | SFXSOAPServiceProxy::SetWSDLDocument
[ public ] SFCError SetMethodAttribute( SFXAnsiStringConstRef name // 属性名 SFXAnsiStringConstRef value // 属性の値 );
[ public ] Void SetMethodName( SFXAnsiStringConstRef method // メソッド名 );
SFXSOAPServiceProxy::Invoke | SFXSOAPServiceProxy::GetMethodName | SFXSOAPServiceProxy::Reset | SFXSOAPRPC::SetMethodName
[ public ] Void SetNotifyHandler( SFXSOAPRPC::NotifySPP spp // コールバック関数(デフォルト値: null) VoidPtr reference // コールバック関数に渡すデータ(デフォルト値: null) );
この関数は、SOAP-RPC の戻り値(SOAP レスポンス)を取得するためのコールバック関数とコールバック関数に渡すデータを設定します。
デフォルト値: null
前提条件 | |
---|---|
この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。 |
[ public ] SFCError SetParameterValue( SFXAnsiStringConstRef name // パラメータ名 SFXBufferConstRef value // パラメータの値 SFXPropertyConstRef attribute = SFXProperty::EmptyInstance() // 属性名と属性値のペアの集合(SFXProperty 型) );
パラメータ名を指定します。
パラメータの値を指定します。
属性名と属性値のペアの集合を SFXProperty インスタンスとして指定します。
[ public ] Void SetPortName( SFXAnsiStringConstRef port // ポート名 );
[ public ] Void SetServiceName( SFXAnsiStringConstRef service // Web サービス名 );
この関数は、HTTPS 通信の SSL 認証モードを設定します。
SOAP メッセージは、HTTP/HTTPS 通信によりクライアントとサーバー間でやり取りされます。 この関数は、HTTPS 通信を行う場合の SSL 認証モードを設定します。
デフォルト値: SSL_TRUST_MODE_FAIL
設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。
設定された値は、 SFXSOAPServiceProxy::Invoke 関数、または SFXSOAPServiceProxy::Cancel 関数が呼び出されるまで有効です。
前提条件 | |
---|---|
この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。 |
SFXSOAPServiceProxy::GetTrustMode | SFXSOAPServiceProxy::Invoke | SFXHTTPConnection::SetTrustMode | BREW API ISSL_NegotiateV
[ public ] SFCError SetWSDLDocument( SFXAnsiStringConstRef wsdl // WSDL 文書(文字列) );
[ public ] SFCError SetWSDLDocument( SFXPathConstRef wsdl // WSDL 文書(パス) );
この関数は、指定された WSDL 文書を設定します。
内部的には、 SFXXMLDOMParser::Parse 関数を呼び出して指定された WSDL 文書を解析し、 DOM ツリーに変換します。
前提条件 | |
---|---|
この関数は、SFXSOAPServiceProxy::Invoke 関数よりも先に呼び出す必要があります。 |
WSDL 文書の解析後、 static_exception::static_catch 関数により取得できる、その他のエラー値は以下の通りです。
詳細情報: SFCErrorEnum
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |