ナビゲーションをスキップ

AquaLogic Service Bus Console の使い方

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

メッセージ コンテキスト

この節では、BEA AquaLogic Service Bus メッセージ コンテキスト モデルと特に AquaLogic Service Bus メッセージ フローで使用する事前定義されたコンテキスト変数について説明します。内容は以下のとおりです。

 


メッセージ コンテキスト モデル

BEA AquaLogic Service Bus メッセージ コンテキストは、メッセージが AquaLogic Service Bus を介してルーティングされるときにメッセージ コンテキストとメッセージに関する情報を保持する一連のプロパティです。これらのプロパティはコンテキスト変数と呼ばれ、たとえば、サービス エンドポイントに関する情報は事前定義されたコンテキスト変数によって表されます。AquaLogic Service Bus は、ユーザ定義のコンテキスト変数もサポートします。

メッセージ コンテキストは、XML スキーマで定義されます。通常は、XQuery 式を使用して、プロキシ サービスを定義するメッセージ フローのコンテキスト変数を操作します。

 


事前定義されたコンテキスト変数

以下の表は、事前定義されたコンテキスト変数について説明しています。事前定義されたコンテキスト変数の型は、メッセージ関連の変数、inbound および outbound 変数、operation 変数、fault 変数に分けられます。

メッセージ コンテキスト変数の要素の型については、「メッセージ コンテキスト スキーマ」を参照してください。

表 A-1 AquaLogic Service Bus で事前定義されたコンテキスト変数

コンテキスト変数1 

説明

関連トピック

header

SOAP メッセージの SOAP ヘッダを格納する (SOAP ヘッダを含む SOAP メッセージの場合)。メッセージ タイプが SOAP 以外の場合、header 変数には空の SOAP ヘッダ要素が格納される。

メッセージ関連の変数

body

メッセージ タイプによって異なる。

  • SOAP メッセージの場合は、SOAP エンベロープから抽出した <SOAP:Body> 部を格納する。

  • バイナリ以外の非 SOAP メッセージの場合は、メッセージ コンテンツ全体を <SOAP:Body> 要素でラッピングして格納する。

  • バイナリ メッセージの場合は、バイナリ メッセージのメモリ内コピーへの参照を <SOAP:Body> でラッピングして格納する。

メッセージ関連の変数

attachments

メッセージの MIME 添付を格納する。

メッセージ関連の変数

inbound

メッセージを受信したプロキシ サービスに関する情報、および着信転送ヘッダを格納する。

inbound 変数と outbound 変数

outbound

メッセージの送信先のターゲット サービスに関する情報、および発信転送ヘッダを格納する。

inbound 変数と outbound 変数

operation

プロキシ サービスで呼び出される操作を指定する。

operation 変数

fault

メッセージの処理中に発生したエラーに関する情報を格納する。

fault 変数


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


 

 


メッセージ関連の変数

メッセージ関連の変数である headerbodyattachments は、AquaLogic Service Bus を介して送信されるメッセージの標準書式を表します。これらの変数は、プロキシ サービスが受信したメッセージ コンテンツを使用して初期化され、他のサービスにルーティングまたはパブリッシュされる送信メッセージを作成するために使用されます。

メッセージの処理の一部としてメッセージを変更するには、これらの変数を変更する必要があります。

メッセージ ペイロード (つまり、ヘッダや添付ファイルを除くメッセージ コンテンツ) は、body 変数に格納されます。送信メッセージにどの変数のコンテンツを含めるかについては、メッセージが AquaLogic Service Bus から送信 (パブリッシュまたはルーティング) されるときに決定されます。この決定は、ターゲット エンドポイントが SOAP メッセージを受信するか非 SOAP メッセージを受信するかによって異なります。

header 変数

header 変数には、メッセージに関連付けられている SOAP ヘッダが格納されます。header 変数は、下位要素にヘッダを含む <SOAP:Header> 要素を参照します。非 SOAP メッセージまたはヘッダがない SOAP メッセージの場合、<SOAP:Header> 要素は空になり、下位要素を持ちません。

body 変数

body 変数はコアのメッセージ ペイロードを表し、常に <SOAP:Body> 要素を参照します。SOAP メッセージでも非 SOAP メッセージでも、コアのペイロードは同じ変数とパッケージで使用できます。つまり、<SOAP:Body> 要素でラッピングされます。

attachments 変数

attachments 変数には、メッセージに関連する添付ファイルが格納されます。attachments 変数は、XML スキーマで定義されます。これは、単一のルート ノードである <ctx:attachments> と、添付ファイルごとに 1 つの <ctx:attachment> 下位要素で構成されます。この下位要素には、添付ファイルに関する情報 (MIME ヘッダから派生) と添付コンテンツが含まれます。他のメッセージ関連の変数と同様に、attachments は常に設定されます。ただし、添付ファイルがない場合は、attachments 変数は空の <ctx:attachments> 要素で構成されます。

各添付要素には、以下の表で示された一連の下位要素が含まれます。

表 A-2 attachments 変数の下位要素

attachments 変数の要素

説明1

Content-ID

添付ファイルを識別するグローバルにユニークな参照。型は string

