SOAP-クイックガイド

SOAPは、Simple Object AccessProtocolの頭字語です。これは、コンピューター間で情報を交換するためのXMLベースのメッセージングプロトコルです。SOAPは、XML仕様のアプリケーションです。

注意点

  • SOAPは、インターネット経由で通信するように設計された通信プロトコルです。

  • SOAPは、XMLメッセージング用にHTTPを拡張できます。

  • SOAPは、Webサービスにデータ転送を提供します。

  • SOAPは、完全なドキュメントを交換したり、リモートプロシージャを呼び出したりすることができます。

  • メッセージのブロードキャストにはSOAPを使用できます。

  • SOAPは、プラットフォームおよび言語に依存しません。

  • SOAPは、送信される情報とその方法を定義するXMLの方法です。

  • SOAPを使用すると、クライアントアプリケーションはリモートサービスに簡単に接続してリモートメソッドを呼び出すことができます。

SOAPはさまざまなメッセージングシステムで使用でき、さまざまなトランスポートプロトコルを介して配信できますが、SOAPの最初の焦点は、HTTPを介して転送されるリモートプロシージャコールです。

CORBA、DCOM、Java RMIなどの他のフレームワークはSOAPと同様の機能を提供しますが、SOAPメッセージは完全にXMLで記述されているため、プラットフォームや言語に依存しません。

SOAPメッセージは、次の要素を含む通常のXMLドキュメントです-

  • Envelope−メッセージの開始と終了を定義します。これは必須の要素です。

  • Header−中間ポイントまたは最終エンドポイントのいずれかで、メッセージの処理に使用されるメッセージのオプションの属性が含まれます。これはオプションの要素です。

  • Body−送信されるメッセージを構成するXMLデータが含まれます。これは必須の要素です。

  • Fault −メッセージの処理中に発生したエラーに関する情報を提供するオプションのFault要素。

これらの要素はすべて、SOAPエンベロープのデフォルトの名前空間で宣言されています- http://www.w3.org/2001/12/soap-envelope また、SOAPエンコーディングとデータ型のデフォルトの名前空間は-です。 http://www.w3.org/2001/12/soap-encoding

NOTE−これらの仕様はすべて変更される可能性があります。したがって、W3Webサイトで入手可能な最新の仕様で更新を続けてください。

SOAPメッセージ構造

次のブロックは、SOAPメッセージの一般的な構造を示しています。

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

SOAPエンベロープはメッセージの開始と終了を示すため、受信者はメッセージ全体がいつ受信されたかを知ることができます。SOAPエンベロープは、メッセージの受信が完了し、メッセージを処理する準備ができたことを知るという問題を解決します。したがって、SOAPエンベロープは基本的にパッケージ化メカニズムです。

注意点

  • すべてのSOAPメッセージには、ルートエンベロープ要素があります。

  • エンベロープはSOAPメッセージの必須部分です。

  • すべてのエンベロープ要素には、1つのボディ要素が含まれている必要があります。

  • エンベロープにヘッダー要素が含まれている場合は、ヘッダー要素を1つだけ含める必要があり、ボディの前にエンベロープの最初の子として表示される必要があります。

  • SOAPのバージョンが変わると、エンベロープも変わります。

  • SOAPエンベロープは、ENV名前空間プレフィックスとEnvelope要素を使用して指定されます。

  • オプションのSOAPエンコーディングも、名前空間名とオプションのencodingStyle要素を使用して指定されます。これは、SOAP以外のエンコーディングスタイルを指すこともあります。

  • v1.1準拠のSOAPプロセッサは、v1.2エンベロープ名前空間を含むメッセージを受信すると障害を生成します。

  • v1.2準拠のSOAPプロセッサは、v1.2エンベロープ名前空間を含まないメッセージを受信すると、VersionMismatchフォールトを生成します。

v1.2準拠のSOAPメッセージ

以下に、v1.2準拠のSOAPメッセージの例を示します。

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

HTTPPOSTを使用したSOAP

次の例は、HTTP POST操作内でのSOAPメッセージの使用を示しています。これにより、メッセージがサーバーに送信されます。エンベロープスキーマ定義とエンコーディングルールのスキーマ定義の名前空間が表示されます。HTTPヘッダーのOrderEntry参照は、tutorialspoint.comWebサイトで呼び出されるプログラムの名前です。

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

