抽象 WSDL メッセージを SOAP メッセージにバインドするための SOAP 拡張性要素は、いくつかのセクションに分かれています。各セクションは、バインディングがどのように行われるべきかを表します。バインディングレベルでは、設定はポートタイプ全体に適用されます。オペレーションレベルでは、設定はそのオペレーションだけに適用されます。メッセージレベルでは、入力メッセージか出力メッセージかにかかわらず、設定はその特定のメッセージに適用されます。
SOAP binding 要素は、バインディングが SOAP プロトコルの形式 (Envelope、Header、および Body) にバインドされていることを示すために使用されます。この要素は、メッセージのエンコーディングや形式に関する要求 (SOAP 1.1 仕様のセクション 5 に必ず従うことなど) は行いません。
表 2 SOAP binding 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
transport |
このバインディングが SOAP のどのトランスポートに対応するかを示します。 |
省略可能 |
http://schemas.xmlsoap.org/soap/http |
style |
この特定の SOAP バインディングのデフォルトスタイルを示します。 |
省略可能 |
rpc |
SOAP バインディングを使用するときは、SOAP binding 要素が存在する必要があります。次の例は、SOAP binding 要素の使用法を示しています。
<definitions .... > <binding .... > <soap:binding transport="uri"? style="rpc|document"?> </binding> </definitions> |
style 属性の値は、含まれている各オペレーションのデフォルトの style 属性です。style 属性が省略されている場合は、"document" と見なされます。
必須の transport 属性の値は、SOAP メッセージの配信に使用するトランスポートを示します。URI 値 http://schemas.xmlsoap.org/soap/http は、SOAP 仕様の HTTP バインディングに対応しています。ここにほかの URI を使用して、ほかのトランスポート (SMTP、FTP など) を指定することができます。
SOAP operation 要素は、抽象オペレーションから具象 SOAP オペレーションへのバインディング情報を提供するために使用されます。
表 3 SOAP operation 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
soapAction |
HTTP ヘッダーに挿入すべき soapAction を示します。 |
省略可能 |
urn:someSoapAction |
style |
この特定の SOAP オペレーションのデフォルトスタイルを示します。 |
省略可能 |
rpc |
次の例は、SOAP operation 要素の使用法を示しています。
<definitions .... > <binding .... > <operation .... > <soap:operation soapAction="uri"? style="rpc|document"?>? </operation> </binding> </definitions> |
style 属性 は、オペレーションが RPC 指向 (メッセージにパラメータと戻り値が含まれる) か、ドキュメント指向 (メッセージにドキュメントが含まれる) かを示します。この情報を使用して、適切なプログラミングモデルを選択することができます。この属性の値は、SOAP メッセージの本体の構築方法にも影響を与えます。この属性が指定されていない場合は、soap:binding 要素に指定されている値がそのデフォルト値になります。soap:binding 要素で style が指定されていない場合は、"document" と見なされます。
soapAction 属性は、このオペレーションの SOAPAction ヘッダーの値を指定します。この URI 値は SOAPAction ヘッダーの値として直接使用する必要があります。要求を行うときに、相対 URI 値を絶対値にしようとしないでください。SOAP の HTTP プロトコルバインディングの場合、この値は必須です (デフォルト値はない)。ほかの SOAP プロトコルバインディングの場合、これを指定してはならず、また soap:operation 要素は省略できます。
SOAP body 要素は、抽象オペレーションから具象 SOAP オペレーションへのバインディング情報を提供するために使用されます。
表 4 SOAP body 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
parts |
WSDL メッセージから body 要素に含められるパートを示します。 |
省略可能 |
part1 |
use |
SOAP body でメッセージパートがどのようにエンコードされるかを示します。 |
省略可能 |
literal |
encodingStyle |
使用する特定のエンコーディングスタイルを示します。 |
省略可能 |
http://someencodingstyle |
namespace |
RPC 形式のメッセージのラッパー要素の名前空間を示します。 |
省略可能 |
urn:someNamespace |
次の例は、SOAP body 要素を示しています。
<definitions .... > <binding .... > <operation .... > <input> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </input> <output> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </output> </operation> </binding> </definitions> |
nmtokens タイプの省略可能属性 parts は、メッセージの SOAP Body 部分のどこかに出現するパートを示します (SOAP が multipart/related MIME バインディングと組み合わせて使用される場合など、メッセージのほかのパートがメッセージのほかの部分に出現する可能性がある)。parts 属性が省略されている場合は、メッセージで定義されているすべてのパートが SOAP Body 部分に含められると見なされます。
必須の use 属性は、メッセージパートがなんらかのエンコーディング規則を使用してエンコードされるか、あるいはメッセージパートがメッセージの具象スキーマを定義するかを示します。
use が encoded の場合、各メッセージパートは type 属性を使用して抽象タイプを参照します。これらの抽象タイプを使用して、encodingStyle 属性で指定されているエンコーディングを適用することにより、具象メッセージが生成されます。namespace 属性は、抽象タイプで明示的に定義されていない内容だけに適用されますが、namespace 属性のパート名、タイプ、および値はすべてエンコーディングに入力されます。参照先のエンコーディングスタイルでは、(SOAP エンコーディングの場合と同様に) 形式の変形を許可する場合、すべての変形がサポートされる (reader makes right) 必要があります。
use が literal の場合、各パートは element 属性か type 属性を使用して具象スキーマ定義を参照します。前者の場合、パートで参照される要素が Body 要素の下に直接出現するか (ドキュメント形式のバインディングの場合)、メッセージパートの名前で指定されるアクセサ要素の下に出現します (RPC 形式の場合)。後者の場合、パートで参照されるタイプが、包含する要素のスキーマタイプになります (ドキュメント形式の場合は Body、RPC 形式の場合はパートのアクセサ要素)。
タイプを使用して複合 Body の内容を定義する例については、節 2.3.1 を参照してください。use が literal の場合は、encodingStyle 属性の値を使用して、具象形式は特定のエンコーディング (SOAP エンコーディングなど) を使用して生成されたが、指定された変形だけがサポートされる (writer makes right) ことを示すことができます。
encodingStyle 属性の値は URI のリストです。各 URI は 1 つの空白で区切られています。これらの URI は、メッセージで使用されるエンコーディングを、制限の強いものから弱いものへ順に表します (SOAP 仕様で定義されている encodingStyle 属性とまったく同様)。
fault 要素は、SOAP Fault Details 要素の内容を指定します。そのパターンは body 要素と同様になります。
表 5 SOAP fault 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
name |
WSDL メッセージから fault 要素に含められるパートの名前を示します。 |
必須 |
part1 |
use |
SOAP fault でメッセージパートがどのようにエンコードされるかを示します。 |
必須 |
literal |
encodingStyle |
使用する特定のエンコーディングスタイルを示します。 |
省略可能 |
http://someencodingstyle |
namespace |
RPC 形式のメッセージのラッパー要素の名前空間を示します。 |
省略可能 |
urn:someNamespace |
次の例は、SOAP fault 要素を示しています。
<definitions .... > <binding .... > <operation .... > <fault>* <soap:fault name="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?> </fault> </operation> </binding> </definitions> |
name 属性は、オペレーションに定義されている wsdl:fault に soap:fault を関連付けます。障害メッセージのパートは 1 つでなければなりません。
use、encodingStyle、および namespace 属性はどれも Body と同じ方法で使用されますが、障害にはパラメータが含まれないので style="document" と見なされる点だけが異なります。
header 要素と headerfault 要素を使用すると、SOAP Envelope の Header 要素内で送信されるヘッダーを定義できます。ヘッダーを使用する SOAP Envelope に出現するヘッダーをすべて列挙する必要があるわけではありません。たとえば、特定のヘッダーは実際のペイロードに追加されるように WSDL の拡張機能によって暗黙で指定されている場合があり、そのようなヘッダーはここに列挙する必要はありません。
表 6 SOAP header 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
message |
header 要素へのバインディングで使用される WSDL メッセージを示します。 |
必須 |
part1 |
part |
WSDL メッセージから header 要素に含められるパートを示します。 |
必須 |
part1 |
use |
SOAP header でメッセージパートがどのようにエンコードされるかを示します。 |
必須 |
literal |
encodingStyle |
使用する特定のエンコーディングスタイルを示します。 |
省略可能 |
http://someencodingstyle |
namespace |
RPC 形式のメッセージのラッパー要素の名前空間を示します。 |
省略可能 |
urn:someNamespace |
表 7 SOAP headerfault 要素の属性
プロパティー |
説明 |
必須か省略可能か |
例 |
name |
headerfault 要素へのバインディングで使用される WSDL メッセージを示します。 |
必須 |
part1 |
part |
WSDL メッセージから headerfault 要素に含められるパートを示します。 |
必須 |
part1 |
use |
SOAP headerfault でメッセージパートがどのようにエンコードされるかを示します。 |
必須 |
literal |
encodingStyle |
使用する特定のエンコーディングスタイルを示します。 |
省略可能 |
http://someencodingstyle |
namespace |
RPC 形式のメッセージのラッパー要素の名前空間を示します。 |
省略可能 |
urn:someNamespace |
次の例は、SOAP header および headerfault 要素を示しています。
<definitions .... > <binding .... > <operation .... > <input> <soap:header message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?>* <soap:headerfault message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?/>* <soap:header> </input> <output> <soap:header message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?>* <soap:headerfault message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?/>* <soap:header> </output> </operation> </binding> </definitions> |
use、encodingStyle、および namespace 属性はどれも Body と同じ方法で使用されますが、ヘッダーにはパラメータが含まれないので style="document" と見なされる点だけが異なります。
QName タイプの message 属性と nmtoken タイプのpart 属性はともに、ヘッダータイプを定義するメッセージパートを参照します。
省略可能な headerfault 要素は、header 内に出現し、header と同じ構文を持ちます。この要素を使用すると、ヘッダーに関連しヘッダーで定義されているエラー情報を送信するための、ヘッダータイプを指定できます。SOAP 仕様では、ヘッダーに関連するエラーはヘッダー内で返す必要があると記述されています。この機構を使用すると、そのようなヘッダーの形式を指定できます。