Content Type

添付ファイルのメディアのタイプとサブタイプを指定する。型は string

Content-Transfer-Encoding

添付ファイルのコード化方法を指定する。型は string

Content-Description

コンテンツの説明。型は string

Content-Location

添付ファイルを識別するローカルにユニークな URI ベースの参照。型は string

Content-Disposition

受信側での添付ファイルの処理方法を指定する。型は string

body

添付データを保持する。型は anyType


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


 

型なしの body 要素以外のすべての要素には MIME での解釈と同じ方法で解釈された文字列値が含まれます。たとえば、Content-Type 要素の有効な値は、text/xmltext/xml; charset=utf-8 などです。

添付ファイルの解析は再帰的ではありません。添付ファイルの Content-Typemultipart/... の場合、body 要素には元の MIME コンテンツがパッケージ化されずにバイトのストリームとして保持され、添付ファイルの下位要素は含まれません。MIME ストリームにはバイナリ データが含まれることがあり、その場合このストリームは <binary-content> 参照要素で表します。

バイナリ コンテンツの処理方法については、「body 変数と attachments 変数内のバイナリ コンテンツ」を参照してください。

body 変数と attachments 変数内のバイナリ コンテンツ

body 変数と attachments 変数では、テキスト ベース、XML ベース、および MFL ベースのコンテンツが XML 要素内に直接挿入されます。バイナリ データの場合、XML で使用できないバイト値が含まれることがあるため、AquaLogic Service Bus ではバイナリ コンテンツは XML 要素内に挿入されません。したがって、バイナリ コンテンツを操作することはできませんが、処理は効率的です。

バイナリ コンテンツが受信されると、AquaLogic Service Bus ランタイムによってバイナリ コンテンツがメモリ内ハッシュ テーブルに格納され、そのコンテンツへの参照が XML (body または attachments) 要素に挿入されます。この参照は、以下の XML コードで表されます。

<binary-content ref="..."/>

この ref 属性に、バイナリ コンテンツをユニークに識別する URI または URN を指定します。この XML は、AquaLogic Service Bus パイプライン、ブランチ、またはルート ノードで他のコンテンツと同様に操作できます。ただし、影響を受けるのは、元のバイナリ コンテンツではなく参照だけです。

例を示します。

メッセージが AquaLogic Service Bus から送信されると、参照 XML の URI を使用して、関連バイナリ コンテンツが送信メッセージ内に復元されます。発信メッセージの作成方法については、「送信するメッセージの作成」を参照してください。

クライアントと特定の転送 (特に、電子メール、ファイル、FTP) では、この同じ参照 XML を使用して参照渡しを実装できます。この場合、実行時のプロキシ サービスではなく転送またはクライアントによって、参照 XML が作成されます。また、ref 属性内の URI の値は、参照 XML を作成するユーザによって指定されます。参照 XML が実行時のプロキシ サービスによって作成されない場合 (特に、URI の参照先が、内部で管理されているバイナリ コンテンツであると認識されない場合)、URI は AquaLogic Service Bus により逆参照されず、送信メッセージにコンテンツが挿入されません。

 


inbound 変数と outbound 変数

inbound コンテキスト変数と outbound コンテキスト変数には、着信エンドポイントと発信エンドポイントに関する情報が格納されます。inbound 変数 ($inbound) には要求メッセージを受信したプロキシ サービスに関する情報が格納され、outbound 変数 ($outbound) にはメッセージの送信先であるターゲット ビジネス サービスに関する情報が格納されます。

outbound 変数は、ルート ノードのルート アクションとパブリッシュ アクションで設定されます。ルーティング ノードで設定した要求アクションとパブリッシュ アクションで (さらに、ルーティング ノードの応答アクションでも) $outbound を変更できます。

警告 : inbound コンテキスト変数と outbound コンテキスト変数に対して行った変更の一部は、実行時には無視されます。つまり、特定のヘッダとメタデータの値は、上書きされる場合や、AquaLogic Service Bus ランタイムで無視される場合があります。転送ヘッダとサービス コールアウト アクションを使用して転送ヘッダおよびメタデータを設定する場合、およびテスト コンソールを使用してプロキシ サービスまたはビジネス サービスをテストする場合、同じ制限が適用されます。制限のあるヘッダおよびメタデータの詳細については、「テスト コンソールでのランタイムによる転送設定の使用方法」を参照してください。メッセージ フローで、ルーティング ノードの要求または応答アクションとパブリッシュ アクション以外で $outbound に行った変更は無視されます。つまり、これらの変更は、ルーティング ノードとパブリッシュ アクションで $outbound が初期化されるときに上書きされます。

outbound 変数はサービス コールアウト アクションで変更できません。

inbound 変数と outbound 変数の特性は以下のとおりです。

inbound 変数と outbound 変数の下位要素

この節では、コンテキスト変数 inbound および outbound の下位要素について説明します。また、どの下位要素が実行時に初期化されるかについての情報も示します。コンテキスト変数が初期化される方法については、「コンテキスト変数の初期化」を参照してください。以下の下位要素があります。

service