NOTE − HTTPバインディングは、サービスの場所を指定します。

オプションのHeader要素は、追加のアプリケーションレベルの要件を指定するための柔軟なフレームワークを提供します。たとえば、Header要素を使用して、パスワードで保護されたサービスのデジタル署名を指定できます。同様に、従量制のSOAPサービスのアカウント番号を指定するために使用できます。

注意点

  • これは、SOAPメッセージのオプション部分です。

  • ヘッダー要素は複数回発生する可能性があります。

  • ヘッダーは、新しい機能を追加することを目的としています。

  • SOAPヘッダーには、名前空間で定義されたヘッダーエントリが含まれています。

  • ヘッダーは、SOAPエンベロープの最初の直接の子要素としてエンコードされます。

  • 複数のヘッダーが定義されている場合、SOAPヘッダーのすべての直接の子要素はSOAPヘッダーブロックとして解釈されます。

SOAPヘッダー属性

SOAPヘッダーは、次の2つの属性を持つことができます-

アクター属性

SOAPプロトコルは、メッセージパスをSOAPサービスノードのリストとして定義します。これらの各中間ノードは、何らかの処理を実行してから、メッセージをチェーン内の次のノードに転送できます。Actor属性を設定することにより、クライアントはSOAPヘッダーの受信者を指定できます。

MustUnderstand属性

ヘッダー要素がオプションか必須かを示します。trueに設定されている場合、受信者は定義されたセマンティクスに従ってヘッダー属性を理解して処理するか、障害を返す必要があります。

次の例は、SOAPメッセージでヘッダーを使用する方法を示しています。

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

SOAP本体は、SOAPメッセージで交換されるアプリケーション定義のXMLデータを含む必須要素です。本文はエンベロープ内に含まれている必要があり、メッセージに定義されている可能性のあるヘッダーの後に続く必要があります。

本体はエンベロープの子要素として定義され、本体のセマンティクスは関連するSOAPスキーマで定義されます。

本文には、メッセージの最終的な受信者を対象とした必須情報が含まれています。例-

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

上記の例では、コンピューターセットの見積もりを要求しています。上記のm:GetQuotation要素とItem要素はアプリケーション固有の要素であることに注意してください。それらはSOAP標準の一部ではありません。

上記のクエリに対する応答は次のとおりです-

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

通常、アプリケーションは、要求要素と応答要素に関連付けられたセマンティクスを含むスキーマも定義します。

引用のサービスは、アプリケーション・サーバーで実行されているEJBを使用して実装される可能性があります。その場合、SOAPプロセッサは、GetQuotationResponseサービスのEJB実装にパラメータとして本文情報をマッピングする責任があります。SOAPプロセッサは、本文情報を.NETオブジェクト、CORBAオブジェクト、COBOLプログラムなどにマッピングすることもできます。

処理中にエラーが発生した場合、SOAPメッセージへの応答はメッセージ本文のSOAP障害要素であり、障害はSOAPメッセージの送信者に返されます。

SOAP障害メカニズムは、事前定義されたコード、説明、障害を生成したSOAPプロセッサのアドレスなど、エラーに関する特定の情報を返します。

注意点

  • SOAPメッセージは、1つの障害ブロックのみを伝送できます。

  • 障害は、SOAPメッセージのオプション部分です。

  • HTTPバインディングの場合、成功した応答は200〜299の範囲のステータスコードにリンクされます。

  • SOAP障害は、500〜599の範囲のステータスコードにリンクされています。

障害のサブ要素

SOAP障害には次のサブ要素があります-

シニア番号 サブ要素と説明
1

<faultCode>

これは、エラーのクラスを示すために使用されるテキストコードです。事前定義された障害コードのリストについては、次の表を参照してください。

2

<faultString>

エラーを説明するテキストメッセージです。

3

<faultActor>

誰が障害を引き起こしたかを示すテキスト文字列です。SOAPメッセージがSOAPメッセージパス内の複数のノードを通過し、クライアントがエラーの原因となったノードを知る必要がある場合に役立ちます。最終的な宛先として機能しないノードには、faultActor要素が含まれている必要があります。

4

<detail>

