303.7. サンプル
以下の Spring XML サンプルでは、ヘッダー値に基づいてフィルタリングします。
<from uri="seda:orders"> <filter> <simple>${in.header.foo}</simple> <to uri="mock:fooOrders"/> </filter> </from>
Simple 言語は、上記のメッセージフィルターパターンの述語テストに使用できます。ここでは、メッセージに foo
ヘッダーがあるかどうかをテストします (キーが foo
のヘッダーが存在します)。式が true と評価された場合に、メッセージは 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 で呼び出すメソッドを宣言する場合は、generateId
メソッドを呼び出す場所に、以下のように .method name
を追加する必要があります。
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 以降では、ヘッダー Map
から値を検索することもできます。
<transform> <simple>The gold value is ${header.type[gold]}</simple> </transform>
上記のコードでは、名前 type
でヘッダーを検索してして、その内容を java.util.Map
と見なし、その後にキー gold
で検索して値を返します。ヘッダーが Map に変換できない場合、例外が出力されます。name 型
のヘッダーが存在しない場合は null
が返されます。
Camel 2.9 以降では、以下に示すように関数をネストできます。
<setHeader headerName="myHeader"> <simple>${properties:${header.someKey}}</simple> </setHeader>