前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXSOAPWriter
SOAP メッセージを作成するクラスです。
#include <SFXSOAPWriter.hpp>
class SFXSOAPWriter : public static_exception< SFCError >;
SFMTYPEDEFCLASS(SFXSOAPWriter)

継承図

SFXSOAPWriter クラスの継承図

協調図

SFXSOAPWriter クラスの協調図

解説

SFXSOAPWriter クラスは、 SOAP メッセージ(SOAP Envelope)を作成するためのクラスです。

[Note] SOAP メッセージ(SOAP Envelope)について

SOAP によるオブジェクト間通信でやり取りされるデータ(SOAP メッセージ)は、 プロトコルバインディングヘッダーと SOAP Envelope から構成されます。

図 280. SOAP メッセージの構造

SOAP メッセージの構造

プロトコルバインディングヘッダーには、実装するプロトコル毎に定められているヘッダー情報が記述されます。

SOAP Envelope は、 Envelope 要素(<SOAP-ENV:Envelope>)をルート要素(最上位要素)とする XML 文書のことで、 SOAP Header と SOAP Body から構成されます。 SOAP Header と SOAP Body の最上位要素はそれぞれ <SOAP-ENV:Header> と <SOAP-ENV:Body> になります。 つまり、Envelope 要素は、Header 要素(SOAP Header)と Body 要素(SOAP Body)を子要素に持ちます。

SOAP Header には、SOAP メッセージの受信者が SOAP Body に記述された情報をどのサーバーに渡し、 どのように処理するかといった情報が記述されます。SOAP Header は、SOAP Envelope に無くても構いません。

SOAP Body には、実際のメッセージが記され、SOAP Envelope には必須です。 例えば、SOAP-RPC の場合、この部分には Web サービスのメソッド名やパラメータ情報が記述されます。

[Note] 関数呼び出しの順序

このクラスを使用して SOAP メッセージを作成するとき、 SFXSOAPWriter::SetBody / SFXSOAPWriter::SetEnvelope / SFXSOAPWriter::SetFault / SFXSOAPWriter::SetFaultDetail などの関数呼び出しの順序は任意です。

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

W3C SOAP 最新情報 : SOAP Version 1.2 Part 0: Primer (Second Edition) ( SOAP 1.1 と SOAP 1.2 をサポートしています。)

※ SOAP Attachment は実装されていません。また、SOAP Fault は SOAP 1.1 だけをサポートします。

例 849. SOAP メッセージの作成

SFXSOAPWriter soapwriter;   // SOAP メッセージの各要素を生成するオブジェクト
SFCError      error;        // エラー値を保存する変数

// Envelope 要素を作成する
// 名前空間接頭辞: デフォルトは "SOAP-ENV"
// SOAP バージョン: SFXSOAPParser::SOAP_VERSION_1_2 の場合、"http://www.w3.org/2003/05/soap-envelope"
//                  SFXSOAPParser::SOAP_VERSION_1_1 の場合、"http://schemas.xmlsoap.org/soap/envelope/" 
// SOAP エンコーディング:  "STANDARD" の場合、"http://schemas.xmlsoap.org/soap/encoding/"
//                         "NONE" の場合、SOAP エンコーディングは何も指定しない
SFXXMLElementPtr envelope = soapwriter.SetEnvelope("env", SFXSOAPParser::SOAP_VERSION_1_2, "STANDARD");