これは、アプリケーション固有のエラーメッセージを運ぶために使用される要素です。詳細要素には、詳細エントリと呼ばれる子要素を含めることができます。

SOAP障害コード

以下に定義されているfaultCode値は、障害を説明するときにfaultcode要素で使用する必要があります。

シニア番号 エラーと説明
1

SOAP-ENV:VersionMismatch

SOAPエンベロープ要素の無効な名前空間が見つかりました。

2

SOAP-ENV:MustUnderstand

mustUnderstand属性が「1」に設定されているHeader要素の直接の子要素が理解されませんでした。

3

SOAP-ENV:Client

メッセージの形式が正しくないか、誤った情報が含まれていました。

4

SOAP-ENV:Server

サーバーに問題があったため、メッセージを続行できませんでした。

SOAP障害の例

次のコードはサンプルの障害です。クライアントがValidateCreditCardという名前のメソッドを要求しましたが、サービスはそのようなメソッドをサポートしていません。これはクライアント要求エラーを表し、サーバーは次のSOAP応答を返します-

<?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/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAPには、データ型をエンコードするための一連の組み込みルールが含まれています。これにより、SOAPメッセージは、整数、浮動小数点数、倍精度浮動小数点数、配列などの特定のデータ型を示すことができます。

  • SOAPデータ型は、スカラー型と複合型の2つの大きなカテゴリに分類されます。

  • スカラータイプには、姓、価格、製品の説明など、1つの値のみが含まれます。

  • 複合タイプには、発注書や株価のリストなど、複数の値が含まれます。

  • 複合型はさらに配列と構造体に細分されます。

  • SOAPメッセージのエンコードスタイルは、SOAP-ENV:encodingStyle属性を介して設定されます。

  • SOAP 1.1エンコーディングを使用するには、値を使用します http://schemas.xmlsoap.org/soap/encoding/

  • SOAP 1.2エンコーディングを使用するには、値を使用します http://www.w3.org/2001/12/soap-encoding

  • 最新のSOAP仕様では、XMLスキーマで定義されているすべての組み込み型が採用されています。それでも、SOAPは、配列や参照など、XMLスキーマによって標準化されていない構造を定義するための独自の規則を維持しています。

スカラータイプ

スカラー型の場合、SOAPはXMLスキーマ仕様で指定されたすべての組み込み単純型を採用します。これには、文字列、浮動小数点数、倍精度浮動小数点数、および整数が含まれます。

次の表に、XMLスキーマパート0-入門書から抜粋した主な単純型を示します。 http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

XMLスキーマに組み込まれた単純な型
シンプルタイプ
ストリング これが電気であることを確認してください。
ブール値 true、false、1、0。
浮く -INF、-1E4、-0、0、12.78E-2、12、INF、NaN。
ダブル -INF、-1E4、-0、0、12.78E-2、12、INF、NaN。
10進数 -1.23、0、123.4、1000.00。
バイナリ 100010
整数 -126789、-1、0、1、126789。
nonPositiveInteger -126789、-1、0。
negativeInteger -126789、-1。
長いです -1、12678967543233
int -1、126789675
ショート -1、12678
バイト -1、126
nonNegativeInteger 0、1、126789
unsignedLong 0、12678967543233
unsignedInt 0、1267896754
unsignedShort 0、12678
unsignedByte 0、126
正の整数 1、126789。
日付 1999-05-31、--- 05。
時間 13:20:00.000、13:20:00.000-05:00

たとえば、これはdoubleデータ型のSOAP応答です-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

複合タイプ

SOAP配列には非常に特殊なルールのセットがあり、要素タイプと配列サイズの両方を指定する必要があります。SOAPは多次元配列もサポートしていますが、すべてのSOAP実装が多次元機能をサポートしているわけではありません。

配列を作成するには、配列のxsi:typeとして指定する必要があります。配列には、arrayType属性も含める必要があります。この属性は、含まれている要素のデータ型と配列の次元を指定するために必要です。

たとえば、次の属性は10個のdouble値の配列を指定します-

arrayType = "xsd:double[10]"

対照的に、次の属性は文字列の2次元配列を指定します-

arrayType = "xsd:string[5,5]"

これは、double値の配列を使用したSOAP応答のサンプルです-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"  
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

