前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXSOAPWriter
SOAP メッセージを作成するクラスです。
#include <SFXSOAPWriter.hpp>
class SFXSOAPWriter : public static_exception< SFCError >;
SFMTYPEDEFCLASS(SFXSOAPWriter)

継承図

SFXSOAPWriter クラスの継承図

協調図

SFXSOAPWriter クラスの協調図

解説

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

[Note] 注意
このクラスを使って SOAP メッセージを作成するとき、 SFXSOAPWriter::SetBodySFXSOAPWriter::SetEnvelopeSFXSOAPWriter::SetFaultSFXSOAPWriter::SetFaultDetail などの関数は どのような順序で呼び出しても構いません。
[Note] Simple Object Access Protocol ( SOAP ) の仕様

W3C SOAP 最新情報 : Latest SOAP versions ( SOAP 1.1 と SOAP 1.2 をサポートしています。)

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

例 784. 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);
    }

}

例 785. 作成した 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 )
Save( SFXPathConstRef output , Bool indent = true )
Save( SFXOutputStreamRef output , Bool indent = true )
SOAP メッセージを保存します。
SFXXMLElementPtr SetBody( SFXAnsiStringConstRef encodingstyle = "NONE" )
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 要素を設定します。
SFXXMLElementPtr SetFault( SFXAnsiStringConstRef faultcode , SFXAnsiStringConstRef faultstring , SFXAnsiStringConstRef faultactor = SFXAnsiString::EmptyInstance() )
SOAP メッセージに faultcode、faultstring、および faultactor 要素( Fault 要素)を設定します。
SFXXMLElementPtr SetFaultDetail( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP Fault 要素に detail 要素を設定します。
SFXXMLElementPtr SetHeader( SFXAnsiStringConstRef encodingstyle = "NONE" )
SOAP メッセージに Header 要素を設定します。

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

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
  • Envelope 要素がないとき : SFERR_SOAP_EXPECT_ENVELOPE( 0x699F )
  • 引数が不正であるとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY

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

戻り値

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

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

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
  • Envelope 要素がないとき : SFERR_SOAP_EXPECT_ENVELOPE( 0x699F )
  • Body 要素がないとき : SFERR_SOAP_EXPECT_BODY( 0x69A0 )
  • SOAP メッセージを保存するファイルが既にオープンしているとき : SFERR_INVALID_STATE
  • 引数が不正であるとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED
  • その他のエラーのとき : AEEError.h で定義されているエラー値

解説

SOAP メッセージを指定したファイルやストリームに保存します。

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


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

引数

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

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

解説

SOAP メッセージに Body 要素を設定します。Body 要素が既に存在する場合は、設定は行われません。

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

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

[Note] SOAP エンコーディングについて

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


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 エンコーディングの値
);

引数

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

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

SFXSOAPWriter::SetEnvelope
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" です。

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

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

解説

SOAP メッセージ に Envelope 要素を設定します。Envelope 要素が既に存在する場合は、設定されません。


SFXSOAPWriter::SetFault
SOAP メッセージに faultcode、faultstring、および faultactor 要素( Fault 要素)を設定します。
[ public ]
SFXXMLElementPtr SetFault(
    SFXAnsiStringConstRef faultcode                                     // faultcode 
    SFXAnsiStringConstRef faultstring                                   // faultstring 
    SFXAnsiStringConstRef faultactor = SFXAnsiString::EmptyInstance()   // faultactor 
);

解説

SOAP メッセージに faultcode、faultstring、および faultactor 要素( Fault 要素)を設定します。 faultcode、faultstring、および faultactor 要素( Fault 要素)が既に存在する場合は、設定されません。


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

引数

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

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

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

引数

encodingstyle

SOAP エンコーディングの値です。以下のように定義されています。

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

解説

SOAP メッセージに Header 要素を設定します。Header 要素が既に存在する場合、設定されません。