74.5. 例
XML DSL の例では、ヘッダーの値に基づいてフィルターをかけます。
Simple 言語は、Message Filter パターンの上記の述語テストに使用できます。ここでは、メッセージの に foo ヘッダー(キー foo のヘッダーが存在するかどうかをテストします)。式が true に評価されると、メッセージは mock:fooOrders エンドポイントにルーティングされます。それ以外の場合は、メッセージはドロップされます。
Java DSL と同じ例:
from("seda:orders")
.filter().simple("${header.foo}")
.to("seda:fooOrders");
from("seda:orders")
.filter().simple("${header.foo}")
.to("seda:fooOrders");
また、Simple 言語は、以下のような単純なテキスト連結にも使用できます。
from("direct:hello")
.transform().simple("Hello ${header.user} how are you?")
.to("mock:reply");
from("direct:hello")
.transform().simple("Hello ${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");
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");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator}")
.to("mock:reply");
orderIdGenerator は、レジストリーに登録されている Bean の ID です。Spring を使用している場合は、Spring Bean ID になります。
注文 ID ジェネレーター Bean で呼び出すメソッドを宣言する場合は、以下のような .method 名 の前に generateId メソッドを呼び出す必要があります。
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
.to("mock:reply");
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");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
.to("mock:reply");
たとえば、ボディーを指定のタイプに変換して、以下を実行できる String になるようにすることもできます。
<transform>
<simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
<transform>
<simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
略式表記を持つタイプがいくつかあるため、java.lang. の代わりに String を使用できます。これらは String byte[]、String、Integer、Long です。その他のタイプはすべて FQN 名を使用する必要があります(例: org.w3c.dom.Document )。
ヘッダー Map から値を検索することもできます。
<transform>
<simple>The gold value is ${header.type[gold]}</simple>
</transform>
<transform>
<simple>The gold value is ${header.type[gold]}</simple>
</transform>
上記のコードで、名前 タイプ のヘッダーを検索し、java.util.Map として考慮し、キー gold でルックアップし、値を返します。ヘッダーが Map に変換できない場合は、例外が発生します。名前 タイプ が null のヘッダーが存在しない場合は、null が返されます。
以下に示すように、関数をネスト化できます。
<setHeader name="myHeader">
<simple>${properties:${header.someKey}}</simple>
</setHeader>
<setHeader name="myHeader">
<simple>${properties:${header.someKey}}</simple>
</setHeader>