構造体には複数の値が含まれていますが、各要素は一意のアクセサ要素で指定されています。たとえば、製品カタログ内のアイテムについて考えてみます。この場合、構造体には製品のSKU、製品名、説明、および価格が含まれている可能性があります。このような構造体がSOAPメッセージでどのように表されるかを次に示します-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
		
         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

NOTE− SOAPコードを作成するときは、適切なインデントに注意してください。構造体の各要素は、一意のアクセサー名で指定されます。たとえば、上記のメッセージには、名前、価格、説明、SKUの4つのアクセサ要素が含まれています。各要素は独自のデータ型を持つことができます。たとえば、nameは文字列として指定されますが、priceはdoubleとして指定されます。

SOAPはどのトランスポートプロトコルにも結び付けられていません。SOAPは、SMTP、FTP、IBMのMQSeries、またはMicrosoft Message Queuing(MSMQ)を介して転送できます。

SOAP仕様には、HTTPに関する詳細のみが含まれています。HTTPは依然として最も人気のあるSOAPトランスポートプロトコルです。

HTTP経由のSOAP

非常に論理的には、SOAP要求はHTTP要求を介して送信され、SOAP応答はHTTP応答のコンテンツ内で返されます。SOAPリクエストはHTTPGETを介して送信できますが、仕様にはHTTPPOSTの詳細のみが含まれています。

さらに、コンテンツタイプをtext / xmlに設定するには、HTTPリクエストとレスポンスの両方が必要です。

SOAP仕様では、クライアントがSOAPActionヘッダーを提供する必要がありますが、SOAPActionヘッダーの実際の値は、SOAPサーバーの実装によって異なります。

たとえば、XMethodsによってホストされているAltaVista BabelFish Translationサービスにアクセスするには、SOAPActionヘッダーとして以下を指定する必要があります。

urn:xmethodsBabelFish#BabelFish

サーバーが完全なSOAPActionヘッダーを必要としない場合でも、クライアントは空の文字列( "")またはnull値を指定する必要があります。例-

SOAPAction: ""
SOAPAction:

これは、HTTP経由でXMethods BabelfishTranslationサービスに送信されるサンプルリクエストです。

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?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/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

コンテンツタイプとSOAPActionヘッダーに注意してください。BabelFishメソッドには2つのStringパラメーターが必要であることに注意してください。翻訳モードen_frは、英語からフランス語に翻訳されます。

XMethodsからの応答は次のとおりです-

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

HTTP経由で配信されるSOAP応答は、同じHTTPステータスコードに従う必要があります。たとえば、ステータスコード200 OKは、正常な応答を示します。500 Internal Server Errorのステータスコードは、サーバーエラーがあり、SOAP応答にFault要素が含まれていることを示します。

以下の例では、GetQuotationリクエストがHTTP経由でSOAPサーバーに送信されます。リクエストにはQuotationNameパラメータがあり、Quotationがレスポンスで返されます。

関数の名前空間はで定義されています http://www.xyz.org/quotation 住所。

これがSOAPリクエストです-

POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
      <m:GetQuotation>
         <m:QuotationsName>MiscroSoft</m:QuotationsName>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

対応するSOAP応答は次のようになります-

HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
      <m:GetQuotationResponse>
         <m:Quotation>Here is the quotation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP 1.1は、もともと2000年5月にW3Cに提出されました。公式の提出者には、Microsoft、IBM、Aribaなどの大企業と、UserLandSoftwareやDevelopMentorなどの中小企業が含まれていました。

2001年7月、XMLプロトコルワーキンググループはSOAP1.2の「ワーキングドラフト」をリリースしました。W3C内では、このドキュメントは正式に進行中の作業です。つまり、ドキュメントは完成する前に何度も更新される可能性があります。

SOAPバージョン1.1は、オンラインで入手できます。 http://www.w3.org/TR/SOAP/

SOAPバージョン1.2のワーキングドラフトは、次のURLで入手できます。 http://www.w3.org/TR/soap12/

W3Cは、コアSOAP仕様とは別の「添付ファイル付きSOAPメッセージ」の送信もホストすることに注意してください。この仕様により、SOAPメッセージに画像や音声ファイルなどのバイナリ添付ファイルを含めることができます。詳細については、次のW3Cノートを参照してください。http://www.w3.org/TR/SOAP-attachments。