service 要素は、inboundoutbound いずれの場合も読み込み専用です。下位要素としては providerNameoperation があります。

表 A-3 service 要素の下位要素

下位要素1

説明

providerName

プロキシ サービス プロバイダの名前を指定する。

パブリッシュ アクションおよびルーティング アクションのコンフィグレーションに基づいて初期化される。

operation

(outbound のみ)

outbound 変数で使用され、ターゲット ビジネス サービスで呼び出される処理の名前を指定する。

inbound および outbound に基づいて初期化される。

注意 : この要素は outbound 変数に対してのみ使用される。inbound メッセージの場合は、プロキシ サービスで呼び出される処理の名前が operation 変数によって指定される。


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


 

transport

transport 要素は inbound の場合は読み込み専用です。ただし例外として、response 要素ではこの要素を変更して応答転送ヘッダを設定できます。transport 要素の下位要素を次の表に示します。

表 A-4 transport 要素の下位要素

下位要素1 

説明

uri

以下のようにエンドポイントの URI を指定する。

  • inbound 変数で使用する場合は、メッセージを受信する URI。

  • outbound 変数で使用する場合は、メッセージの送信時に使用する URI。この値は、サービス ディレクトリに登録されている URI 値をオーバーライドする。

初期化

URI 要素は以下のように初期化される。

  • inbound 変数の場合は常に初期化される。

  • outbound 変数の場合は決して初期化されない。outbound に対して URI を設定すると、サービス コンフィグレーションで指定された URI のセットがオーバーライドされる。この要素を設定した場合、URI フェイルオーバはサポートされない。

request



この要素は、inbound 変数の場合は読み込み専用2outbound 変数の場合は変更可能。

要求に関する転送固有のメタデータ (転送ヘッダを含む) を指定する。この要素の値は転送プロトコルによって定義される (具体的には、転送 SDK によって定義された RequestMetaData XML)。したがって、この要素の構造は使用される転送によって異なる。

この要素の転送固有の型については、AquaLogic Service Bus インストールの以下の場所にある JAR ファイル内の、該当する転送スキーマを参照。

BEA_HOME\weblogic91\servicebus\lib\sb-schemas.jar

ここで、BEA_HOME は AquaLogic Service Bus をインストールしたディレクトリを表す。

初期化

URI 要素は以下のように初期化される。

  • inbound 変数の場合は、AquaLogic Service Bus で受信した要求メッセージの情報を使用して初期化される。

  • outbound 変数の場合は、適切な型の request 要素が作成される。使用される型は転送依存。request 要素は通常は空の要素として初期化されるが、一部の重要な転送ヘッダ (content-typeSOAPAction など) については例外。

response



この要素は、outbound 変数の場合は読み込み専用。inbound 変数の場合は変更可能。

応答に関する転送固有のメタデータ (転送ヘッダを含む) を指定する。この要素の値は転送プロトコルによって定義される (具体的には、転送 SDK によって定義された ResponseMetaData XML)。したがって、この要素の構造は使用される転送によって異なる。

この要素の転送固有の型については、AquaLogic Service Bus インストールの以下の場所にある JAR ファイル内の、該当する転送スキーマを参照。

BEA_HOME\weblogic91\servicebus\lib\sb-schemas.jar

ここで、BEA_HOME は AquaLogic Service Bus をインストールしたディレクトリを表す。

初期化

URI 要素は以下のように初期化される。

  • outbound 変数の場合は、AquaLogic Service Bus で受信した応答メッセージの情報を使用して初期化される。

  • inbound 変数の場合は、適切な型の response 要素が作成される。使用される型は転送依存。response 要素は通常は空の要素として初期化されるが、一部の重要な転送ヘッダ (content-typeSOAPAction など) については例外。

標準 HTTP ヘッダの詳細については、http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html を参照。

標準 JMS ヘッダの詳細については、「JMS パブリック API の付加価値拡張機能」を参照。

注意 : MQ ヘッダ ApplOriginDataApplIdentityData、および Accounting Token には BEA JMS と同等のものがない。

mode

通信スタイルが request (一方向) であるか、request-response (双方向) であるかを指定する。

初期化

inbound 変数、outbound 変数のいずれの場合も、サービスおよびそのサービスの操作 (該当する場合) の情報を使用して初期化される。たとえば、要求のみの操作が呼び出されるとき、mode 要素は request-response ではなく request に設定される。

qualityOfService



この要素は、inbound 変数の場合は読み込み専用。

outbound (パブリッシュ アクションまたはルーティング アクションの発信要求アクション) の場合は変更可能。

メッセージ送信時または受信時に使用するサービスの品質を指定する。有効な値は best-effortexactly-once

  • best-effort では、それぞれの送信で独自のトランザクション コンテキストが定義される (トランザクション対応の転送方式の場合)。

    best-effort では、メッセージ処理の信頼性が低く、メッセージの重複が防止されないが、パフォーマンスは最適化される。

    パブリッシュ アクションの結果としてメッセージが送信されるような場合、送信エラーはすべて省略される。

    ルーティング ノードからメッセージが送信されるような場合、送信エラーは省略されない。

  • exactly-once では、送信が着信トランザクション コンテキストの一部として含まれ (コンテキストが存在し、発信転送がトランザクション対応の場合)、エラーが発生して処理が中断され、関連するエラー ハンドラがトリガされる (ルーティングとパブリッシュのいずれの場合も)。

    exactly-once 品質とは、発信メッセージの送信が開始されるまでは終了エラーが発生しないことを前提として、メッセージが着信から発信へと厳密に 1 回だけ配信されることを示す。

