SOAP メッセージのバリエーション
このトピックでは、SOAP メッセージの主なバリエーションと、InterSystems IRIS Web サービスおよび Web クライアントでのそれらの生成方法を説明します。
InterSystems IRIS Web サービスまたは Web クライアントでは、いくつかのキーワードと 1 つのパラメータによって各 Web メソッドで使用されるメッセージ・バリエーションを指定します。Web サービスを手動で作成した場合は、通常はこれらの項目の既定値が適した値となります。一方、Web サービスまたは Web クライアントを SOAP ウィザードを使用して作成した場合は、WSDL による要求に従って値が設定されます。ただし、状況によっては、特定のメッセージ・バリエーションを選択することが必要になることがあります。
概要
SOAP メッセージのモードは以下のいずれかとなり、WSDL によって形式的に決定されます。
-
Document/literal — これは、InterSystems IRIS Web サービスの既定のメッセージ・モードであり、最も広く使用されるモードです。
このメッセージ・モードでは、ドキュメントスタイルのバインディングとリテラル・エンコード形式を使用します。バインディングとエンコード形式については、サブセクションで簡単に説明します。
-
RPC/encoded — これは、2 番目に広く使用されるモードです。
-
RPC/literal — このモードは、IBM によって広く使用されます。
-
Document/encoded — このモードが使用されることは非常にまれなため、お勧めしません。また、このモードは、WS-I Basic Profile 1.0 に準拠していません。
非公式には、document/literal メッセージには追加のバリエーションが考えられます。それらは、wrapped (InterSystems IRIS での既定値) または unwrapped のいずれかです。ラップされたメッセージでは、メッセージにサブパートを含む単一のパートがあります。これは、複数の引数を取るメソッドの場合に該当します。ラップされたメッセージでは、引数はこのメッセージ内のサブパートになります。ラップされていないメッセージでは、メッセージに複数のパート (引数ごとに 1 つ) があります。
RPC メッセージには、複数のパートが存在する場合があります。
バインディング・スタイル
各 Web メソッドは、Web メソッドの出入力に対するバインディング・スタイルを持ちます。バインディング・スタイルは、ドキュメントまたは RPC のいずれかです。バインディング・スタイルは、WSDL バインディングを SOAP メッセージに変換する方法を決定します。また、SOAP メッセージの本文の形式も制御します。
エンコード形式
各 Web メソッドは、エンコード形式も持ちます。エンコード形式は、リテラルまたはエンコード (SOAP エンコード) のいずれかです。SOAP 1.1 と SOAP 1.2 では、エンコードの詳細が少し異なります。リテラル形式と SOAP エンコード形式の違いの詳細は、"オブジェクトの XML への投影" を参照してください。
メッセージ・バリエーションの決定方法
InterSystems IRIS Web サービスまたは Web クライアントでは、サービス・クラスやクライアント・クラスの詳細によって、各 Web メソッドで使用されるメッセージ・モードが制御されます。これらの詳細は以下のとおりです。
以下のテーブルは、InterSystems IRIS Web メソッド用のメッセージ・モードの決定方法をまとめたものです。
メッセージ・モード |
SoapBindingStyle |
SoapBodyUse |
ARGUMENTSTYLE |
wrapped document/literal |
document (既定) |
literal (既定) |
wrapped (既定) |
unwrapped document/literal |
document |
literal |
メッセージ |
rpc/encoded |
rpc |
encoded |
無視 |
rpc/literal |
rpc |
literal |
無視 |
document/encoded |
document |
encoded |
無視 |
SOAP ウィザードを使用して Web サービス・クラスまたは Web クライアント・クラスを生成する場合、ウィザードでは、開始元の WSDL に応じてそれらのキーワードおよびパラメータの値が設定されます。
Important:
手動で作成した Web サービスでは、通常はこれらの既定値が最適な値となります。
SOAP ウィザードを使用して WSDL から Web クライアントまたは Web サービスを作成すると、InterSystems IRIS は、その WSDL に応じて、これらのキーワードを設定します。この値を変更すると、Web クライアントまたは Web サービスは機能しなくなる場合があります。
メッセージ・バリエーションの例
ここでは、参考情報として、各モードのメッセージの例を紹介します (ただし、document/encoded は非推奨のため除きます)。
また、"生成された WSDL の詳細" の "<message>" も参照してください。
Wrapped Document/Literal
これは、最も一般的なメッセージ・スタイルであり、InterSystems IRIS Web サービスの既定のメッセージ・スタイルです。
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<MyMethod xmlns="http://www.demoservice.org">
<A>stringA</A>
<B>stringB</B>
<C>stringC</C>
</MyMethod>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Message/Unwrapped Document/Literal
これは、前のスタイルを少し変化させたものです。
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<A xmlns="http://www.demoservice.org">stringA</A>
<B xmlns="http://www.demoservice.org">stringB</B>
<C xmlns="http://www.demoservice.org">stringC</C>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
RPC/Encoded
これは、2 番目に広く使用されるスタイルです。以下に SOAP 1.1 の rpc/encoded メッセージを示します。
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='http://www.demoservice.org'
xmlns:types='http://www.demoservice.org'>
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<types:MyMethod>
<A>stringA</A>
<B>stringB</B>
<C>stringC</C>
</types:MyMethod>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP 1.2 では、エンコードの規則が異なるため、以下のようにメッセージが異なります。
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://www.w3.org/2003/05/soap-envelope'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='http://www.w3.org/2003/05/soap-encoding'
xmlns:tns='http://www.demoservice.org'
xmlns:types='http://www.demoservice.org'>
<SOAP-ENV:Body>
<types:MyMethod SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<A>stringA</A>
<B>stringB</B>
<C>stringC</C>
</types:MyMethod>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
RPC/Literal
rpc/literal メッセージの例を次に示します。
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://www.demoservice.org'>
<SOAP-ENV:Body>
<tns:MyMethod>
<tns:A>stringA</tns:A>
<tns:B>stringB</tns:B>
<tns:C>stringC</tns:C>
</tns:MyMethod>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>