282.7. サンプル
以下の Spring XML の例では、ヘッダー値に基づいてフィルターを行います。
<from uri="seda:orders"> <filter> <simple>${in.header.foo}</simple> <to uri="mock:fooOrders"/> </filter> </from>
Simple 言語は、Message Filter パターンの上記の述語テストに使用できます。ここでは、in メッセージに foo ヘッダーがあるかどうかをテストします(キー
を持つヘッダーが存在するかどうかをテストします)。式が true に評価されると、メッセージは foo
mock:fooOrders
エンドポイントにルーティングされます。そうでない場合、メッセージは破棄されます。
Java DSL と同じ例は次のとおりです。
from("seda:orders") .filter().simple("${in.header.foo}") .to("seda:fooOrders");
Simple 言語は、以下のような単純なテキスト連結にも使用できます。
from("direct:hello") .transform().simple("Hello ${in.header.user} how are you?") .to("mock:reply");
式で $\{ } プレースホルダーを使用して、Camel がこれを正しく解析できるようにする必要があります。
この例では、date コマンドを使用して現在の日付を出力します。
from("direct:hello") .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.") .to("mock:reply");
また、以下の例では Bean 言語を呼び出して、返された文字列に含まれる Bean 上でメソッドを呼び出します。
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator}") .to("mock:reply");
orderIdGenerator
は、レジストリーに登録されている Bean の ID に置き換えます。Spring を使用している場合は、Spring Bean id になります。
注文 ID ジェネレーター Bean で呼び出すメソッドを宣言したい場合は、以下のように .method 名の前に .method メソッドを呼び出します
。ここで、generateId
メソッドを呼び出します。
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}") .to("mock:reply");
Bean コンポーネント自体に精通している ?method=methodname
オプションを使用することもできます。
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}") .to("mock:reply");
Camel 2.3 以降では、以下のようにボディーを特定の型に変換することもできます。
<transform> <simple>Hello ${bodyAs(String)} how are you?</simple> </transform>
短縮表記が含まれるいくつかのタイプがあるため、java.lang.
の代わりに String を使用できます。これらは String
byte[]、String、Integer、Long
です。その他のタイプはすべて、org.w3c.dom.Document
など、FQN 名を使用する必要があります。
Camel 2.3 以降では、ヘッダー マップ
から値を検索することもできます。
<transform> <simple>The gold value is ${header.type[gold]}</simple> </transform>
上記のコードでは、名前 型
を持つヘッダーを検索し、java.util.Map
として考慮し、キー gold
でルックアップし、値を返します。ヘッダーが変換可能でない場合は、例外が発生します。名前 タイプ
のあるヘッダーが存在しない場合には、null
を返します。
Camel 2.9 以降では、以下のような機能をネスト化できます。
<setHeader headerName="myHeader"> <simple>${properties:${header.someKey}}</simple> </setHeader>