要求処理

コネクターの要求処理機能を使用して、コラボレーションから Web サービスを呼び出すことができます。開発タスクでは、WSDL ODA を使用して Web サービス・トップレベル・オブジェクト (TLO) を生成し、それを配置するようにコラボレーションを構成します。詳しくは、要求処理のためのコラボレーションの有効化を参照してください。コネクターおよびその要求処理コンポーネント (プロトコル・ハンドラー・フレームワークおよびプロトコル・ハンドラー) も構成する必要があります。

コネクターは、実行時にビジネス・オブジェクトの形でコラボレーションから要求を受け取ります。ビジネス・オブジェクト (SOAP 要求、およびオプションで SOAP 応答および SOAP 障害ビジネス・オブジェクト) は、WSDL ODA によって生成される TLO に格納され、Web サービスを使用するように構成されているコラボレーションによって発行されます。TLO およびその子ビジネス・オブジェクトには、処理モード (同期または非同期) を指定する属性および ASI、データ・ハンドラー MIME タイプ、使用するプロトコル・ハンドラーの種類、およびターゲット Web サービスのアドレスが入っています。プロトコル・ハンドラーは、この情報を使用して、SOAP データ・ハンドラーのインスタンスを呼び出し、要求ビジネス・オブジェクトを SOAP 要求メッセージに変換し、ターゲット Web サービスを呼び出します。同期モードの場合、プロトコル・ハンドラーは、データ・ハンドラーを再度呼び出し、応答メッセージを SOAP 応答ビジネス・オブジェクトに変換して、これをコラボレーションに返送します。

コネクターは、SOAP 要求メッセージに対する応答として、リモート側の取引先から次のいずれかを受け取ることができます。

プロトコル・ハンドラーは、要求処理において重要な役割を果たしています。

プロトコル・ハンドラー

コラボレーションは、HTTP、HTTPS、または JMS トランスポートを介して Web サービスを呼び出すことができます。このコネクターには次の 2 つのプロトコル・ハンドラーがあり、それぞれに対応するチャネルがあります。

プロトコル・ハンドラー・フレームワークはプロトコル・ハンドラーを管理し、起動時にプロトコル・ハンドラーをロードします。コネクターが要求ビジネス・オブジェクトを受け取ると、要求スレッド (それぞれのコラボレーション要求は、独自のスレッドで送られてきます) は、プロトコル・ハンドラー・フレームワークを呼び出して、要求を処理します。

プロトコル・ハンドラー・フレームワークは、TLOs Handler 属性 ASI を読み取り、使用するプロトコル・ハンドラーを決定します。一連の規則 (SOAP/HTTP-HTTPS プロトコル・ハンドラー処理および SOAP/JMS プロトコル・ハンドラー処理を参照) を適用すると、プロトコル・ハンドラーはデータ・ハンドラーを呼び出して、要求ビジネス・オブジェクトを SOAP 要求メッセージに変換します。プロトコル・ハンドラーは、要求メッセージをトランスポート (HTTP(S) または JMS) メッセージにパッケージします。要求ビジネス・オブジェクトで SOAPAction ASI を検出すると、プロトコル・ハンドラーは、これを要求メッセージのヘッダーに追加します。

次に、プロトコル・ハンドラーは、要求ビジネス・オブジェクトのプロトコル構成 MO の Destination 属性を読み取り、ターゲット・アドレスを判別します。プロトコル・ハンドラーは、次に、要求メッセージを使用してターゲット Web サービスを呼び出します。

プロトコル・ハンドラーは、ws_mode TLO ASI を読み取り、処理モードが同期または非同期のいずれであるかを判別します。この ASI が asynch に設定されていると、プロトコル・ハンドラー処理は完了します。このように設定されていない場合、プロトコル・ハンドラーは応答メッセージを待ちます。応答メッセージが到着すると、プロトコル・ハンドラーは、プロトコル・ヘッダーとペイロードを抽出します。次にデータ・ハンドラー (MimeType TLO 属性によって指示される) を呼び出して、メッセージを応答または障害ビジネス・オブジェクトに変換します。プロトコル・ハンドラーは、プロトコル構成 MO を再度使用して、プロトコル・ヘッダーをビジネス・オブジェクトに設定します。プロトコル・ハンドラーは、次に、応答または障害ビジネス・オブジェクトをコラボレーションに戻します。

コネクターの構成によっては、1 つまたは複数のプロトコル・ハンドラーがコネクターにプラグされている場合があります。コネクター固有のプロパティーを指定することにより、プロトコル・ハンドラーを構成することができます。

SOAP/HTTP-HTTPS プロトコル・ハンドラー処理

SOAP/HTTP(S) プロトコル・ハンドラーは、このセクションに記載している点を除き、プロトコル・ハンドラーで説明しているように動作します。図 28 は、同期操作のための SOAP/HTTP-HTTPS プロトコル・ハンドラーを表しています。

図 28. SOAP/HTTP-HTTPS プロトコル・ハンドラー: 同期要求処理


