30.2. XML DSL

XML DSL 中的简单表达式

在 XML DSL 中,您可以通过将表达式放在一个简单元素中来使用 简单的 表达式。例如,定义要根据 foo 标头的内容执行过滤的路由:

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

其他占位符语法

有时,如果您启用了 Spring 属性占位符,或者 OSGi 蓝图占位符会发现 ${Expression} 语法 clashes with another property placeholders clashes。在这种情况下,您可以用替代语法消除占位符,$simple{Expression} 用于简单表达式。例如:

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

自定义开始和访问令牌

在 XML 配置中,您可以通过覆盖 SimpleLanguage 实例来自定义开始和结束令牌(默认为{} )。例如,要将 start 和 end tokens 更改为 [ and ],在 XML 配置文件中定义一个新的 SimpleLanguage an,如下所示:

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

自定义 start 和 end 令牌会影响在类路径上共享相同的 camelcore 库的所有 Apache Camel 应用程序。例如,在 OSGi 服务器中,这可能会影响许多应用程序,而在 Web 应用程序(WAR 文件中)中,它只会影响 Web 应用程序本身。

XML DSL 中的空格和自动修剪

默认情况下,在 XML DSL 中自动修剪简单的表达式前和之后的空格。因此,使用周围空白的表达式:

<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>