SOAPInput、SOAPRequest、および SOAPAsyncRequest の各ノードには、WSDL モードとゲートウェイ・モードの 2 つの動作モードがあります。
ノードが WSDL モードで構成される場合 (デフォルト)、ノードによって実行される Web サービス操作は、ノードを構成する WSDL によって指定されます。 ゲートウェイ・モードでは、メッセージ・フロー内の SOAP ノードが、汎用 SOAP 要求メッセージを以下の 3 つのシナリオで処理します。
- プロバイダー・シナリオ
- プロバイダー・シナリオでは、WebSphere® Message
Broker は SOAPInput ノードを使用して汎用 SOAP/HTTP または SOAP/JMS 要求を受信し、SOAPReply ノードを使用して発信元のクライアントに応答を送信します。 単一の SOAPInput ノードは任意の SOAP 要求メッセージを受信でき、WSDL によっては構成されません。
- コンシューマー・シナリオ
- コンシューマー・シナリオでは、WebSphere Message
Broker は、SOAPRequest ノード、または SOAPAsyncRequest および SOAPAsyncResponse ノードの対を使用して、任意の外部 Web サービス・プロバイダーに SOAP 要求を経路指定できます。 ローカル環境にエンドポイント情報を指定できます。これは、アウトバウンド要求メッセージを送信するために実行時に動的に使用されます。
- ファサード・シナリオ
- ファサード・シナリオでは、WebSphere Message
Broker は異なる複数のクライアントから SOAP 要求を受信して、複数のバックエンドの Web サービス・プロバイダーまたは既存システムのいずれかに経路指定できます。 バックエンドの Web サービス・プロバイダーのエンドポイント情報は、ローカル環境で値を設定することにより、実行時に動的に指定できます。
SOAP ノードは 2 つの異なる動作モードにおいて、動作と構成がそれぞれ異なります。
- ノードをゲートウェイ・モードで構成する場合、いくつかのノード・プロパティーはゲートウェイ・モードでは適用されないため、無効になります。
- トランスポート・プロパティーを構成する必要があります。 トランスポート固有のプロパティーは、「トランスポート」プロパティーによっては必須になります。例えば、選択されるトランスポートが「JMS」の場合、JMS トランスポート・プロパティーは必須です。
- 指定された単一トランスポート (例えば HTTP) のメッセージだけを受信するように SOAPInput ノードを構成できます。 さまざまなトランスポートでメッセージを送受信するには、別の入力ノードを使用してください。
- 指定された単一トランスポート (例えば JMS) のメッセージだけを送信するように SOAPRequest ノードを構成できます。 ただし、ローカル環境を使用して、任意のメッセージ用にトランスポートを変更できます。
- 単一トランスポート (例えば JMS) を介したメッセージだけを送受信するように SOAPAsyncRequest ノードを構成できます。このトランスポートは常に、対の SOAPAsyncResponse ノードで、応答メッセージを受信するために使用されます。 ただし、ローカル環境を使用して、任意のメッセージ用にアウトバウンド要求トランスポートを変更できます。
例えば、JMS トランスポートを使用するように SOAPAsyncRequest ノードが構成される場合、
その対の SOAPAsyncResponse ノードでは常に、JMS を介して応答を受信することが予期されます。これは変更できません。
また、実行時に、SOAPAsyncRequest ノードは JMS をデフォルトのトランスポートとみなします。 しかし、その代わりに、ローカル環境を使用して HTTP を介して要求を送信するように指示できます。
この要求には、SOAPAsyncResponse ノードの WSA:ReplyTo JMS アドレスが含まれています。
- SOAPInput ノードが片方向 SOAP 要求を受信する場合、ノードはそれが片方向メッセージであることを検出しようとします。 ただし、ノードはすべてのケースを検出できるわけではないため、ローカル環境を使用して、それが片方向メッセージであることを SOAPReply ノードに伝えることが必要になる場合があります。 以下に例を示します。
SET OutputLocalEnvironment.Destination.SOAP.Reply.Gateway.OneWay = True;
詳しくは、Gateway モードにおける片方向メッセージを参照してください。
- ゲートウェイ・モードで SOAPAsyncRequest ノードを使用する場合、SOAPAsyncRequest ノードの前に、メッセージ・フローのローカル環境の WS-Addressing の「アクション」プロパティーを設定する必要があります。 このプロパティーは、OutputLocalEnvironment.Destination.SOAP.Request.WSA.Action を使用して設定します。
- ゲートウェイ・モードで SOAPRequest ノードを使用し、リモート・サービス・プロバイダーが SOAPAction を想定する場合、フロー内に SOAPAction を設定します。 ゲートウェイ・モードで、ノードは WSDL からの SOAPAction を使用できません。 例えば、ESQL を使用して SOAPAction には、次のようにします。
SET OutputRoot.HTTPRequestHeader.SOAPAction = 'mySoapAction';
デフォルトで、SOAPRequest ノードは空の SOAPAction「""」を送信します。
- ゲートウェイ・モードで SOAPRequest ノードを使用し、WS-Addressing を使用している場合、SOAPRequest ノードの前に、メッセージ・フローのローカル環境の WS-Addressing の「アクション」プロパティーを設定する必要があります。 このプロパティーは、OutputLocalEnvironment.Destination.SOAP.Request.WSA.Action を使用して設定します。
- ゲートウェイ・モードでは、ノード・プロパティーに詳細を指定することにより、SOAPInput ノード、または SOAPRequest および SOAPAsyncRequest ノードに、インバウンド「理解必須」ヘッダーを追加できます。 ただし、サービスを動的に追加する場合には、すべての「理解必須」ヘッダーが前もって分かるとは限らないため、名前、ネーム・スペース、操作、またはそれら 3 つの任意の組み合わせに対してワイルドカード (*) を使ってそのヘッダーを追加できます。 これにより、新しいサービスが追加されたときに、メッセージ・フローを再デプロイする必要がなくなります。 ただし、名前、ネーム・スペース、および操作にワイルドカードを追加するということは、「理解必須」フラグを持つすべてのヘッダーがフローに入ることが許可されることを意味します。
- SOAPInput ノードをゲートウェイ・モードに設定し、SOAPRequest ノードは WSDL モードで動作している状態で、SOAPReply ノードをファサード・メッセージ・フローの一部として使用する場合、SOAPReply ノードでの妥当性検査を無効にするか、上記のように、プロパティー・フォルダーに明示的なメッセージ・セットを追加する必要があります。 妥当性検査を無効にしない場合、またはプロパティー・フォルダーのメッセージ・セットを参照しない場合、メッセージがシリアライズされるときに構文解析エラーが発生します。
- SOAP ノードはインバウンド SOAP 1.2 メッセージも受け入れますが、ゲートウェイ・モードでは SOAP 1.1 メッセージをデフォルトで送信します。 アウトバウンド SOAP 1.2 メッセージを送信するには、SOAP 1.2 が必須であることが示されるように SOAP.Context フィールドを設定します。 例えば、ESQL を使用してこのフィールドを設定するには、次のようにします。
SET OutputRoot.SOAP.Context.SOAP_Version = '1.2';
アウトバウンド・メッセージは SOAP 1.2 SOAP エンベロープを使用することになります。 SOAP エンベロープによって使用されるネーム・スペース接頭部も設定できます。 例えば、ESQL を使用して、次のようにします。DECLARE soapenc NAMESPACE 'http://www.w3.org/2003/05/soap-envelope';
SET OutputRoot.SOAP.Context.Namespace.(SOAP.NamespaceDecl)xmlns:soap12 = soapenc;
SET OutputRoot.SOAP.Context.SOAP_Version = '1.2';
この例では、soap12 が、アウトバウンド・メッセージで使用される接頭部です。