図 29 は、非同期要求処理のための SOAP/HTTP-HTTPS プロトコル・ハンドラーを表しています。

図 29. SOAP/HTTP-HTTPS プロトコル・ハンドラー: 非同期要求処理


注:
このセクションでは、SOAP/HTTP プロトコル処理についてのみ説明します。

SOAP/HTTP-HTTPS プロトコル・ハンドラーは、SOAP 要求ビジネス・オブジェクトのオブジェクト・レベル ASI (cw_mo_http) を使用して、プロトコル構成 MO を決定します。SOAP/HTTP-HTTPS プロトコル・ハンドラーは、HTTP プロトコル構成 MO の Destination 属性を読み取り、ターゲット Web サービスの URL を決定します。URL が欠落している、あるいは不完全であれば、プロトコル・ハンドラーはサービス呼び出しで失敗します。HTTP プロトコル構成 MO およびその属性の詳細については、要求処理のための HTTP プロトコル構成 MOを参照してください。

SOAP/HTTP-HTTPS プロトコル・ハンドラーは、SOAP データ・ハンドラーによって戻される SOAP 要求メッセージを使用して、Web サービスを呼び出します。HTTP プロキシー・コネクターの構成プロパティーが指定されている場合、SOAP/HTTP(S) プロトコル・ハンドラーは、それに応じた振る舞いをします。応答が戻されると、SOAP/HTTP(S) プロトコル・ハンドラーはそれを読み取ります。

表 33 は、発信要求メッセージの Charset、MimeType、ContentType、および ContentType ヘッダーを決定する際に SOAP/HTTP-HTTPS プロトコル・ハンドラーが使用する規則の優先順位を要約したものです。


