![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
#include <SFXSOAPParser.hpp>
class SFXSOAPParser : public SFXXMLDOMParser;
SFMTYPEDEFCLASS(SFXSOAPParser)


SFXXMLDOMParser クラスを継承する SFXSOAPParser クラスは、DOM 方式で SOAP メッセージを解析します。
![]() |
Simple Object Access Protocol ( SOAP ) の仕様 |
|---|---|
|
W3C SOAP 最新情報 : Latest SOAP versions ( SOAP 1.1 と SOAP 1.2 をサポートしています。) ※ SOAP Attachment は実装されていません。また、SOAP Fault は SOAP 1.1 だけをサポートします。 | |
例 735. 解析対象の SOAP メッセージ ( "soapmessage.xml" )
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >
<env:Header>
<SubscriptionInfo xmlns="http://schemas.xmlsoap.org">
<LicenseStatusCode>0</LicenseStatusCode>
<LicenseStatus>Valid license key</LicenseStatus>
<LicenseActionCode>0</LicenseActionCode>
<LicenseAction>Decremented hit count</LicenseAction>
<RemainingHits>18</RemainingHits>
<Amount>0</Amount>
</SubscriptionInfo>
</env:Header>
<env:Body>
<m:GetLastTradePriceResponse
env:encodingStyle="http://www.w3.org/2003/05/soap-envelope"
xmlns:m="http://example.org/2001/06/quotes">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
<m:GetLastTradePriceResponse
env:encodingStyle="http://www.w3.org/2003/05/soap-envelope"
xmlns:m="http://example.org/2006/06/quotes">
<Price>56.5</Price>
</m:GetLastTradePriceResponse>
</env:Body>
</env:Envelope>
例 736. SOAP メッセージの解析
SFXSOAPParser soapparser; // SOAP パーサー // "soapmessage.xml" ファイルから SOAP メッセージを読み込み、解析する if (soapparser.Parse("soapmessage.xml") != SFERR_NO_ERROR) { // エラー値を表示する TRACE("error id = 0x%x", soapparser.static_catch()); // エラー メッセージを表示する TRACE(soapparser.GetErrorInfo()); } else { // SOAP メッセージ解析完了後の処理 // SOAP メッセージのバージョンを表示する TRACE("soap version : %d", soapparser.GetSoapVersion()); // "soap version : 1" が表示される(SFXSOAPParser::SOAP_VERSION_1_2 なので) // Envelope 要素を取得する SFXXMLElementPtr envelope = soapparser.GetEnvelope(); // Envelope 要素の名前空間を表示する TRACE("envelope version : %s", envelope->GetNamespaceURI()); // "envelope version: http://www.w3.org/2003/05/soap-envelope" が表示される // Header 要素を取得する SFXXMLElementPtr header = soapparser.GetHeader(); // Header 要素の名前空間を表示する TRACE("header version : %s", header->GetNamespaceURI()); // "header version: http://www.w3.org/2003/05/soap-envelope" が表示される // Header 要素のすべての子要素を取得する SFXXMLNode::DOMNodeListPtr list = soapparser.GetHeaderEntries(); // 要素数を表示する TRACE("entry number : %d", list->GetSize()); // "entry number : 1" が表示される(SFXSOAPParser::SOAP_VERSION_1_2) // Header 要素に含まれる "SubscriptionInfo" 要素を取得する SFXXMLElementPtr entry = soapparser.GetHeaderEntry("SubscriptionInfo", "http://schemas.xmlsoap.org"); // "SubscriptionInfo" 要素のすべての子要素を取得する list = entry->GetChildNodes(); // 列挙子を取得する SFXXMLNode::DOMNodeList::Enumerator childEtor = list->GetFirstEnumerator(); while (childEtor.HasNext()) { SFXXMLElementPtr current = static_cast<SFXXMLElementPtr>(childEtor.GetNext()); // 各要素の名前を表示する TRACE("current element name : %s", current->GetName()); // "current element name : LicenseStatusCode" などが表示される // 各要素のテキストを表示する TRACE("current element content : %s", current->GetText().GetCString()); // "current element content : 0" などが表示される } // Body 要素を取得する SFXXMLElementPtr body = soapparser.GetBody(); // Body 要素の名前空間を表示する TRACE("body version : %s", body->GetNamespaceURI()); // "body version : http://www.w3.org/2003/05/soap-envelope" が表示される // Body 要素のすべての子要素を取得する list = soapparser.GetBodyEntries(); // 要素数を表示する TRACE("entry number: %d", list->GetSize()); // "2" が表示される // 列挙子を取得する childEtor = list->GetFirstEnumerator(); while (childEtor.HasNext()) { SFXXMLElementPtr current = static_cast<SFXXMLElementPtr>(childEtor.GetNext()); // 各要素内容を表示する TRACE("current element name : %s", current->GetLocalName()); // "current element name : GetLastTradePriceResponse" などが表示される // 各要素の名前空間を表示する TRACE("current element namespace : %s", current->GetNamespaceURI()); // "current element namespace : http://example.org/2001/06/quotes" などが表示される // 各要素のテキスト(価格)を表示する TRACE("price : %s", current->GetText().GetCString()); // "price : 34.5" などが表示される } }
| コンストラクタ/デストラクタ |
|---|
|
SFXSOAPParser( Void ) SFXSOAPParser クラスのコンストラクタです。
|
|
~SFXSOAPParser( Void ) SFXSOAPParser クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| SFXXMLElementPtr |
GetBody( Void ) SOAP メッセージの Body 要素を取得します。
|
| SFXXMLNode::DOMNodeListPtr |
GetBodyEntries( Void ) SOAP メッセージの Body 要素に含まれるすべての子要素を取得します。
|
| SFXXMLElementPtr |
GetBodyEntry(
SFXAnsiStringConstRef local
, SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance()
) SOAP メッセージの Body 要素の中で、指定した要素を取得します。
|
| SFXXMLElementPtr |
GetEnvelope( Void ) SOAP メッセージの Envelope 要素を取得します。
|
| SFXXMLElementPtr |
GetFault( Void ) SOAP メッセージの Fault 要素を取得します。
|
| SFXXMLElementPtr |
GetFaultActor( Void ) SOAP Fault 要素の faultactor 要素を取得します。
|
| SFXXMLElementPtr |
GetFaultCode( Void ) SOAP Fault 要素の faultcode 要素を取得します。
|
| SFXXMLElementPtr |
GetFaultDetail( Void ) SOAP Fault 要素の detail 要素を取得します。
|
| SFXXMLElementPtr |
GetFaultString( Void ) SOAP Fault 要素の faultstring 要素を取得します。
|
| SFXXMLElementPtr |
GetHeader( Void ) SOAP メッセージの Header 要素を取得します。
|
| SFXXMLNode::DOMNodeListPtr |
GetHeaderEntries( Void ) SOAP メッセージの Header 要素に含まれるすべての子要素を取得します。
|
| SFXXMLElementPtr |
GetHeaderEntry(
SFXAnsiStringConstRef local
, SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance()
) SOAP メッセージの Header 要素の中で、指定した要素を取得します。
|
| SFXXMLElementPtr |
GetRPCParameter(
SFXAnsiStringConstRef local
, SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance()
) SOAP メッセージの Body 要素の中で、指定したパラメーターと一致する要素を取得します。
|
| SFXXMLElementPtr |
GetRPCResult( Void ) SOAP メッセージの Body 要素の第 1 子要素の第 1 子要素を取得します。
|
| SFXXMLElementPtr |
GetRPCStruct( Void ) SOAP メッセージの Body 要素の第 1 子要素を取得します。
|
| SOAP_VERSION |
GetSoapVersion( Void ) SOAP メッセージのバージョンを取得します。
|
| SFCError |
Parse(
SFBFileSmpConstRef source
) Parse( SFXStreamReaderConstRef source ) Parse( SFXPathConstRef source ) Parse( SFXAnsiStringConstRef source ) SOAP メッセージを読み込み、DOM パーサーを使って解析します。
|
| Void |
Reset( Void ) すべての内部変数をリセットします。
|
| Bool |
GetCreateCommentNodes( Void )
(SFXXMLDOMParser から継承)
Comment ノードを生成するかどうかを取得します。
|
| Bool |
GetDoIndent( Void )
(SFXXMLDOMParser から継承)
文書をインデントするかどうかを取得します。
|
| Bool |
GetDoNamespaces( Void )
(SFXXMLDOMParser から継承)
名前空間を処理するかどうかを取得します。
|
| Bool |
GetDoSchema( Void )
(SFXXMLDOMParser から継承)
スキーマを処理するかどうかを取得します。
|
| SFXXMLDocumentPtr |
GetDocument( Void )
(SFXXMLDOMParser から継承)
Document ノードを取得します。
|
| ACharConstPtr |
GetErrorInfo( Void )
(SFXXMLDOMParser から継承)
内部で起こったエラー メッセージを取得します。
|
| static SFXXMLElementPtr |
GetFirstChildElement(
SFXXMLNodeConstPtr parent
)
(SFXXMLDOMParser から継承)
指定したノードの最初の子 Element ノードを取得します。
|
| static SFXXMLElementPtr |
GetFirstChildElementNS(
SFXXMLNodeConstPtr parent
, SFXAnsiStringHandleConst elemNames
, SFXAnsiStringConstRef uri
, SInt32 length
)
(SFXXMLDOMParser から継承)
指定したノードの最初の子 Element ノードを取得します。その Element ノードは、指定した名前空間 URI および要素のローカル名(複数指定可能)と一致する必要があります。
|
| Bool |
GetIgnoreAnnotations( Void )
(SFXXMLDOMParser から継承)
スキーマ付き XML 文書の Annotation 要素を無効にするかどうかを取得します。
|
| Bool |
GetLoadExternalDTD( Void )
(SFXXMLDOMParser から継承)
外部 DTD ファイルをロードするかどうかを取得します。
|
| static SFXXMLElementPtr |
GetNextSiblingElement(
SFXXMLNodeConstPtr node
)
(SFXXMLDOMParser から継承)
指定したノードの次の兄弟 Element ノードを取得します。
|
| static SFXXMLElementPtr |
GetNextSiblingElementNS(
SFXXMLNodeConstPtr node
, SFXAnsiStringHandleConst elemNames
, SFXAnsiStringConstRef uri
, SInt32 length
)
(SFXXMLDOMParser から継承)
指定したノードの次の兄弟 Element ノードを取得します。その Element ノードは、指定した名前空間 URI および要素のローカル名(複数指定可能)と一致する必要があります。
|
| Bool |
GetStandalone( Void )
(SFXXMLDOMParser から継承)
Standalone 宣言を取得します。
|
| Bool |
GetValidationDTD( Void )
(SFXXMLDOMParser から継承)
DTD で検証するかどうかを取得します。
|
| Bool |
GetValidationSchema( Void )
(SFXXMLDOMParser から継承)
スキーマで検証するかどうかを取得します。
|
| Void |
SetCreateCommentNodes(
BoolConst create
)
(SFXXMLDOMParser から継承)
Comment ノードを生成するかどうかを設定します。
|
| Void |
SetDoIndent(
BoolConst state
)
(SFXXMLDOMParser から継承)
文書をインデントするかどうかを設定します。
|
| Void |
SetDoNamespaces(
BoolConst state
)
(SFXXMLDOMParser から継承)
名前空間を処理するかどうかを設定します。
|
| Void |
SetDoSchema(
BoolConst state
)
(SFXXMLDOMParser から継承)
スキーマを処理するかどうかを設定します。
|
| Void |
SetGrammar(
SFXXMLGrammar::GrammarType grammar
)
(SFXXMLDOMParser から継承)
SetGrammar( SFXXMLGrammar::GrammarType grammar ) (SFXXMLDOMParser から継承) パーサーが使う文法を設定します。
|
| Void |
SetIgnoreAnnotations(
BoolConst state
)
(SFXXMLDOMParser から継承)
Annotation 要素を無効にするかどうかを設定します
|
| Void |
SetLoadExternalDTD(
BoolConst state
)
(SFXXMLDOMParser から継承)
外部 DTD ファイルをロードするかどうかを設定します。
|
| Void |
SetSchemaLocation(
SFXAnsiStringConstRef name
)
(SFXXMLDOMParser から継承)
XSD ファイルを設定します。
|
| Void |
SetValidationDTD(
BoolConst state
)
(SFXXMLDOMParser から継承)
DTD で検証するかどうかを設定します。
|
| Void |
SetValidationSchema(
BoolConst state
)
(SFXXMLDOMParser から継承)
スキーマで検証するかどうかを設定します。
|
| プロテクト関数 | |
|---|---|
| Void |
SetGrammar(
SFXXMLGrammar::GrammarType grammar
)
(SFXXMLDOMParser から継承)
SetGrammar( SFXXMLGrammar::GrammarType grammar ) (SFXXMLDOMParser から継承) パーサーが使う文法を設定します。
|
| 型 |
|---|
|
SOAP_VERSION SOAP プロトコルのバージョンです。
|
[ public, explicit ] SFXSOAPParser(Void);
[ public ] ~SFXSOAPParser(Void);
[ public, const ] SFXXMLElementPtr GetBody(Void);
[ public, const ] SFXXMLNode::DOMNodeListPtr GetBodyEntries(Void);
SOAP メッセージの Body 要素に含まれる、すべての子要素を SFXXMLNode::DOMNodeList へのポインターとして返します。子要素がないときは null を返します。
[ public, const ] SFXXMLElementPtr GetBodyEntry( SFXAnsiStringConstRef local // 要素の名前 SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance() // 要素の名前空間 URI );
解析対象の XML 文書は SFXSOAPParser クラスの説明で記述されているものです。
SFXSOAPParser soapparser; // SOAP パーサー // GetBodyEntry() 関数で最新の価格を取得する // ここの要素ポインターは 1 番目の "GetLastTradePriceResponse" 要素を指す SFXXMLElementPtr price = soapparser.GetBodyEntry("GetLastTradePriceResponse", "http://example.org/2006/06/quotes"); // 価格を表示する /// price : 56.5 TRACE("price : %s", price->GetText().GetCString());
[ public, const ] SFXXMLElementPtr GetEnvelope(Void);
[ public, const ] SFXXMLElementPtr GetFault(Void);
SOAP Fault 要素には、SOAP リクエスト処理中に発生したエラーの内容が返されます。Fault 要素は Body 要素中にひとつだけ存在します。
SOAP Fault 要素は、faultactor 要素、faultcode 要素、faultstring 要素、detail 要素から構成されます。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
SFXSOAPRPC::FAULT | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultDetail | SFXSOAPParser::GetFaultString
[ public, const ] SFXXMLElementPtr GetFaultActor(Void);
faultactor 要素には、エラーの発生元 ( URI ) が返されます。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultDetail | SFXSOAPParser::GetFaultString
[ public, const ] SFXXMLElementPtr GetFaultCode(Void);
faultactor 要素には、SOAP Fault code が返されます。 SOAP Fault code は、SOAP レスポンスを受け取ったアプリが SOAP リクエスト中に発生したエラー内容を判断するためのコードです。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultDetail | SFXSOAPParser::GetFaultString
[ public, const ] SFXXMLElementPtr GetFaultDetail(Void);
detai 要素には、エラーの内容が返されます。faultstring 要素と違うのは、アプリで処理するためのエラー メッセージとして返される点です。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultString
[ public, const ] SFXXMLElementPtr GetFaultString(Void);
faultstring 要素には、エラーの内容が返されます。detail 要素と違うのは、人間が理解できるエラー メッセージとして返される点です。
![]() |
SOAP Fault について |
|---|---|
|
Simple Object Access Protocol (SOAP) 1.1 ( W3C ) : SOAP Fault SOAP Tutorial : SOAP Fault Element | |
※ SOAP Fault は SOAP 1.1 だけをサポートします。
SFXSOAPParser::GetFault | SFXSOAPParser::GetFaultActor | SFXSOAPParser::GetFaultCode | SFXSOAPParser::GetFaultDetail
[ public, const ] SFXXMLElementPtr GetHeader(Void);
[ public, const ] SFXXMLNode::DOMNodeListPtr GetHeaderEntries(Void);
SOAP メッセージの Header 要素に含まれる、すべての子要素を SFXXMLNode::DOMNodeList へのポインターとして返します。子要素がないときは null を返します。
[ public, const ] SFXXMLElementPtr GetHeaderEntry( SFXAnsiStringConstRef local // 要素の名前 SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance() // 要素の名前空間 URI );
[ public, const ] SFXXMLElementPtr GetRPCParameter( SFXAnsiStringConstRef local // 要素の名前 SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance() // 要素の名前空間 URI );
解析対象の XML 文書は SFXSOAPParser クラスの説明で記述されているものです。
SFXSOAPParser soapparser; // SOAP パーサー // GetRPCParameter() 関数で 2001 年の価格を取得する // ここの要素ポインターは 1 番目の "GetLastTradePriceResponse" 要素の 1 番目の子要素 "Price" を指す SFXXMLElementPtr price = soapparser.GetRPCParameter("Price", "http://example.org/2001/06/quotes"); // 価格を表示する // price : 34.5 TRACE("price : %s",price->GetText().GetCString());
[ public, const ] SFXXMLElementPtr GetRPCResult(Void);
解析対象の XML 文書は SFXSOAPParser クラスの説明で記述されているものです。
SFXSOAPParser soapparser;// SOAP パーサー // Body 要素の第 1 子要素 "Price" を取得する price = soapparser.GetRPCResult(); // 価格を表示する // price : 34.5 TRACE("price : %s",price->GetText().GetCString());
[ public, const ] SFXXMLElementPtr GetRPCStruct(Void);
解析対象の XML 文書は SFXSOAPParser クラスの説明で記述されているものです。
SFXSOAPParser soapparser; // SOAP パーサー // Body 要素の第 1 子要素 "Price" を取得する SFXXMLElementPtr elem = soapparser.GetRPCStruct(); // 価格を表示する // price : 34.5 TRACE("price : %s",price->GetText().GetCString());
[ public, const ] SOAP_VERSION GetSoapVersion(Void);
SOAP メッセージのバージョンを取得します。
| 整数値 | 定義されている定数 |
|---|---|
| 0 | SOAP_VERSION_1_1 |
| 1 | SOAP_VERSION_1_2 |
| -1 | SOAP_VERSION_UNKNOWN |
[ public ] SFCError Parse( SFBFileSmpConstRef source // 解析する XML のファイル インターフェース );
[ public ] SFCError Parse( SFXAnsiStringConstRef source // 解析する XML 文書 );
[ public ] SFCError Parse( SFXPathConstRef source // 解析する XML ファイル名 );
[ public ] SFCError Parse( SFXStreamReaderConstRef source // 入力ストリーム );
SOAP メッセージの解析結果のエラーコードは以下の通りです。
DTD 付き SOAP メッセージの解析結果のエラーコードは以下の通りです。
スキーマ付き SOAP メッセージの解析結果のエラーコードは以下の通りです。
詳細情報: SFCErrorEnum
SOAP メッセージ ( ファイル、ストリーム、文字列 ) を読み込み、解析する関数です。引数には入力ストリーム、ファイルパス、文字列を渡します。 ファイル パスのデフォルト ディレクトリはアプリのホーム ディレクトリです。
[ public ] Void Reset(Void);
SOAP_VERSION_1_1 // バージョン 1.1 SOAP_VERSION_1_2 // バージョン 1.2
SOAP プロトコルのバージョンです。SFXSOAP クラスはバージョン 1.1 と 1.2 をサポートしています。ただし、SOAP Attachment は未実装です。
| 定数 | 名前空間 |
|---|---|
| SOAP_VERSION_1_1 | "http://schemas.xmlsoap.org/soap/envelope/" |
| SOAP_VERSION_1_2 | "http://www.w3.org/2003/05/soap-envelope" |
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|