初期化

qualityOfService 要素は、inbound 変数および outbound 変数で以下のように初期化される。

  • inbound 変数の場合、サービス品質 (QoS) は転送方式によって決定される。たとえば、JMS/XA 転送では QoS が exactly once となり、HTTP 転送では best effort となる。

  • outbound 変数の場合は、QoS の設定はパブリッシュ時とルーティング時で次のように異なる。

    ルーティング
    - メッセージがルート ノードから別のサービスにルーティングされるとき、QoS は常に inbound コンテキスト変数の値を使用して初期化される。つまり、outbound の QoS は、inbound の QoS が exactly-once の場合に限り exactly-once に設定される。それ以外の場合、outbound の QoS は best effort となる。

    パブリッシュ
    - メッセージがパブリッシュ アクションの結果として別のサービスへとパブリッシュされるとき、サービスの品質 (QoS) は、inbound の設定に関係なく常に best effort に設定される。

retryCount

(outbound のみ)

AquaLogic Service Bus からメッセージを送信するときの再試行回数を指定する。

retryCount が設定されている場合は、ターゲット サービスのコンフィグレーションに含まれるすべての再試行回数の値がこの設定によりオーバーライドされる。

retryInterval

(outbound のみ)

AquaLogic Service Bus からメッセージの再送信を試行するまでの待ち時間を秒単位で指定する。

retryInterval が設定されている場合は、ターゲット サービスのコンフィグレーションに含まれるすべての再試行間隔の値がこの設定によりオーバーライドされる。


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


2. この読み込み専用ルールは強制されません。読み込み専用の要素を変更すると予期できない動作が生じることがあります。


 

security

security 要素の下位要素を次の表に示します。

表 A-5 security 要素の下位要素

下位要素1

説明

transportClient

(inbound のみ、読み込み専用2)

認証された転送レベル ユーザ情報を指定する。username 下位要素を含む。

AquaLogic Service Bus によって初期化される。inbound の transportClient 要素は読み込み専用。

messageLevelClient

(inbound のみ、読み込み専用2)

認証されたメッセージレベル ユーザ情報を指定する。username 下位要素を含む。

AquaLogic Service Bus によって初期化される。inbound の messageLevelClient 要素は読み込み専用。

doOutboundWss

(outbound のみ)

このプロパティは発信 Web サービス セキュリティ (WSS) を制御する。doOutboundWsstrue の場合、プロキシ サービスは、ターゲット サービスの WS-Policy に従って発信メッセージに WSS を適用する (つまり、署名、暗号化、セキュリティ トークンの追加の 1 つ以上を行う)。doOutboundWssfalse の場合、プロキシ サービスは発信メッセージに WSS を適用しない。このプロパティは WSS パススルーのシナリオをサポートするために使用する。

WSS パススルー シナリオでは、プロキシ サービスはクライアントによってすでに WSS が適用された要求を受け取るが、WSS ペイロードを処理しない。つまり、プロキシ サービスは単にこの要求をバックエンド サービスにルーティングする。このようなプロキシは受動的仲介者とも呼ばれる。プロキシ サービスが受動的仲介者である場合、保護された着信メッセージは AquaLogic Service Bus メッセージ フローで署名/暗号化されたままになる。したがって、発信の時点でメッセージを再署名または再暗号化する必要がない。

ルート ノードは、ルーティングの送り先が (ルーティングまたはパブリッシュ時に) 設定されている場合、このプロパティを自動的に初期化する。doOutboundWss のデフォルト値は、プロキシおよびターゲット サービスの両方の WSS コンフィグレーションによって異なる。

  • ターゲット サービスに WSS ポリシーがない場合、doOutboundWssfalse に設定される。

  • プロキシ サービスに WSS ポリシーがあり、[WS-Security ヘッダの処理] フラグが false の場合 (つまり、プロキシ サービスが受動的仲介者である場合)、doOutboundWssfalse に設定される。

  • それ以外の場合、doOutboundWsstrue に設定される。

doOutboundWss 要素の値は、ルーティング (またはパブリッシュ) の発信要求アクションでは変更可能。

詳細については、BEA AquaLogic Service Bus の『ユーザーズ ガイド』の「着信メッセージおよび発信メッセージの保護」で「メッセージレベルのセキュリティ (Web サービス セキュリティ)」を参照。


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


2. この読み込み専用ルールは強制されません。読み込み専用の要素を変更すると予期できない動作が生じることがあります。


 

関連トピック

アクションの追加

ルート ノード アクションの追加

標準 HTTP ヘッダの詳細については、http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html を参照してください。

標準 JMS ヘッダの説明については、http://edocs.beasys.co.jp/e-docs/wls/docs91/jms/fund.html#jms_features を参照してください。

 


