SOAP
SOAPとは、Webサービス間でメッセージを交換するためのプロトコルであり、W3Cによって仕様が策定されている。Webサービス同士でドキュメントの交換を行ったり、Remote Procedure Call (RPC)を行ったりするために利用される。Webサービスとは、Web経由でアクセスすることができるサービス(プログラム)であり、Webサイトに限られるわけではない。
概要
SOAPは「SOAPメッセージ」と呼ばれるXML形式のメッセージ構造の仕様のみ規定しており、SOAPメッセージを運ぶ下位のプロトコル(トランスポートプロトコル)に関しては規定が無い。SOAPの下位プロトコルとしてSMTPやFTPなどさまざまなプロトコルを利用できるが、一般的にはHTTPを利用する。
SOAPメッセージの例を以下に示す。
Post /url HTTP/1.1
Host: itref.fc2web.com
Content-Type: application/soap+xml; charset="utf-8";
Content-Length: 350
<?xml version="1.1"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<foo:bar xmlns:foo="https://segakuin.com/xml/">
<foo:baz>sample</foo:baz>
</foo:bar>
</env:Body>
</env:Envelope>
Envelope
EnvelopeはSOAPメッセージのルート要素である。
次の要素を子要素として含むことができる。
Envelope要素には次の属性を指定する。
- xmlns
-
SOAPの名前空間「http://schemas.xmlsoap.org/soap/envelope/」を指定する。
接頭辞(prefix)も指定できる。任意の接頭辞を付けることができるが、慣習的に「env」とすることが多い。
<?xml version="1.1"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<!-- content -->
</env:Header>
<env:Body>
<!-- content -->
</env:Body>
</env:Envelope>
ヘッダブロックには次の属性を指定できる。
- encodingStyle
- xs:anyURI
- mustUnderstand
- xs:boolean
- relay
- xs:boolean
- role
- xs:anyURI
Body
Fault
<env:Fault>
<env:Code>
<env:Value>Receiver</env:Value>
</env:Code>
<env:Reason>
<env:Text xml:lang="ja">
<!-- content -->
</env:Text>
<env:Reason>
</env:Fault>
Code
<env:Code>
<env:Value>Receiver</env:Value>
</env:Code>
Value
SOAPフォルトコード
SOAPフォルトコード | 説明 |
VersionMismatch | エンベロープの名前空間の不一致 |
MustUnderstand |
mustUnderstand属性の付いたHeader要素が処理不能 |
DataEncodingUnknown | encodingStyle属性の円コーディング未対応 |
Sender | 送られてきたメッセージの構成不正 |
Receiver | サーバ側のエラー |
<env:Value>Receiver</env:Value>
Subcode
Reason
<env:Reason>
<env:Text xml:lang="ja">
<!-- content -->
</env:Text>
<env:Reason>
Detail
Text
<?xml version="1.1"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<env:NotUnderstood qname="foo:Example" xmlns:foo="https://segakuin.com/xml/" />
</env:Header>
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:MustUnderstand</env:Value>
<env:/Code>
<env:Reason>
<env:Text xml:lang='en'>
One or more mandatory SOAP header blocks not understood
<env:Text>
<env:/Reason>
<env:/Fault>
</env:Body>
</env:Envelope>
Node
Role
NotUnderstood
SOAPノードがコードの値を「env:MustUnderstand」に設定してフォルトを生成する場合、生成されたフォルトメッセージにNotUndersted SOAPヘッダーブロックを提供する必要がある。
NotUndersted SOAPヘッダー・ブロックには、理解されなかった特定のSOAPヘッダー・ブロックのXML修飾名の詳細が記述されている。
<?xml version="1.1"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<env:NotUnderstood qname="foo:Example" xmlns:foo="https://segakuin.com/xml/" />
</env:Header>
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:MustUnderstand</env:Value>
<env:/Code>
<env:Reason>
<env:Text xml:lang='en'>
One or more mandatory SOAP header blocks not understood
<env:Text>
<env:/Reason>
<env:/Fault>
</env:Body>
</env:Envelope>
属性
encodingStyle属性