// Header 要素と Body 要素を作成する
if (envelope) {

    // xmlns:m= "http://www.example.org/timeouts" 名前空間を追加する
    error = soapwriter.AddNamespace(envelope, "m", "http://www.example.org/timeouts");
    // 名前空間が追加されているか確認する
    if(error != SFERR_NO_ERROR){
         TRACE("-----Envelope_NAMESPACE_ERROR:%d-----", error);
    }
    // faultcode、faultstring、および faultactor 要素から構成される SOAP Fault 要素を設定する(デフォルトでは Body 要素の子要素となる)
    soapwriter.SetFault("testing-fault-code","testing-fault-string","testing-fault-actor");

    // SOAP Fault 要素に detail 要素を設定する
    soapwriter.SetFaultDetail("STANDARD")->SetText("testing-fault-detail-message");

    // Header 要素を設定する
    SFXXMLElementPtr header = soapwriter.SetHeader();

    if (header) {
        // isbn:bookname="ワールドカップサッカー" 属性を追加する
        error = soapwriter.AddAttribute(header, "bookname", "http://www.example.com/ISBN", "ワールドカップサッカー", "isbn");
        // 属性が追加されているか確認する
        if(error != SFERR_NO_ERROR){
            TRACE("-----HEADER_ATTRIBUTE_ERROR:%d-----", error);
        }
           
        // xmlns:isbn="http://www.example.com/ISBN" 名前空間を追加する
        error = soapwriter.AddNamespace(header, "isbn", "http://www.example.com/ISBN");
        // 名前空間が追加されているか確認する
        if(error != SFERR_NO_ERROR){
            TRACE("-----HEADER_NAMESPACE_ERROR:%d-----", error);
        }

        // Header 要素に子要素 Upgrade を追加する
        // Upgrade 要素の名前空間は Header 要素と同じものに設定する
        SFXXMLElementPtr elem = soapwriter.SetElement(header, "Upgrade", header->GetNamespaceURI(), header->GetPrefix());

        if (elem) {
            // Upgrade 要素に子要素 SupportedEnvelope を設定する
            elem = soapwriter.SetElement(elem, "SupportedEnvelope", header->GetNamespaceURI(), header->GetPrefix());

            // SupportedEnvelope 要素の属性を追加する
            error = soapwriter.AddAttribute(elem, "qname", "http://schemas.xmlsoap.org/soap/envelope/", "ns1:Envelope");
            // 属性が追加されているか確認する
            if(error != SFERR_NO_ERROR){
                TRACE("-----UPGRADE_ATTRIBUTE_ERROR:%d-----", error);
            }
                
            // SupportedEnvelope 要素の名前空間を追加する
            error = soapwriter.AddNamespace(elem, "ns1", "http://schemas.xmlsoap.org/soap/envelope/");   
            // 名前空間が追加されているか確認する
            if(error != SFERR_NO_ERROR){
                TRACE("-----UPGRADE_NAMESPACE_ERROR:%d-----", error);
            }
        }
    }

    // 作成した SOAP メッセージを保存する
    error = soapwriter.Save("soapwriter.xml");

    // 保存されているか確認する
    if(error != SFERR_NO_ERROR){
        TRACE("-----SOAP_SAVE_ERROR:%d-----", error);
    }

}

例 850. 作成した SOAP メッセージ( soapwriter.xml )

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
              env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
              xmlns:m="http://www.example.org/timeouts">
    <env:Header isbn:bookname="ワールドカップサッカー" xmlns:isbn="http://www.example.com/ISBN">
        <env:Upgrade>
            <env:SupportedEnvelope qname="ns1:Envelope" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"/>
        </env:Upgrade>
    </env:Header>
    <env:Body>
        <env:Fault>
            <faultcode>testing-fault-code</faultcode>
            <faultstring>testing-fault-string</faultstring>
            <faultactor>testing-fault-actor</faultactor>
            <detail env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">testing-fault-detail-message</detail>
        </env:Fault>
    </env:Body>
</env:Envelope>

参照

SFXSOAPParser

メンバ

