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 メソッドで使用されるメッセージ・モードが制御されます。これらの詳細は以下のとおりです。
-
SoapBindingStyle クラス・キーワードおよび SoapBindingStyle メソッド・キーワード。メソッド・キーワードが優先されます。
-
SoapBodyUse クラス・キーワードおよび SoapBodyUse メソッド・キーワード。メソッド・キーワードが優先されます。
-
ARGUMENTSTYLE クラス・パラメータ。
以下のテーブルは、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 に応じてそれらのキーワードおよびパラメータの値が設定されます。
手動で作成した 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='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<MyMethod xmlns="https://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='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<A xmlns="https://www.demoservice.org">stringA</A>
<B xmlns="https://www.demoservice.org">stringB</B>
<C xmlns="https://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='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='https://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='https://www.demoservice.org'
xmlns:types='https://www.demoservice.org'>
<SOAP-ENV:Body SOAP-ENV:encodingStyle='https://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='https://www.w3.org/2003/05/soap-envelope'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='https://www.w3.org/2003/05/soap-encoding'
xmlns:tns='https://www.demoservice.org'
xmlns:types='https://www.demoservice.org'>
<SOAP-ENV:Body>
<types:MyMethod SOAP-ENV:encodingStyle="https://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='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'
xmlns:tns='https://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>