10.4. Claim Check EIP

Claim Check EIP

図10.4「Claim Check パターン」 に記載されている Claim Check EIP パターンでは 、メッセージコンテンツをクレームチェック (一意の鍵) に置き換えることができます。Claim Check EIP パターンを使用して、後でメッセージコンテンツを取得します。メッセージコンテンツは、一時的にデータベースやファイルシステムなどの永続ストアに格納できます。このパターンは、メッセージコンテンツが非常に大きく (送信するに高価)、すべてのコンポーネントにすべての情報が必要でない場合に役立ちます。

また、外部の情報で信頼できない場合にも便利です。この場合、Claim Check を使用してデータの機密部分を非表示にします。

EIP パターンの Camel 実装は、メッセージコンテンツを内部メモリーストアに一時的に格納します。

図10.4 Claim Check パターン

ライブラリーに格納

10.4.1. Claim Check EIP オプション

Claim Check EIP は、以下の表に記載されているオプションをサポートしています。

名前

説明

デフォルト

operation

Claim Check 操作を使用する必要があります。以下の操作をサポートします。

* Get - 指定のキーによる Claim Check を取得します (削除しません)。

* GetAndRemove - 指定のキーによる Claim Check を取得して削除します。

* Set - 指定のキーで新規の Claim Check を設定します。キーがすでに存在する場合は上書きされます。

* Push - スタックに新しい Claim Check を設定します (キーは使用しません)。

* Pop - スタックから最新の Claim Check を取得します (キーは使用しません)。

GetGetAndRemove、または Set 操作を使用する場合は、キーを指定する必要があります。これらの操作はキーを使用してデータを保存し、取得します。これらの操作を使用して、複数のデータを異なるキーに保存します。ただし、push および pop 操作はキーを使用しませんが、データをスタック構造体に保存します。

 

ClaimCheckOperation

key

Claim Check ID に特定のキーを使用します。

 

String

filter

Claim Check リポジトリーからマージするデータを制御するフィルターを指定します。

 

String

strategyRef

デフォルトの実装の代わりにカスタム AggregationStrategy を使用します。カスタム集約ストラテジーと同時にデータを設定することはできません。

 

String

フィルターオプション

Filter オプションを使用して、Get または Pop の操作を使用する場合にマージして戻すデータを定義します。AggregationStrategy を使用してデータをマージして戻します。デフォルトのストラテジーでは、filter オプションを使用して、マージするデータを簡単に指定します。

filter オプションは、以下の構文を持つ String 値を取ります。

  • body: メッセージボディーを集約します。
  • attachments: すべてのメッセージ添付を集約します。
  • headers: すべてのメッセージヘッダーを集約します。
  • header:pattern: パターンに一致するすべてのメッセージヘッダーを集約します。

パターンルールはワイルドカードおよび正規表現をサポートします。

  • ワイルドカードの一致 (パターンが * で終わり、名前がパターンで始まります)
  • 正規表現の一致

複数のルールを指定するには、commas (,) で区切ります。

以下は、メッセージボディーおよび foo で始まるすべてのヘッダーを含む基本的なフィルターの例です。

body, header:foo*
  • メッセージのボディーのみをマージする場合: body
  • メッセージの添付のみをマージする場合: attachments
  • ヘッダーのみをマージする場合: headers
  • ヘッダー名 foo のみをマージする場合: header:foo

フィルタールールを空またはワイルドカードとして指定すると、すべてをマージできます。詳細は、Filter what data to merge back を参照してください。

注記

データをマージすると、システムは既存のデータを上書きします。また、既存のデータを格納します。

10.4.2. Include および Exclude パターンを使用したフィルターオプション

以下は、オプションを包含、除外、または削除オプションを指定するために使用できる接頭辞をサポートする構文です。

  • + : 包含します (デフォルトのモード)。
  • -: 除外します (除外は包含よりも優先されます)
  • -- : 削除します (削除が優先されます)

以下に例を示します。

  • メッセージのボディーをスキップしてその他をすべてマージするには、-body を使用します。
  • メッセージヘッダー foo を省略してその他をすべてマージするには、-header:foo を使用します。

また、データをマージする際にヘッダーを削除するようにシステムに指示することもできます。たとえば、bar で始まるすべてのヘッダーを削除するには、--headers:bar* を使用します。

注記

header:pattern で包含 (+) と除外 (-) の両方を同時に使用しないでください。

10.4.3. Java の例

以下の例は、実際の Push および Pop 操作を示しています。

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Push)
    .transform().constant("Bye World")
    .to("mock:b")
    .claimCheck(ClaimCheckOperation.Pop)
    .to("mock:c");

以下は、Get および Set 操作の使用例です。この例では、foo キーを使用しています。

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Set, "foo")
    .transform().constant("Bye World")
    .to("mock:b")
    .claimCheck(ClaimCheckOperation.Get, "foo")
    .to("mock:c")
    .transform().constant("Hi World")
    .to("mock:d")
    .claimCheck(ClaimCheckOperation.Get, "foo")
    .to("mock:e");
注記

データを削除しないため、Get 操作を使用して同じデータを 2 度取得できます。ただし、データを 1 度だけ取得する場合は、GetAndRemove 操作を使用します。

以下の例は、foo または bar としてヘッダーのみを取得する場合に filter オプションを使用する方法を示しています。

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Push)
    .transform().constant("Bye World")
    .setHeader("foo", constant(456))
    .removeHeader("bar")
    .to("mock:b")
    // only merge in the message headers foo or bar
    .claimCheck(ClaimCheckOperation.Pop, null, "header:(foo|bar)")
    .to("mock:c");

10.4.4. XML の例

以下の例は、実際の Push および Pop 操作を示しています。

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Push"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <to uri="mock:b"/>
  <claimCheck operation="Pop"/>
  <to uri="mock:c"/>
</route>

以下は、Get および Set 操作の使用例です。この例では、foo キーを使用しています。

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Set" key="foo"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <to uri="mock:b"/>
  <claimCheck operation="Get" key="foo"/>
  <to uri="mock:c"/>
  <transform>
    <constant>Hi World</constant>
  </transform>
  <to uri="mock:d"/>
  <claimCheck operation="Get" key="foo"/>
  <to uri="mock:e"/>
</route>
注記

データを削除しないため、Get 操作を使用して同じデータを 2 度取得できます。ただし、データを 1 度だけ取得する場合は、GetAndRemove 操作を使用します。

以下の例は、filter オプションを使用して、ヘッダーを foo または bar として取得する方法を示しています。

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Push"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <setHeader headerName="foo">
    <constant>456</constant>
  </setHeader>
  <removeHeader headerName="bar"/>
  <to uri="mock:b"/>
  <!-- only merge in the message headers foo or bar -->
  <claimCheck operation="Pop" filter="header:(foo|bar)"/>
  <to uri="mock:c"/>
</route>