30.2. XML DSL

XML DSL での Simple 式

XML DSL では、simple 要素内に式を配置することで、Simple 式を使用できます。たとえば、ヘッダー foo の内容に基づいてフィルターリングを実行するルートを定義します。

<route id="simpleExample">
  <from uri="seda:orders"/>
  <filter>
    <simple>${in.header.foo}</simple>
    <to uri="mock:fooOrders"/>
  </filter>
</route>

代替プレースホルダー構文

たとえば、Spring プロパティープレースホルダーや OSGi Blueprint プロパティープレースホルダーを有効にしている場合、${Expression} の構文が別のプロパティープレースホルダーの構文と競合することがあります。この場合、Simple 式に使用する代替構文 $simple{Expression} を使用して、プレースホルダーの曖昧さを解決できます。以下に例を示します。

<simple>Hello $simple{in.header.name}, how are you?</simple>

開始トークンおよび終了トークンのカスタマイズ

XML 設定から、SimpleLanguage インスタンスをオーバーライドすることで、開始トークンおよび終了トークン (デフォルトでは { および }) をカスタマイズできます。たとえば、開始トークンおよび終了トークンを [ および ] に変更するには、以下のように XML 設定ファイルで新しい SimpleLanguage Bean を定義します。

<bean id="simple" class="org.apache.camel.language.simple.SimpleLanguage">
  <constructor-arg name="functionStartToken" value="["/>
  <constructor-arg name="functionEndToken" value="]"/>
</bean>
注記

開始トークンおよび終了トークンをカスタマイズすると、クラスパス上で同じ camel-core ライブラリーを共有するすべての Apache Camel アプリケーションに影響します。たとえば、OSGi サーバーでは多くのアプリケーションに影響する可能性がありますが、Web アプリケーション (WAR ファイル) では、Web アプリケーション自体にしか影響を与えません。

XML DSL の空白と自動トリミング

デフォルトでは、XML DSL における Simple 式の前後にある空白文字は、自動的にトリミングされます。以下の式は空白で囲まれています。

<transform>
  <simple>
    data=${body}
  </simple>
</transform>

よって、自動でトリミングされ、空白のない以下の式と同等になります。

<transform>
  <simple>data=${body}</simple>
</transform>

式の前後に改行を入れたい場合は、以下のように改行文字を明示的に追加できます。

<transform>
  <simple>data=${body}\n</simple>
</transform>

また、以下のように trim 属性に false を設定すると、自動トリミング機能をオフにすることができます。

<transform trim="false">
  <simple>data=${body}
</simple>
</transform>