operation 変数

operation 変数は、読み込み専用の変数です。この変数には、プロキシ サービスで呼び出される操作を指定する文字列が格納されます。プロキシ サービスに対する処理が定義されていない場合は、operation 変数が設定されず、null と等価の値が返されます。

AquaLogic Service Bus では、パフォーマンスを最適化するために operation 変数が inbound 変数の下位要素ではなくスタンドアロン変数として提供されます。処理の計算は、inbound 変数がアクセスされたときではなく、operation 変数が明示的にアクセスされるまで延期されることがあります。

 


fault 変数

fault 変数は、メッセージ処理中に発生したすべてのエラーに関する情報を保持するために使用します。エラーが発生すると、この変数に情報が格納されてから、適切なエラー ハンドラが呼び出されます。

注意 : この変数はエラー ハンドラ パイプラインでのみ定義され、要求パイプラインや応答パイプライン、ルート ノードやブランチ ノードでは設定されません。

fault 変数には、以下の表に示された下位要素 errorCodereasondetails、および location が含まれます。

表 A-6 fault 変数の下位要素

fault 変数の要素 

説明1

errorCode

エラー コードを文字列値で指定する。

reason

エラーの説明を格納する。

details

エラーに関連するユーザ定義 XML コンテンツを格納する。

location

エラーが発生したノード、パイプライン、およびステージを指定する。また、エラーがエラー ハンドラ内で発生したかどうかも指定する。以下の下位要素がある。

  • node - エラーが発生したパイプライン/ブランチ/ルート ノードの名前を示す文字列。

  • pipeline - 該当する場合、エラーが発生したパイプラインの名前を示す文字列。

  • stage - 該当する場合、エラーが発生したステージの名前を示す文字列。

  • error-handler - エラー ハンドラ内でエラーが発生したことを示すブール値。


1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。


 

fault 変数のコンテンツは、SOAP ベースのプロキシ サービスからの返信時にエラーを生成しやすいよう、SOAP エラーに基づいてモデル化されています。AquaLogic Service Bus によって生成されるエラー コードの値はシステム エラー コードに対応し、エラー コードの先頭には BEA という文字列が付加されます。

エラーに関連付けられたエラー コードは、fault コンテキスト変数の要素内に表示されます。次の XQuery ステートメントを使用して値にアクセスできます。

$fault/ctx:errorCode/text()

AquaLogic Service Bus は、考えられる 3 つのクラスのエラー用に 3 つの汎用エラー コードを定義します。汎用コードの形式は BEA-xxx000 です。ここで、xxx は汎用カテゴリを次のように表します。

これにより、次のように汎用コードが生成されます。

AquaLogic Service Bus では、特定のエラーを示すユニークなコードが定義されています。次に例を示します。

BEA-382030 - メッセージ解析エラーを示します (SOAP プロキシ サービスが非 SOAP メッセージを受信したなど)。

BEA-382500 - サービス コールアウト アクションが SOAP エラー応答を受け取った場合のために予約されています。

これらのエラー コードおよびその他の特定のエラー コードについては、「エラー コード」を参照してください。

関連トピック

エラー メッセージと処理

 


コンテキスト変数の初期化

メッセージ コンテキストとその変数は、メッセージ受信時およびメッセージ処理の開始前にバインディング レイヤで初期化されます。以下の表は、コンテキスト変数の初期化方法についてまとめたものです。

表 A-7 コンテキスト変数の初期化

コンテキスト変数

初期化方法

outbound

ルーティングが行われていないか、エラーが発生していないため、null に初期化される。

outbound 変数は、ルート ノードのルート アクションとパブリッシュ アクションで初期化される。ルーティング ノードとパブリッシュ アクションの要求アクションで (さらに、ルーティング ノードの応答アクションでも) $outbound を変更できる。詳細については、「inbound 変数と outbound 変数」を参照。

outbound の下位要素の初期化については、「inbound 変数と outbound 変数の下位要素」を参照。

fault

inbound

登録されたプロキシ サービスに関する Service Bus メタデータと、特定の受信要求に関する転送レベル メタデータ (転送ヘッダ、認証されたユーザ情報など) から取得したサービス、転送、およびセキュリティの情報で初期化される。

inbound の下位要素の初期化については、「inbound 変数と outbound 変数の下位要素」を参照。

header

着信メッセージのコンテンツを使用して初期化される。初期化の実行方法は、この節の以降のトピックで説明するようにプロキシ サービスのタイプによって異なる。

headerbodyattachments の 3 つの変数は、ルーティングの後に、受信した応答のコンテンツを使用して再初期化される。ルーティングが実行されない場合や、通信モードが要求のみの場合、これらの変数は再初期化されない。つまり、これらの変数のコンテンツはクリアされない。

body

attachments

operation


 

attachments コンテキスト変数の初期化

attachments コンテキスト変数は、メッセージに含まれるすべての MIME 添付ファイルで初期化されますが、メイン メッセージを表す部分は含まれません (SOAP、XML、MFL など形式を問わず)。各 <attachment> 要素は、MIME パッケージの各部分に伴う MIME ヘッダを使用して初期化されます。

