SOAPとは、Webサービス間でメッセージを交換するためのプロトコルであり、W3Cによって仕様が策定されている。Webサービス同士でドキュメントの交換を行ったり、Remote Procedure Call (RPC)を行ったりするために利用される。Webサービスとは、Web経由でアクセスすることができるサービス(プログラム)であり、Webサイトに限られるわけではない。

概要

SOAPは「SOAPメッセージ」と呼ばれるXML形式のメッセージ構造の仕様のみ規定しており、SOAPメッセージを運ぶ下位のプロトコル(トランスポートプロトコル)に関しては規定が無い。SOAPの下位プロトコルとしてSMTPやFTPなどさまざまなプロトコルを利用できるが、一般的にはHTTPを利用する。

SOAPの名前空間はhttp://schemas.xmlsoap.org/soap/envelope/である。

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="http://itref.fc2web.com/foo">
      <foo:baz>sample</foo:baz>
    </foo:bar>
  </env:Body>
</env:Envelope>

要素

Envelope要素

SOAPメッセージのルート要素

親要素なし(ルート要素)
子要素Header(任意)、Body(必須)
属性xmlns
親要素Envelope
子要素ヘッダブロックNotUnderstood

Body要素

親要素Envelope

ヘッダブロック(Headerの子要素)

親要素Header
属性encodingStylemustUnderstandrelayrole

Fault要素

親要素Body
子要素Code(必須)、Reason(必須)、Detail(任意)、Role(任意)、Node(任意)

Code要素

親要素Fault
子要素Value(必須)、Subcode(任意)

Value要素

親要素CodeSubcode
内容SOAPフォルトコード
SOAPフォルトコード
SOAPフォルトコード説明
VersionMismatchエンベロープの名前空間の不一致
MustUnderstandmustUnderstandの付いたHeader要素が処理不能
DataEncodingUnknownencodingStyle属性の円コーディング未対応
Sender送られてきたメッセージの構成不正
Receiverサーバ側のエラー

Subcode要素

親要素CodeSubcode
子要素Value(必須)、SubCode(任意)

Value要素

親要素CodeSubcode

Reason要素

親要素Fault
子要素Text

Detail要素

親要素Fault

Text要素

親要素Reason
属性xml:lang

Node要素

親要素Fault

Role要素

親要素Fault

NotUnderstood要素

親要素Header
属性qname、xmlns

属性

encodingStyle属性

要素ヘッダブロック、Bodyの子要素
xs:anyURI

mustUnderstand属性

要素ヘッダブロック
xs:boolean

relay属性

要素ヘッダブロック
xs:boolean

role属性

要素ヘッダブロック
xs:anyURI
このエントリーをはてなブックマークに追加