コンストラクタ/デストラクタ
SFXSOAPWriter( Void )
SFXSOAPWriter クラスのコンストラクタです。
~SFXSOAPWriter( Void )
SFXSOAPWriter クラスのデストラクタです。
パブリック関数
SFCError AddAttribute( SFXXMLElementPtr element , SFXAnsiStringConstRef name , SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance() , SFXAnsiStringConstRef value = SFXAnsiString::EmptyInstance() , SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance() )
要素に属性を追加します。
SFCError AddNamespace( SFXXMLElementPtr element , SFXAnsiStringConstRef prefix , SFXAnsiStringConstRef uri )
要素に名前空間を追加します。
Void Reset( Void )
すべての内部変数をリセットします。
SFCError Save( SFXAnsiStringConstRef output , Bool indent = true )
SOAP メッセージを保存します。
SFCError Save( SFXOutputStreamRef output , Bool indent = true )
SOAP メッセージを保存します。
SFCError Save( SFXPathConstRef output , Bool indent = true )
SOAP メッセージを保存します。
SFXXMLElementPtr SetBody( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージの Body 要素(SOAP Body)を設定します。
SFXXMLElementPtr SetElement( SFXXMLElementPtr parent , SFXAnsiStringConstRef name , SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance() , SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance() , SFXAnsiStringConstRef text = SFXAnsiString::EmptyInstance() , SFXAnsiStringConstRef encodingstyle = "NONE" )
要素に子要素を設定します。
SFXXMLElementPtr SetEnvelope( SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance() , SFXSOAPParser::SOAP_VERSION version = SFXSOAPParser::SOAP_VERSION_1_1 , SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージの Envelope 要素(SOAP Envelope)を設定します。
SFXXMLElementPtr SetFault( SFXAnsiStringConstRef faultcode , SFXAnsiStringConstRef faultstring , SFXAnsiStringConstRef faultactor = SFXAnsiString::EmptyInstance() )
SOAP メッセージの Fault 要素(SOAP Fault)を設定します。
SFXXMLElementPtr SetFaultDetail( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージの Fault 要素(SOAP Fault)の子要素として detail 要素を設定します。
SFXXMLElementPtr SetHeader( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージの Header 要素(SOAP Header)を設定します。

SFXSOAPWriter::SFXSOAPWriter
SFXSOAPWriter クラスのコンストラクタです。
[ public, explicit ]
SFXSOAPWriter(Void);

解説

このコンストラクタは、内部変数(Envelope / Header / Body / Envelope 要素)を null に初期化します。


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

解説

このデストラクタは、何も行いません。


SFXSOAPWriter::AddAttribute
要素に属性を追加します。
[ public ]
SFCError AddAttribute(
    SFXXMLElementPtr element                                        // 要素
    SFXAnsiStringConstRef name                                      // 属性のローカル名
    SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance()      // 属性の名前空間 URI
    SFXAnsiStringConstRef value = SFXAnsiString::EmptyInstance()    // 属性の値
    SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()   // 属性の名前空間接頭辞
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • element 引数または name 引数が null であるとき: SFERR_INVALID_PARAM
  • メモリ不足のとき: SFERR_NO_MEMORY
  • Envelope 要素がないとき: SFERR_SOAP_EXPECT_ENVELOPE(0x699F)

解説

この関数は、指定された要素に指定された属性を追加します。

参照

SFXXMLDocument::CreateAttributeNS | SFXXMLElement::SetAttributeNode


SFXSOAPWriter::AddNamespace
要素に名前空間を追加します。
[ public ]
SFCError AddNamespace(
    SFXXMLElementPtr element       // 要素
    SFXAnsiStringConstRef prefix   // 名前空間接頭辞
    SFXAnsiStringConstRef uri      // 名前空間 URI
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • element 引数が null であるとき: SFERR_INVALID_PARAM
  • Envelope 要素がないとき: SFERR_SOAP_EXPECT_ENVELOPE(0x699F)

解説

この関数は、指定された要素に指定された名前空間(名前空間接頭辞と名前空間 URI)を追加します。

[Note] 注意

この関数は、指定された要素(Element ノード)に属性名が名前空間接頭辞、 属性値が名前空間 URI である属性(Attribute ノード)を追加します。

属性名の名前空間接頭辞は、prefix 引数に指定された文字列が空の場合は "xmlns"、 そうでない場合は "xmlns:(prefix 引数に指定された文字列)" にそれぞれ内部的に変換されます。

参照

SFXXMLDocument::CreateAttributeNS | SFXXMLElement::SetAttributeNode


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

解説

この関数は、 この SOAP メッセージ(Document ノード)からすべての子要素(子ノード)を削除し、 内部変数(Envelope / Header / Body / Envelope 要素)を null に初期化(リセット)します。

参照

SFXSOAPWriter::SFXSOAPWriter


SFXSOAPWriter::Save
SOAP メッセージを保存します。
[ public ]
SFCError Save(
    SFXAnsiStringConstRef output   // ファイル名
    Bool indent = true             // インデントするかどうか
);
[ public ]
SFCError Save(
    SFXOutputStreamRef output   // ストリーム
    Bool indent = true          // インデントするかどうか
);
[ public ]
SFCError Save(
    SFXPathConstRef output   // ファイルパス
    Bool indent = true       // インデントするかどうか
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • ファイルが既に開いているとき: SFERR_INVALID_STATE
  • 引数がディレクトリであるとき: SFERR_INVALID_PARAM
  • Envelope 要素がないとき: SFERR_SOAP_EXPECT_ENVELOPE( 0x699F )
  • Body 要素がないとき: SFERR_SOAP_EXPECT_BODY( 0x69A0 )
  • その他: BREW API IFILEMGR_GetLastError 関数が返すエラー、またはSFERR_FAILED

解説

この関数は、SOAP メッセージ(DOM ツリー)を指定されたファイルやストリームに保存します。

DOM ツリーは、ノード毎に改行して書き込まれます。

indent 引数を true(デフォルト)に指定すると、 DOM ツリーの各ノードはツリー上のレベルに応じて(ツリーのレベル)× 2 のスペースでインデントして書き込まれます。 false を指定すると、インデントは行われません。

ファイルパスのデフォルトのディレクトリは、 アプリのホームディレクトリです。

参照

SFXFile::OpenReadWrite | BREW API IFILEMGR_GetLastError


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

引数

encodingstyle

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

戻り値

Body 要素(Element ノード)

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

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

解説

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

SOAP Body は、SOAP メッセージの Envelope 要素(SOAP Envelope)の子要素です。 SOAP Envelope の子要素に Header 要素(SOAP Header)が存在する場合、 SOAP Body は SOAP Header の後に追加されます。

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

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. SOAP Envelope がない場合、 SFXSOAPWriter::SetEnvelope 関数を呼び出してデフォルトの設定で Envelope 要素(Element ノード)を作成します。
  2. SOAP Body がない場合、 SFXXMLDocument::CreateElement 関数を呼び出して "(Envelope 要素の名前空間接頭辞):Body" の名前を持つ Body 要素(Element ノード)を作成します。
  3. SFXXMLElement::SetAttribute 関数を呼び出して、 Body 要素(Element ノード)に "(Envelope 要素の名前空間接頭辞):encodingStyle" という属性名と、 encodingstyle 引数に指定された SOAP エンコーディングを属性値に持つ属性を追加します("NONE" が指定された場合、属性は追加されません。 また、"STANDARD" が指定された場合は、"http://schemas.xmlsoap.org/soap/encoding/" が属性値になります)。
  4. SFXXMLElement::AppendChild 関数を呼び出して Body 要素(Element ノード)を Envelope 要素(Element ノード)の子要素(子ノード)として追加します。 SOAP メッセージの Header 要素(SOAP Header)が既に存在する場合は、Header 要素の後に追加されます。
  5. 戻り値として Body 要素(Element ノード)を返します。
[Caution] 注意

SOAP Envelope が存在しない場合、 デフォルトの SOAP Envelope が作成され変更することはできないので、 特定の設定を SOAP Envelope に行いたい場合は、 この関数を呼び出す前に SFXSOAPWriter::SetEnvelope 関数を呼び出す必要があります。

この関数を呼び出す前に SOAP Body が既に存在する場合は、 設定は何も行われず、既存の SOAP Body(Element ノード)を返すだけです。

参照

SFXSOAPWriter::SetEnvelope | SFXSOAPWriter::SetHeader | SFXXMLDocument::CreateElement | SFXXMLElement::SetAttribute


SFXSOAPWriter::SetElement
要素に子要素を設定します。
[ public ]
SFXXMLElementPtr SetElement(
    SFXXMLElementPtr parent                                         // 親要素
    SFXAnsiStringConstRef name                                      // 子要素のローカル名
    SFXAnsiStringConstRef uri = SFXAnsiString::EmptyInstance()      // 子要素の名前空間 URI
    SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()   // 子要素の名前空間接頭辞
    SFXAnsiStringConstRef text = SFXAnsiString::EmptyInstance()     // 子要素のテキスト内容
    SFXAnsiStringConstRef encodingstyle = "NONE"                    // 子要素の SOAP エンコーディングの値
);

引数

parent

親要素を指定します。

name

子要素のローカル名を指定します。

uri

子要素の名前空間 URI を指定します(デフォルト値: 空文字列)。

prefix

子要素の名前空間接頭辞を指定します(デフォルト値: 空文字列)。

text

子要素のテキスト内容を指定します(デフォルト値: 空文字列)。

encodingstyle

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

戻り値

子要素(Element ノード)

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

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • parent 引数が null、または name 引数が null のとき: SFERR_INVALID_PARAM
  • Envelope 要素が存在しないとき: SFERR_SOAP_EXPECT_ENVELOPE(0x699F)

解説

この関数は、parent 引数に指定された親要素にその他の引数に指定された内容を持つ子要素を設定します。

[Tip] Tip

この関数を使用して、SOAP Header や SOAP Body の子孫要素を作成します。

子要素の内容として指定する引数は以下の通りです。

引数名 内容 デフォルト値
name 子要素のローカル名
uri 子要素の名前空間 URI 空文字列
prefix 子要素の名前空間接頭辞 空文字列
text 子要素のテキスト内容 空文字列
encodingstyle 子要素の SOAP エンコーディングの値 "NONE"

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

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. name / uri / prefix / text / encodingstyle 引数に指定された、 ローカル名 / 名前空間 URI / 名前空間接頭辞 / テキスト内容 / SOAP エンコーディングの値を持つ子要素(Element ノード)を作成します。
  2. SOAP エンコーディングは、 "名前空間接頭辞:encodingStyle" という属性名と、 encodingstyle 引数に指定された SOAP エンコーディングを属性値に持つ属性を追加します("NONE" が指定された場合、属性は追加されません。 また、"STANDARD" が指定された場合は、"http://schemas.xmlsoap.org/soap/encoding/" が属性値になります)。 属性は、SFXXMLElement::SetAttribute 関数を呼び出して設定されます。
  3. uri 引数が空文字列の場合は、名前空間の処理は行われず、 SFXXMLDocument::CreateElement 関数を呼び出して子要素(Element ノード)を作成します。 uri 引数が空文字列以外の場合は、 SFXXMLDocument::CreateElementNS 関数を呼び出して名前空間付きの子要素(Element ノード)を作成します。
  4. SFXXMLElement::AppendChild 関数を呼び出して parent 引数に指定された親要素(Element ノード)の子要素(子ノード)として追加します。

参照

SFXXMLDocument::CreateElement | SFXXMLDocument::CreateElementNS | SFXXMLElement::AppendChild | SFXXMLElement::SetAttribute


SFXSOAPWriter::SetEnvelope
SOAP メッセージの Envelope 要素(SOAP Envelope)を設定します。
[ public ]
SFXXMLElementPtr SetEnvelope(
    SFXAnsiStringConstRef prefix = SFXAnsiString::EmptyInstance()           // Envelope 要素の名前空間接頭辞
    SFXSOAPParser::SOAP_VERSION version = SFXSOAPParser::SOAP_VERSION_1_1   // SOAP メッセージのバージョン
    SFXAnsiStringConstRef encodingstyle = "NONE"                            // Envelope 要素の SOAP エンコーディングの値
);

引数

prefix

Envelope 要素の名前空間接頭辞です(デフォルト値: "SOAP-ENV")。

version

SOAP メッセージのバージョンです(デフォルト値: SFXSOAPParser::SOAP_VERSION_1_1)。

encodingstyle

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

戻り値

Envelope 要素(Element ノード)

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

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • Envelope 要素が既に存在するとき: SFERR_SOAP_REPEATED_ENVELOPE(0x69A2)

解説

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

prefix 引数には、Envelope 要素の名前空間接頭辞を指定します(デフォルト値: "SOAP-ENV")。

version 引数には、SOAP メッセージのバージョンを指定します(デフォルト値: SFXSOAPParser::SOAP_VERSION_1_1)。 この引数に指定する SOAP メッセージのバージョンに応じて、 prefix 引数で指定した Envelope 要素の名前空間接頭辞に対応する名前空間 URI が以下のように設定されます。

SOAP メッセージのバージョン(定数) 名前空間 URI
SFXSOAPParser::SOAP_VERSION_1_1(デフォルト) http://schemas.xmlsoap.org/soap/envelope/
SFXSOAPParser::SOAP_VERSION_1_2 http://www.w3.org/2003/05/soap-envelope

encodingstyle 引数には 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

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. SFXXMLDocument::CreateElementNS 関数を呼び出して、 prefix 引数に指定された名前空間接頭辞と、 version 引数に指定された SOAP メッセージのバージョンに対応した名前空間 URI を持つ Envelope 要素(Element ノード)を作成します。
  2. SFXXMLElement::SetAttribute 関数を呼び出して、 Envelope 要素(Element ノード)に "名前空間接頭辞:encodingStyle" という属性名と、 encodingstyle 引数に指定された SOAP エンコーディングを属性値に持つ属性を追加します("NONE" が指定された場合、属性は追加されません。 また、"STANDARD" が指定された場合は、"http://schemas.xmlsoap.org/soap/encoding/" が属性値になります)。
  3. SFXXMLElement::AppendChild 関数を呼び出して、 Envelope 要素(Element ノード)をこの SOAP メッセージ(Document ノード)のルート要素として この SOAP メッセージ(Document ノード)の子ノードにします。
  4. 戻り値として Envelope 要素(Element ノード)を返します。
[Caution] 注意

この関数を呼び出す前に SOAP Envelope が既に存在する場合は、 設定は何も行われず、既存の SOAP Envelope(Element ノード)を返すだけです。

この関数を呼び出す前に、 SFXSOAPWriter::SetHeader / SFXSOAPWriter::SetBody / SFXSOAPWriter::SetFault 関数を呼び出すと、 デフォルトの設定で SOAP Envelope 要素が作成され設定を変更できないことに注意してください。

参照

SFXSOAPWriter::SetHeader | SFXSOAPWriter::SetBody | SFXSOAPWriter::SetFault | SFXXMLDocument::CreateElementNS | SFXXMLElement::SetAttribute | SFXXMLElement::AppendChild | SFXSOAPParser::SOAP_VERSION


SFXSOAPWriter::SetFault
SOAP メッセージの Fault 要素(SOAP Fault)を設定します。
[ public ]
SFXXMLElementPtr SetFault(
    SFXAnsiStringConstRef faultcode                                     // faultcode 要素のテキスト
    SFXAnsiStringConstRef faultstring                                   // faultstring 要素のテキスト
    SFXAnsiStringConstRef faultactor = SFXAnsiString::EmptyInstance()   // faultactor 要素のテキスト
);

引数

faultcode

faultcode 要素の値を指定します。

faultstring

faultstring 要素の値を指定します。

faultactor

faultactor 要素の値を指定します。

戻り値

Fault 要素(Element ノード)

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

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

解説

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

SOAP Fault は、SOAP メッセージの Envelope 要素(SOAP Envelope)の子要素(SOAP Body)の子要素です。 SOAP Fault は、faultcode / faultstring / faultactor / fault 要素を子要素として持ちますが、 この関数は、faultcode / faultstring / faultactor 要素を設定します。 detail 要素は、SFXSOAPWriter::SetFaultDetail 関数を呼び出して設定します。

なお、SOAP Fault は SOAP Body 内に 1 つしか存在できません。 faultcode / faultstring / faultactor / detail 要素は、この順序で SOAP Fault の子要素となりますが、 これらの要素には、エラーの状態や詳細を記述します。 詳しくは、SFXSOAPParser::GetFault を参照してください。

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. SOAP Envelope がない場合、 SFXSOAPWriter::SetEnvelope 関数を呼び出してデフォルトの設定で Envelope 要素(Element ノード)を作成します。
  2. SOAP Body がない場合、 SFXSOAPWriter::SetBody 関数を呼び出してデフォルトの設定で Body 要素(Element ノード)を作成します。
  3. SFXXMLDocument::CreateElement 関数を呼び出して、 "(Envelope 要素の名前空間接頭辞):Fault" という名前の Fault 要素(Element ノード)を作成します。
  4. SFXXMLDocument::CreateElement / SFXXMLNode::SetText / SFXXMLElement::AppendChild 関数を使用して faultcode / faultstring / faultactor 要素(Element ノード)をこの順に作成し、Fault 要素(Element ノード)の子要素にします。
  5. 戻り値として Fault 要素(Element ノード)を返します。
[Caution] 注意

SOAP Envelope が存在しない場合、 デフォルトの SOAP Envelope が作成され変更することはできないので、 特定の設定を SOAP Envelope に行いたい場合は、 この関数を呼び出す前に SFXSOAPWriter::SetEnvelope 関数を呼び出す必要があります。

SOAP Body が存在しない場合、 デフォルトの SOAP Body が作成され変更することはできないので、 SOAP Body に特定の設定を行いたい場合は、 この関数を呼び出す前に SFXSOAPWriter::SetBody 関数を呼び出す必要があります。

この関数を呼び出す前に SOAP Fault が既に存在する場合は、 設定は何も行われず、既存の SOAP Fault(Element ノード)を返すだけです。

参照

SFXSOAPWriter::SetEnvelope | SFXSOAPWriter::SetBody | SFXXMLDocument::CreateElement | SFXXMLNode::SetText | SFXXMLElement::AppendChild


SFXSOAPWriter::SetFaultDetail
SOAP メッセージの Fault 要素(SOAP Fault)の子要素として detail 要素を設定します。
[ public ]
SFXXMLElementPtr SetFaultDetail(
    SFXAnsiStringConstRef encodingstyle = "NONE"   // SOAP エンコーディングの値
);

引数

encodingstyle

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

戻り値

detail 要素(Element ノード)

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

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • Fault 要素が存在しないとき: SFERR_SOAP_EXPECT_FAULT(0x69A1)

解説

この関数は、SOAP メッセージの Fault 要素(SOAP Fault)の子要素として detail 要素を設定します。

detail 要素は、SOAP メッセージの Envelope 要素(SOAP Envelope)の子要素(SOAP Body)の子要素(SOAP Fault)の子要素です。

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

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. この関数は、SOAP Fault の存在が前提条件になっています (事前にこの関数を呼び出す前に SFXSOAPWriter::SetFault 関数を呼び出して SOAP Fault を作成しておく必要があります)。
  2. SFXXMLDocument::CreateElement 関数を呼び出して、 "detail" という名前の detail 要素(Element ノード)を作成します。
  3. SFXXMLElement::SetAttribute 関数を呼び出して、 detail 要素(Element ノード)に "(Envelope 要素の名前空間接頭辞):encodingStyle" という属性名と、 encodingstyle 引数に指定された SOAP エンコーディングを属性値に持つ属性を追加します("NONE" が指定された場合、属性は追加されません。 また、"STANDARD" が指定された場合は、"http://schemas.xmlsoap.org/soap/encoding/" が属性値になります)。
  4. detail 要素(Element ノード)を Fault 要素(Element ノード)の子要素にします。
  5. 戻り値として detail 要素(Element ノード)を返します。

参照

SFXSOAPWriter::SetEnvelope | SFXSOAPWriter::SetBody | SFXSOAPWriter::SetFault | SFXXMLDocument::CreateElement | SFXXMLElement::SetAttribute


SFXSOAPWriter::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)を設定します。

SOAP Header は、SOAP メッセージの Envelope 要素(SOAP Envelope)の子要素です。 SOAP Envelope の子要素に Body 要素(SOAP Body)が存在する場合、 SOAP Header は SOAP Body の前に挿入されます。

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

[Note] 注意

具体的な処理内容は、以下の通りです。

  1. SOAP Envelope がない場合、 SFXSOAPWriter::SetEnvelope 関数を呼び出してデフォルトの設定で Envelope 要素(Element ノード)を作成します。
  2. SOAP Header がない場合、 SFXXMLDocument::CreateElement 関数を呼び出して "(Envelope 要素の名前空間接頭辞):Header" の名前を持つ Header 要素(Element ノード)を作成します。
  3. SFXXMLElement::SetAttribute 関数を呼び出して、 Header 要素(Element ノード)に "(Envelope 要素の名前空間接頭辞):encodingStyle" という属性名と、 encodingstyle 引数に指定された SOAP エンコーディングを属性値に持つ属性を追加します("NONE" が指定された場合、属性は追加されません。 また、"STANDARD" が指定された場合は、"http://schemas.xmlsoap.org/soap/encoding/" が属性値になります)。
  4. SFXXMLElement::AppendChild 関数を呼び出して Header 要素(Element ノード)を(もし有れば) Body 要素の前に Envelope 要素(Element ノード)の子要素(子ノード)として追加します。
  5. 戻り値として Header 要素(Element ノード)を返します。
[Caution] 注意

SOAP Envelope が存在しない場合、 デフォルトの SOAP Envelope が作成され変更することはできないので、 特定の設定を SOAP Envelope に行いたい場合は、 この関数を呼び出す前に SFXSOAPWriter::SetEnvelope 関数を呼び出す必要があります。

この関数を呼び出す前に SOAP Header が既に存在する場合は、 設定は何も行われず、既存の SOAP Header(Element ノード)を返すだけです。

参照

SFXSOAPWriter::SetEnvelope | SFXSOAPWriter::SetBody | SFXXMLDocument::CreateElement | SFXXMLElement::SetAttribute