<attachment><body> 要素のコンテンツは、添付ファイルの Content-Type に応じて以下のいずれかになります。

header、body コンテキスト変数の初期化

この節では、コンテキスト変数 header および body の初期化が行われる方法について説明します。これらの変数の初期化方法は、プロキシ サービスのタイプが SOAP サービスXML サービス (非 SOAP)メッセージング サービスのいずれであるかによって異なります。

SOAP サービス

SOAP ベースのサービスへのメッセージは、<soap:Envelope> 要素に含まれる XML を含む SOAP メッセージです。添付ファイルを含むメッセージの場合、着信メッセージのコンテンツは、SOAP エンベロープをその一部として (通常は最初の部分、または最上位の Content-Type ヘッダで指定される部分) 含む MIME パッケージです。コンテキスト変数は以下のように初期化されます。

XML サービス (非 SOAP)

XML ベースのサービスへのメッセージは XML ですが、プロキシ サービス コンフィグレーションで許可された型を使用できます。添付ファイルを含むメッセージの場合、着信メッセージのコンテンツは、プライマリ XML ペイロードをその一部として (通常は最初の部分、または最上位の Content-Type ヘッダで指定される部分) 含む MIME パッケージです。

コンテキスト変数は以下のように初期化されます。

メッセージング サービス

メッセージング サービスは、あるデータ型のメッセージを受信し、応答として別のデータ型のメッセージを返すことができるサービスです。サポートされるデータ型は、XML、MFL、テキスト、または型なしバイナリです。コンテキスト変数は以下のように初期化されます。

 


コンテキスト変数に対する操作の実行

メッセージ コンテキストに対する対話および操作は、プロキシ サービスを定義するパイプライン、ブランチ、またはルート ノードでのアクションを通じて行います。ほとんどのアクションについては、それを実行するための XQuery 言語がエクスポーズされています。各コンテキスト変数は、同じ名前の XQuery 変数として表されます。たとえば、header 変数は、XQuery では $header としてアクセスでき、body 変数は $body としてアクセスできます。この節の例では、XQuery を使用してコンテキスト変数に対するチェックおよび操作を行っています。

$body

$body 変数は <soap-env:Body>...</soap-env:Body> 要素を含みます。

たとえば、割り当てアクションを使用して body コンテキスト変数にデータを割り当てる場合、そのデータを <soap-env:Body> 要素でラッピングする必要があります。つまり、コンテキスト変数内に <soap-env:Body> 要素を含ませることで、SOAP パッケージを構築します。

ただし、AquaLogic Service Bus のこの動作は、サービス コールアウト アクションの要求ドキュメント変数を構築する場合は例外です。サービス コールアウト アクションはコアのペイロード (RPC パラメータ、ドキュメントなど) を作業対象とし、AquaLogic Service Bus は、コアのペイロードに基づいて SOAP パッケージを構築します。つまり、サービス コールアウト アクションの要求ドキュメント変数をコンフィグレーションする場合は、入力ドキュメントを <soap-env:Body>...</soap-env:Body> でラッピングしません。

サービス コールアウト アクションのコンフィグレーションの詳細については、「サービス コールアウト」を参照してください。

$header

$header 変数は <soap-env:Header>...</soap-env:Header> 要素を含みます。

たとえば、割り当てアクションを使用してヘッダ コンテキスト変数にデータを割り当てる場合、そのデータを <soap-env:Header> 要素でラッピングする必要があります。つまり、コンテキスト変数内に <soap-env:Header> 要素を挿入して、SOAP パッケージを構築します。これは、サービス コールアウト要求の 1 つまたは複数の SOAP ヘッダを設定できる場合を含めて、すべての $header 操作に当てはまります。サービス コールアウト アクションの SOAP ヘッダのコンフィグレーションの詳細については、「サービス コールアウト」を参照してください。

コード リスト A-1 WS-Addressing ヘッダ (From) を抽出する

$header/wsa:From

コード リスト A-2 非 SOAP メッセージからペイロードを抽出する

