コネクターの要求処理機能を使用して、コラボレーションから 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(S) プロトコル・ハンドラーは、このセクションに記載している点を除き、プロトコル・ハンドラーで説明しているように動作します。図 28 は、同期操作のための SOAP/HTTP-HTTPS プロトコル・ハンドラーを表しています。
図 28. SOAP/HTTP-HTTPS プロトコル・ハンドラー: 同期要求処理
図 29 は、非同期要求処理のための SOAP/HTTP-HTTPS プロトコル・ハンドラーを表しています。
図 29. SOAP/HTTP-HTTPS プロトコル・ハンドラー: 非同期要求処理
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 に示したように、以下を決定します。
ContentType | デフォルトの Charset |
text/* | ISO-8859-1
詳しくは、RFC2616 を参照してください。 |
application/* | デフォルトなし |
その他 | デフォルトなし |
表 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 で渡されたヘッダー値を、この要求応答イベント環境に合った正しい値にすることは、コラボレーション側の責任となります。ハンドラーは、次の規則に従って、標準ヘッダーおよびカスタム・プロパティーを取り込みます。
SOAP/JMS プロトコル・ハンドラーは、このセクションに記載している点を除き、プロトコル・ハンドラーで説明しているように動作します。
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 ヘッダー |