表 33. アウトバウンド・メッセージに対する SOAP/HTTP-HTTPS プロトコル・ハンドラーの処理規則
優先順位 Charset MimeType ContentType ContentType ヘッダー
1 プロトコル構成 MO の Content-Type ヘッダー TLO 属性の MimeType プロパティー プロトコル構成 MO の Content-Type ヘッダー プロトコル構成 MO の Content-Type ヘッダー
2 TLO 属性の Charset プロパティー ContentType (デフォルト) text/xml (デフォルト) ContentType および Charset を使用して、Content-Type ヘッダーを構成します。
3 ContentType が text/* の場合、デフォルトは ISO-8859-1 です。それ以外の場合は、charset を使用しません。


表 33 に示したように、以下を決定します。

表 35 は、応答メッセージの Charset、MimeType、ContentType、および ContentType ヘッダーを決定する際にハンドラーが使用する規則の優先順位を要約したものです。


表 35. インバウンド同期応答メッセージに対する SOAP/HTTP(S) プロトコル・ハンドラーの処理規則
優先順位 Charset MimeType ContentType ContentType ヘッダー
1 着信 HTTP メッセージの Content-Type ヘッダー値から得られる Charset パラメーター値 要求ビジネス・オブジェクトのプロトコル構成 MO の MessageTransformationMap 子ビジネス・オブジェクト Content-Type ヘッダー値から得られる着信 HTTP メッセージ・タイプ/サブタイプ値 着信 HTTP メッセージの Content-Type ヘッダー
2 要求ビジネス・オブジェクトのプロトコル構成 MO の MessageTransformationMap 子ビジネス・オブジェクト 要求メッセージの MimeType。ただし要求と応答の ContentType が一致する場合のみ。

3 要求メッセージの Charset。ただし要求と応答の ContentType が一致する場合のみ。 TLO の MimeType プロパティー

4 TLO の Charset プロパティー ContentType (デフォルト)

5 Content-Type が text/* の場合、デフォルトは ISO-8859-1 です。それ以外の場合は、Charset を使用しません。


表 35 に示したように、以下を決定します。

ハンドラーは HTTP プロトコル構成 MO を処理します。HTTP プロトコル構成 MO で渡されたヘッダー値を、この要求応答イベント環境に合った正しい値にすることは、コラボレーション側の責任となります。ハンドラーは、次の規則に従って、標準ヘッダーおよびカスタム・プロパティーを取り込みます。

  1. ハンドラーは、特殊な属性 (ObjectEventId など) を無視するため、HTTP プロトコル構成 MO の各項目を調べます。
  2. 空でない各ヘッダーが、発信メッセージに書き込まれ、追加処理 (例えば、Content-Type ヘッダーに対する処理) が行われる場合があります。
  3. 上記の方法では、メッセージに標準でないヘッダーが設定される可能性があるにもかかわらず、ハンドラーは、メッセージの論理的または意味的な正しさを保証しないことに注意してください。
  4. HTTP プロトコル構成 MO UserDefinedProperties 属性に 1 つ以上のカスタム・プロパティーがある場合、ハンドラーは、それらをエンティティー・ヘッダー・セクション (最後のヘッダー・セクション) に追加します。カスタム・プロパティーの詳細については、要求処理のためのユーザー定義のプロパティーを参照してください。

注:
HTTP プロトコル構成 MO のヘッダー Connection、Trailer、 Transfer-Encoding、Content-Encoding、Content-Length、Content-MD5、 Content-Range の中からいずれを指定しても、ほとんどの場合、正しくない HTTP メッセージが作成されます。

SOAP/JMS プロトコル・ハンドラー処理

SOAP/JMS プロトコル・ハンドラーは、このセクションに記載している点を除き、プロトコル・ハンドラーで説明しているように動作します。

注:
LookupQueueUsingJNDI 構成プロパティーが true に設定されている場合、SOAP/JMS プロトコル・ハンドラーは、JNDI を使用して宛先キューを検索します。JNDI プロパティーは、コネクター・プロパティーに指定されます。詳しくは、コネクターおよび JMSおよび コネクター固有の構成プロパティーの JNDI 関連のプロパティーを参照してください。

SOAP/JMS プロトコル・ハンドラーは、SOAP データ・ハンドラーによって戻された Web サービス要求メッセージの本文と 表 36 に示すとおりに設定されている JMS ヘッダーを使用して、JMS トランスポート・メッセージを作成します。


表 36. SOAP/JMS プロトコル・ハンドラーによって要求メッセージに設定されるヘッダー値
JMS ヘッダー名 SOAP/JMS プロトコル構成 MO に
設定されていない場合のデフォルト値
JMSPriority 4
JMSExpiration 0
JMSDeliveryMode PERSISTENT
JMSReply
JMSCorrelationId
JMSRedelivered
JMSTimestamp
JMSType

ターゲット Web サービスが非同期に呼び出される場合、JMSReplyTo ヘッダーは設定されません。そうでない場合 (同期処理の場合)、SOAP/JMS プロトコル・ハンドラーにより JMSReplyTo ヘッダーが設定されます。SOAP/JMS プロトコル・ハンドラーは、ReplyToQueue 構成プロパティーを使用して、JMSDestination (ターゲット Web サービスからの応答または障害が戻される宛先) を取得し、それを JMS トランスポート・メッセージの JMSReplyTo ヘッダーに設定します。

図 30 は、同期要求操作のための SOAP/JMS プロトコル・ハンドラー処理を表しています。

図 30. SOAP/JMS プロトコル・ハンドラー: 同期要求処理


図 31 は、非同期要求操作のための SOAP/JMS プロトコル・ハンドラー処理を表しています。

図 31. SOAP/JMS プロトコル・ハンドラー: 非同期要求処理


SOAP/JMS プロトコル・ハンドラーは、SOAP 要求ビジネス・オブジェクトのオブジェクト・レベル ASI (cw_mo_jms) を使用して、プロトコル構成 MO を決定します。プロトコル構成 MO の Destination 属性には、ターゲット Web サービスのキュー名を指定されます。JNDI が使用可能である場合、SOAP/JMS プロトコル・ハンドラーは、JNDI オブジェクトを検索して、SOAP 要求メッセージの JMSDestination を取得します。そうでない場合は、SOAP プロトコル構成 MO の Destination 属性を使用します。

ResponseWaitTimeout プロパティーに指定されているインターバル中に応答が到着しない場合、SOAP/JMS プロトコル・ハンドラーはコラボレーション要求の処理に失敗します。SOAP 応答 (または障害) メッセージが到着すると、SOAP/JMS プロトコル・ハンドラーは、SOAP データ・ハンドラーにより変換するために JMS ヘッダーおよびペイロードを抽出します。次に、SOAP/JMS プロトコル・ハンドラーは、応答 (または障害) ビジネス・オブジェクトでプロトコル構成 MO を使用して JMS ヘッダーをマップし、SOAP 応答 (または障害) ビジネス・オブジェクトを TLO に設定します。表 37 にこのマッピングを示しています。


表 37. 同期要求処理における応答のプロトコル構成 MO と JMS ヘッダー属性のマッピング
プロトコル構成 MO 属性 JMS ヘッダー名 説明
Destination JMSDestination 応答メッセージから得られる JMSDestination ヘッダー
MessageId JMSMessageId 応答メッセージから得られる JMSMessageId ヘッダー
Priority JMSPriority 応答メッセージから得られる JMSPriority ヘッダー
Expiration JMSExpiration 応答メッセージから得られる JMSExpiration ヘッダー
DeliveryMode JMSDeliveryMode 応答メッセージから得られる JMSDeliveryMode ヘッダー
ReplyTo JMSReplyTo 応答メッセージから得られる JMSReplyTo ヘッダー。JMS API はこのヘッダーを JMSDestination として戻しますが、SOAP/JMS プロトコル・リスナーはキュー名を戻します。
CorrelationId JMSCorrelationId 応答メッセージから得られる JMSCorrelationId ヘッダー
Redelivered JMSRedelivered 応答メッセージから得られる JMSRedelivered ヘッダー
TimeStamp JMSTimeStamp 応答メッセージから得られる JMSTimeStamp ヘッダー
Type JMSType 応答メッセージから得られる JMSType ヘッダー

SOAP/JMS プロトコル・ハンドラーは、次に、TLO をコラボレーションに戻します。

Copyright IBM Corp. 2004