$body/*

コード リスト A-3 発信応答メッセージからユーザヘッダを抽出する

$outbound/ctx:transport/ctx:response/tp:user-header[@name='myheader']/@value

SOAP サービスへのサービス コールアウト内の要求パラメータに使用される body 入力変数を作成する場合、ラッパー soap-env:Body を削除するため、body/* を使用します ($body を使用すると soap-env:Body ラッパーが保持されます)。

コード リスト A-4 サービス コールアウト内の要求パラメータの変数コンテンツを割り当てる

$body/*

関連トピック

AquaLogic Service Bus Console の XQuery エディタおよび XPath エディタによるコンテキスト変数の処理の詳細については、以下のトピックを参照してください。

BEA AquaLogic Service Bus の『ユーザーズ ガイド』の「AquaLogic Service Bus でのメッセージ フローの作成」にある「変数の構造」

XQuery 条件エディタの使用

インライン XQuery 式エディタの使用

XPath 式エディタの使用

 


送信するメッセージの作成

AquaLogic Service Bus によってメッセージがパブリッシュまたはルーティングされるとき、メッセージのコンテンツはメッセージ コンテキストの変数の値を使用して作成されます。たとえば、転送ヘッダと転送固有のメタデータは、$outbound/transport/request から取得されます。コンテキストの初期化と同様に、発信メッセージのメッセージ コンテンツはターゲット サービスのタイプに応じて異なって処理されます。以下のトピックで説明されているように、発信メッセージ コンテンツの作成方法はターゲット サービスのタイプによって異なります。

SOAP サービス

送信 SOAP メッセージは、header 変数と body 変数のコンテンツを <soap:Envelope> 要素でラッピングして作成します。body 変数に参照 XML コードが格納されている場合、メッセージは現状のまま送信されます。つまり、参照されているコンテンツはメッセージに追加されません。

attachments 変数で添付ファイルが定義されている場合は、メイン メッセージと添付データから MIME パッケージが作成されます。各添付部分のコンテンツの処理方法は、メッセージング サービスのコンテンツの処理方法に類似しています。

XML サービス (非 SOAP)

AquaLogic Service Bus の XML ベースのサービスへのメッセージは、body 変数のコンテンツから作成されます。

含まれているデータの種類によらず、header 変数は発信メッセージにコンテンツを提供しません。

サービス コールアウト アクションのメッセージの作成方法を示す例については、「サービス コールアウト」を参照してください。

メッセージング サービス

AquaLogic Service Bus のメッセージング サービスへのメッセージは、body 変数のコンテンツから作成されます。

含まれているデータの種類によらず、header 変数は発信メッセージにコンテンツを提供しません。

サービス コールアウト アクションのメッセージの作成方法を示す例については、「サービス コールアウト」を参照してください。

電子メール メッセージでのバイナリ コンテンツの送信について

バイナリ メッセージの場合、AquaLogic Service Bus では body 変数にメッセージ コンテンツは挿入されません。代わりに、<binary-content/> 参照要素が作成され <SOAP:Body> 要素に挿入されます (「メッセージ関連の変数」を参照)。ただし、電子メール規格では、バイナリ コンテンツ タイプをメッセージの主要な部分として送信することがサポートされていません。テキストまたは XML のドキュメントと任意の添付ファイルを受信するメッセージング サービスに、電子メールでバイナリ メッセージを送信する場合は、以下の手順に従います。

  1. バイナリコンテンツ参照 XML を $body から $attachments に変更します。
  2. $body のコンテンツを <SOAP:Body> 要素でラッピングされたテキストまたは XML に置き換えます。

送信メッセージのタイプが MFL の場合は、$body のコンテンツが、MFL トランスフォーメーションに基づいて XML からテキストまたはバイナリに変換されます。

バイナリ コンテンツの処理方法の詳細については、「body 変数と attachments 変数内のバイナリ コンテンツ」を参照してください。

関連トピック

サービス コールアウト

転送ヘッダ

メッセージ コンテキスト スキーマ

ルート ノードの追加

 


メッセージ コンテキスト スキーマ

コード リスト A-5 には、メッセージ コンテキスト変数の型を指定するメッセージ コンテキスト スキーマ (MessageContext.xsd) が示されています。

メッセージ コンテキスト変数を使用して作業を行う場合は、MessageContext.xsd と AquaLogic Service Bus インストールの以下の場所にある JAR ファイルで利用できる転送固有スキーマを参照する必要があります。

BEA_HOME\weblogic91\servicebus\lib\sb-schemas.jar

ここで、BEA_HOME は AquaLogic Service Bus がインストールされたディレクトリを表します。sb-schemas.jar には以下のコンテキスト関連スキーマが含まれます。

コード リスト A-5 Message Context.xsd

<schema targetNamespace="http://www.bea.com/wli/sb/context"
xmlns:mc="http://www.bea.com/wli/sb/context"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<!--============================================================== -->

<!-- コンテキスト変数 'fault' はこの要素のインスタンスです -->
<element name="fault" type="mc:FaultType"/>

<!-- コンテキスト変数 'inbound' と 'outbound' は、この要素のインスタンスです -->
<element name="endpoint" type="mc:EndpointType"/>

<!-- 'inbound' 変数と 'outbound' 変数内の 3 つの下位要素 -->
<element name="service" type="mc:ServiceType"/>
<element name="transport" type="mc:TransportType"/>
<element name="security" type="mc:SecurityType"/>

<!-- コンテキスト変数 'attachments' はこの要素のインスタンスです -->
<element name="attachments" type="mc:AttachmentsType"/>

<!-- 'attachments' 変数の各添付ファイルは、この要素のインスタンスによって表されます -->
<element name="attachment" type="mc:AttachmentType"/>

<!-- バイナリ ペイロードと参照渡しコンテンツを表すために使用する要素 -->
<element name="binary-content" type="mc:BinaryContentType"/>

<!-- =================================================================== -->

<!-- スキーマ タイプ -->
<complexType name="AttachmentsType">
<sequence>
<!-- 'attachments' 変数は、単なる一連の添付要素です -->
<element ref="mc:attachment" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>

<complexType name="AttachmentType">
<all>
<!-- 添付ファイルに関連付けられた一連の MIME ヘッダ -->
<element name="Content-ID" type="string" minOccurs="0"/>
<element name="Content-Type" type="string" minOccurs="0"/>
<element name="Content-Transfer-Encoding" type="string" minOccurs="0"/>
<element name="Content-Description" type="string" minOccurs="0"/>
<element name="Content-Location" type="string" minOccurs="0"/>
<element name="Content-Disposition" type="string" minOccurs="0"/>

<!-- 添付コンテンツ自体をインラインで指定するか、または <binary-content/> として指定します -->
<element name="body" type="anyType"/>
</all>
</complexType>

<complexType name="BinaryContentType">
<!-- バイナリまたは参照渡しペイロードへの URI 参照 -->
<attribute name="ref" type="anyURI" use="required"/>
</complexType>

<!-- =================================================================== -->

<complexType name="EndpointType">
<all>
<!-- エンドポイントのサービス、転送、およびセキュリティの詳細を保持する下位要素 -->
<element ref="mc:service" minOccurs="0" />
<element ref="mc:transport" minOccurs="0" />
<element ref="mc:security" minOccurs="0" />
</all>

<!-- このエンドポイントによって表されるサービスの完全修飾名 -->
<attribute name="name" type="string" use="required"/>
</complexType>

<!-- =================================================================== -->

<complexType name="ServiceType">
<all>
<!-- サービス プロバイダの名前 -->
<element name="providerName" type="string" minOccurs="0"/>

<!-- 呼び出されるサービス処理 -->
<element name="operation" type="string" minOccurs="0"/>
</all>
</complexType>

<!-- =================================================================== -->

<complexType name="TransportType">
<all>
<!-- エンドポイントの URI -->
<element name="uri" type="anyURI" minOccurs="0" />

<!-- 要求および応答に関する転送固有のメタデータ (転送ヘッダを含む) -->
<element name="request" type="anyType" minOccurs="0"/>
<element name="response" type="anyType" minOccurs="0" />

<!-- 一方向 (要求のみ) または双方向 (要求/応答) の通信を指定します -->
<element name="mode" type="mc:ModeType" minOccurs="0" />

<!-- サービス品質を指定します -->
<element name="qualityOfService" type="mc:QoSType" minOccurs="0" />

<!-- 再試行の値 (発信のみ) -->
<element name="retryInterval" type="integer" minOccurs="0" />
<element name="retryCount" type="integer" minOccurs="0" />
</all>
</complexType>

<simpleType name="ModeType">
<restriction base="string">
<enumeration value="request"/>
<enumeration value="request-response"/>
</restriction>
</simpleType>

<simpleType name="QoSType">
<restriction base="string">
<enumeration value="best-effort"/>
<enumeration value="exactly-once"/>
</restriction>
</simpleType>

<!-- =================================================================== -->

<complexType name="SecurityType">
<all>
<!-- 転送レベルのクライアント情報 (着信のみ) -->
<element name="transportClient" type="mc:SubjectType" minOccurs="0"/>

<!-- メッセージレベルのクライアント情報 (着信のみ) -->
<element name="messageLevelClient" type="mc:SubjectType" minOccurs="0"/>

<!-- 発信 WSS 処理を無効にするために使用するブール型フラグ (発信のみ) -->
<element name="doOutboundWss" type="boolean" minOccurs="0"/>
</all>
</complexType>

<complexType name="SubjectType">
<all>
<!-- この転送レベルまたはメッセージ レベルのサブジェクトに関連付けられたユーザ名 -->
<element name="username" type="string"/>
</all>
</complexType>

<!-- =================================================================== -->

<complexType name="FaultType">
<all>
<!-- エラーを識別する短い文字列 (たとえば、BEA38229) -->
<element name="errorCode" type="string"/>

<!-- エラーの理由を説明するテキスト -->
<element name="reason" type="string" minOccurs="0" />

<!-- エラーに関する追加情報 -->
<element name="details" type="anyType" minOccurs="0" />

<!-- プロキシでエラーが発生した場所に関する情報 -->
<element name="location" type="mc:LocationType" minOccurs="0" />
</all>
</complexType>

<complexType name="LocationType">
<all>
<!-- エラーが発生したパイプライン/ブランチ/ルート ノードの名前 -->
<element name="node" type="string" minOccurs="0" />

<!-- エラーが発生したパイプラインの名前 (該当する場合) -->
<element name="pipeline" type="string" minOccurs="0" />

<!-- エラーが発生したステージの名前 (該当する場合) -->
<element name="stage" type="string" minOccurs="0" />

<!-- エラー ハンドラ内でエラーが発生したかどうかを示す -->
<element name="error-handler" type="boolean" minOccurs="0" />
</all>
</complexType>
    <!-- エラーの <details> に追加されるスタック トレースをカプセル化する -->
<element name="stack-trace" type="string"/>
</schema>

関連トピック

inbound 変数と outbound 変数

コンテキスト変数に対する操作の実行

送信するメッセージの作成

 

ナビゲーション バーのスキップ  ページの先頭 Previous 次