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

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> と、各添付の <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 を変更できます。

警告 : メッセージ フローで、ルーティング ノードの要求または応答アクションとパブリッシュ アクション以外で $outbound に行った変更は無視されます。つまり、これらの変更は、ルーティング ノードとパブリッシュ アクションで $outbound が初期化されるときに上書きされます。

outbound 変数は WS-Callout アクションで変更できません。

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\weblogic90\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\weblogic90\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 のみ、読み込み専用)

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

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

messageLevelClient

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

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

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

doOutboundWss

(outbound のみ)

Web サービス セキュリティ (WSS) を発信メッセージに適用するかどうかを指定するために設定するフラグ。このプロパティは、安全でないプロキシ サービスを使用してメッセージを安全なサービスにルーティングする WSS パススルー ケースをサポートするために使用する。プロキシ サービスが安全でないため、保護された着信メッセージは AquaLogic Service Bus メッセージ フローで署名/暗号化されたままになる。したがって、発信時にメッセージを再署名または再暗号化する必要がない。

AquaLogic Service Bus によって初期化される。ルーティングまたはパブリッシュの発信要求アクションでは、doOutboundWss 要素の値を変更可能。

1. メッセージ コンテキスト スキーマは、メッセージ コンテキスト変数の要素の型を指定します。
2. この読み込み専用ルールは強制されません。読み込み専用の要素を変更すると予期できない動作が生じることがあります。


 

関連トピック

ルート ノードの追加

アクションの追加

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

標準 JMS ヘッダの説明については、http://edocs.beasys.co.jp/e-docs/wls/docs90/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 という文字列が付加されます。

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

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

さらに、AquaLogic Service Bus は次の固有のプロキシ エラーを定義します。

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

AquaLogic Service Bus の今後のリリースでは、3 つの汎用カテゴリのそれぞれについて固有のエラーが追加されることがあります。

関連トピック

エラー メッセージと処理

 


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

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

表 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 を使用してコンテキスト変数に対するチェックおよび操作を行います。

コードリスト 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

関連トピック

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

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 変数内のバイナリ コンテンツ」を参照してください。

シナリオ例

操作手順を示すため、AquaLogic Service Bus が添付 (3 つの部分 : SOAP、テキスト、バイナリ) と共に SOAP メッセージを受信するようなシナリオを想定した質問とそれに対する回答を以下に示します。

ファイル転送を使用してメッセージをパブリッシュする場合に何が作成されるか

ファイル システムに作成されるメッセージの種類は、以下のように発信サービスの種類によって異なります。

メッセージのバイナリ部分だけをどのようにパブリッシュするか

  1. バイナリ部分をメッセージ本文にコピーする必要があります。これは以下のいずれかの方法で行います。
  2. attachments コンテキスト変数のコンテンツを削除します。このためには、[変数の <XPath>] オプションを使用する削除アクションを次のようにコンフィグレーションします。

AquaLogic Service Bus Console でのアクションの設定の詳細については、「アクションの追加」を参照してください。

HTTP 転送を使用してパブリッシュする場合に転送ヘッダを設定する必要があるか

転送ヘッダを設定する必要はありません。サービスの種類に応じて、Content-Type が自動的に設定されます。詳細については、「attachments コンテキスト変数の初期化」を参照してください。

パブリッシュ アクション内で要求アクションを使用してメッセージ コンテンツに加えた変更は、メッセージ フローの以降のノードで保持されるか

保持されません。パブリッシュ アクションで発信メッセージに加えた変更は、パブリッシュされたメッセージにのみ反映されます。つまり、パブリッシュ アクションで行った変更は、メッセージ フローがルート ノード以降のノードに進む前にロール バックされます。ルート ノードの設定に関する詳細については、「アクションの追加」を参照してください。

関連トピック

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

アクションの追加

 


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

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

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

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

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

コードリスト A-4 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>
</schema>

関連トピック

inbound 変数と outbound 変数

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

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

 

ページの先頭 前 次