SOAP メッセージを作成する
SFXSOAPWriter クラスを使って、SOAP メッセージを作成します。
SFXSOAPWriter soapwriter; // SOAP メッセージの各要素を生成するオブジェクト SFCError error; // エラー値を保存する変数 // Envelope 要素を作成する // 名前空間接頭辞は明示的に設定しないと、"SOAP-ENV" になる 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); } // Fault 要素の設定 ( デフォルトでは Body 要素の子要素となる ) soapwriter.SetFault("testing-fault-code","testing-fault-string" ,"testing-fault-actor"); // Fault 要素のエラー詳細内容の設定 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); } }作成した SOAP メッセージ
<?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>