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