この章では、メッセージのコンテンツに基づいて、ゲートウェイにメッセージをルーティングする方法について説明します。この章では次の項について説明します。
Oracle Web Services Manager(Oracle WSM) Gatewayのコンテンツ・ルーティング・ルールを使用すると、実際のメッセージのコンテンツに基づいて、各メッセージを異なるWebサービス・プロバイダに送信するようにメッセージ・ルーティングをカスタマイズできます。Oracle WSM Gatewayのディスパッチ論理では、受信SOAPメッセージの宛先URLに基づいて、異なるパイプライン(つまり、異なるサービス・エンドポイント)に受信メッセージをルーティングします。受信メッセージがSOAPメッセージではない場合でも、メッセージはSOAPに正規化(ラップ)されるため、このディスパッチ論理が同様に適用されます。
クライアントが認識する必要があるのは、ゲートウェイへのメッセージの送信に使用するクライアント・アクセスURLのみです。ゲートウェイは、メッセージをWebサービスURLにルーティングします。クライアントはWebサービスのURLを把握する必要はありません。多くの場合、このURLはクライアントからはわからないようにするのが賢明です。これは次の理由によります。
ゲートウェイはビジネス・パートナに公開されますが、Webサービスは内部的なものであり、外部で公開されません。
管理者はサービス・エンドポイントをコンテンツに基づいて指定できるので、クライアントにWebサービスのエンドポイントURLを公開しないほうが合理的です。
コンテンツ・ルーティングを使用すると、クライアントは、特定の転送サービス・アドレスを指定せずにメッセージをゲートウェイに送信します。ルーティングは、SOAPエンベロープ(ヘッダーまたはボディ)やSOAP添付ファイルのXMLコンテンツ、および指定したコンテンツ・ルーティング・ルールに基づきます。コンテンツ・ルーティングは、すべてのトランスポート・プロトコルで受信するSOAPメッセージに適用できます。また、ゲートウェイに登録されているサービスにルーティングできます。
/fsを含むURL接頭辞(http://host:port/gateway/fs/crouterなど)付きでメッセージがゲートウェイに届くと、ゲートウェイは、次の事項に基づいて、特定のWebサービスにメッセージを転送します。
メッセージのコンテンツ
ゲートウェイに構成されているコンテンツ・ルーティング・ルール
このサービスは、HTTP(S)、JMSおよびMQなどの使用可能なトランスポートで、次の方法を使用して起動できます。
管理者は、コンテンツベースのルールを構成して、ゲートウェイに送信するメッセージの宛先を指定します。ゲートウェイは、これらのルールに基づいてメッセージを評価します。
ある大手保険会社には、保険契約の受信見積依頼書(RFQ)を処理する2つのWebサービスがあります。
Webサービス1は、住宅所有者からのRFQを処理します。
Webサービス2は、車両所有者からのRFQを処理します。
この保険会社は、これら2つのサービスのURLを、クライアント・アプリケーションに直接公開しないことにしました。かわりに、クライアントには1つのURLのみを公開し、RFQのclientTypeフィールドに基づいて、メッセージがゲートウェイでWebサービス1またはWebサービス2にルーティングされるようにすることを決定しました。
システム管理者はゲートウェイ用に次のルールを作成します。
ルール1: IF /soap:Body/RFQ/clientType = HOMEOWNER THEN ROUTE to service1
ルール2: IF /soap:Body/RFQ/clientType = AUTOOWNER THEN ROUTE to service2
メッセージがゲートウェイに届くと、ゲートウェイは各ルールを順番に評価し、一致する最初のルールに従って、メッセージをルーティングします。
コンテンツ・ルーティング・ルールは、単純な条件一致によるXPath1式の作成に基づきます。ルールは、trueまたはfalse値を返す条件、およびアクションによって構成されます。さらに複雑な条件のルールを作成するには、単純な条件を複数作成し、ブール式のANDで結合して使用してください。
表4-1 ルール作成の要素
要素 | 説明 |
---|---|
ルール |
ルールは条件とアクションで構成されます。条件は1つ以上の単純な条件のセットです。評価されると、trueまたはfalse値を返します。アクションは、関連する条件がtrueの場合に実行される1つのルーティング操作を示します。 |
条件 |
条件は、ブール式のANDで結合された1つ以上の単純な条件から構成され、trueまたはfalse値を返します。単純な条件は次の演算子を使用して定義できます。EQUALS: XML要素の値はX(文字列の一致のみ)と同じです。NOT_EQUALS: XML要素の文字列値は一致しません。XEXISTS: XML要素はSOAPヘッダーやボディ、または添付ファイルに存在します。NOT_EXISTS: XML要素はSOAPヘッダーやボディ、または添付ファイルに存在しません。 |
アクション |
関連する条件がtrueの場合、アクションは指定したWebサービスにメッセージをルーティングまたは転送します。 |
Web Services Manager Controlを使用して、次の操作を実行できます。
新しい条件(XPath変数、条件演算子、値)を指定するか、必要に応じてXPath変数を定義するためのネームスペースの接頭辞を指定して、新しいコンテンツ・ルーティング・ルールを追加します。
すべてのコンテンツ・ルーティング・ルールを一覧表示します。
コンテンツ・ルーティング・ルールを削除します。
コンテンツ・ルーティング・ルールを評価する優先順位を変更します。
ターゲットのWebサービスのアドレスを指定します。
コンテンツ・ルーティング・ルールでは、次の構文を使用します。
条件: IF <variable> <EQUALS/EXISTS> <value>
ネームスペース: WHERE <prefix> = <namespace_url>
アクション: THEN Route To <serviceId>
アプリケーション・ネームスペースはアプリケーションごとに異なり、全体としてアプリケーションの設計ガイドラインに依存します。
SOAP-ENVは、http://schemas.xmlsoap.org/soap/envelope/
を指し示すネームスペースです。
次のコード・サンプルは、典型的なSOAPメッセージを示しています。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <r:RFQ xmlns:r="http://businessdocs.com/RFQ"> <clientType>HOMEOWNER</clientType> <clientID>12345</clientID> </r:RFQ> </soap:Body> </soap:Envelope>
次に示すのは、前述のサンプルSOAPメッセージ用に定義できる、2つのコンテンツ・ルーティング・ルールのサンプルです。
/soap:Envelope/soap:Body/r:RFQ/clientType
がHOMEOWNER
と等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/
、r
ネームスペースがhttp://businessdocs.com/RFQ
である場合、Service1
にルーティングします。
/soap:Envelope/soap:Body/r:RFQ/clientType
がAUTOOWNER
と等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/
、r
ネームスペースがhttp://businessdocs.com/RFQ
である場合、Service2
にルーティングします。
この項では、コンテンツ・ルーティングを使用してWebサービスにアクセスする方法について説明します。
コンテンツ・ルーティングを使用してWebサービスにアクセスするには
Web Services Manager Controlのナビゲーション・ペインから、「ツール」を選択して、「テスト・ページ」をクリックします。
ゲートウェイに登録されているWebサービスのURLを入力して、「問合せの発行」をクリックします。
「Webサービスのテスト」ページが更新され、設定可能なエンドポイントURLとその他のパラメータが表示されます。
エンドポイントURLを次のURLで置き換えます。
http://
host_name:port
/gateway/fs/crouter
「起動」をクリックします。
次の手順では、サンプルSOAPメッセージのコンテンツ・ルーティング・ルールを作成します。
/soap:Envelope/soap:Body/r:RFQ/clientType
がHOMEOWNER
と等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/
、r
ネームスペースがhttp://businessdocs.com/RFQ
である場合、Service1
にルーティングします。
Oracle WSMコンテンツ・ルーティングのルールを作成するには
コンテンツ・ルーティング・ルールを定義するゲートウェイのコンポーネント管理者としてログインし、Web Services Manager Controlを起動します。
ナビゲーション・ペインで、「ポリシー管理」を選択して、「ポリシーの管理」を選択します。
Web Services Manager Controlに、ゲートウェイなどの、現在登録されているOracle WSMコンポーネントのリストが表示されます。
コンテンツ・ルーティングを追加するゲートウェイの「編集」をクリックします。
Web Services Manager Controlには、そのゲートウェイ・コンポーネントに現在割り当てられているプロパティのリストを示す「コンポーネント・プロパティの編集」ページが表示されます。
「コンテンツ・ルーティング」をクリックします。
Web Services Manager Controlには、そのゲートウェイに現在定義されているコンテンツ・ルーティング・ルールのリストが表示されます(1つ以上定義されている場合)。
Oracle WSMは、条件No matchに基づいてデフォルトのコンテンツ・ルーティング・ルールを提供します。条件No matchは他のコンテンツ・ルーティングの条件が一致しない場合に起動します。
「追加」をクリックします。
Web Services Manager Controlに、空の「ルールの追加/編集」ページが表示されます。このページで、新しいコンテンツ・ルーティング・ルールに条件とアクションを指定します。デフォルトでは、SOAP ENVELOPEオプションが選択されています。
「If」フィールドにSOAPメッセージのIF条件を入力して、「Then」フィールドにメッセージのルーティング先のWebサービスを入力します。
注意: 特定のサービスの場所にメッセージをルーティングするために、そのサービス名(サービスの登録時に指定)またはサービスID番号(SID)を指定できます。 |
「参照先」をクリックして、ルールのIF条件に含まれるXPath変数のネームスペースを指定します(図4-3)。
保険会社の例では、最初のコンテンツ・ルーティング・ルールは次のようになります。/soap:Envelope/soap:Body/r:RFQ/clientType
がHOMEOWNER
と等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/
、r
ネームスペースがhttp://businessdocs.com/RFQ
である場合、Service1
にルーティングします。
エントリを完了したら、「保存」をクリックします。
Web Services Manager Controlにコンテンツ・ルーティング・ルールが一覧表示され、追加した新しいルールも表示されます。
ルールの表示順序は、ゲートウェイに送信されるメッセージにコンテンツ・ルーティング・ルールが適用される順序です。受信メッセージは、Oracle WSM Gatewayがtrueとして検証した最初のルールに従ってルーティングされます。ルールの表示順序は、使用する環境に最適な選択基準になるように変更できます。
ルールの順序を変更するには、上矢印または下矢印をクリックします。
「ネームスペース」をクリックすると、このゲートウェイに定義されたすべてのルールで使用するすべてのXMLネームスペースを表示するウィンドウが開きます。
ゲートウェイのすべてのコンテンツ・ルーティング・ルールの中で、1つの接頭辞は1つのネームスペースに対してのみマッピングできます。図4-4には、rおよびsoapという2つの接頭辞があります。たとえば、どちらもsoapという名前の同じ接頭辞がある場合、これらを別々のネームスペースにマッピングすることはできません。
SOAPメッセージのXMLコンテンツに基づいてコンテンツ・ルーティング・ルールを定義する以外に、SOAP添付ファイルのXPathコンテンツに基づくルールを定義することもできます。
添付ファイルのXPathコンテンツを使用してルールを作成するには
コンテンツ・ルーティング・ルールを定義するゲートウェイのコンポーネント管理者としてログインし、Web Services Manager Controlを起動します。
ナビゲーション・ペインで、「ポリシー管理」をクリックして、「ポリシーの管理」をクリックします。
Web Services Manager Controlに、ゲートウェイなどの、現在登録されているOracle WSMコンポーネントのリストが表示されます。
コンテンツ・ルーティングを追加するゲートウェイの「編集」をクリックします。
Web Services Manager Controlには、そのゲートウェイ・コンポーネントに現在割り当てられているプロパティのリストを示す「コンポーネント・プロパティの編集」ページが表示されます。
「コンテンツ・ルーティング」をクリックします。
Web Services Manager Controlには、そのゲートウェイに現在定義されているコンテンツ・ルーティング・ルールのリストが表示されます(1つ以上定義されている場合)。
「追加」をクリックして、ATTACHMENT XPATHオプションを選択します。
Web Services Manager Controlには、「ルールの追加/編集」ページが表示されます。
メッセージに対して添付ファイルを特定する、関連のXPath変数(SOAPメッセージに含まれる)を指定します。たとえば、次のようになります。
/soap:Envelope/soap:Body/source/@href
添付ファイルのコンテンツと一致する、1つ以上のルール条件を入力します。「If」フィールドに、添付ファイルにあるXPath変数を指定します。たとえば、次のようになります。
IF /policy/model EQUALS lexus
「参照先」をクリックして、ルールのIF条件に含まれるXPath変数のネームスペースを指定します。たとえば、次のようになります。
http://schemas.xmlsoap.org/envelope
「Then」フィールドに、メッセージのルーティング先のWebサービスを指定します。
「保存」をクリックします。
新しい添付ファイルのXPathルールが、定義されたゲートウェイのコンテンツ・ルーティング・ルールに表示されます。
注意: 添付ファイルのXPathコンテンツ・ルーティング・ルールは、XMLコンテンツを含む添付ファイルの場合にのみ定義できます。これらの添付ファイルは、SOAP-with-Attachments仕様を使用して、SOAPメッセージ内で参照する必要があります。 |