第 304 章 简单语言
从 Camel 版本 1.1 开始提供
Simple Expression Language 是创建时非常简单的语言,但自此已发展为更加强大的语言。它主要用于评估 Expressions 和 Predicates,而无需任何新的依赖项或 XPath 知识;因此,最好在 camel-core 中进行测试。当您需要在 Camel 路由中需要一些基于表达式的基于表达式的脚本时,可以满足 95% 的常见用例。
但是,对于更复杂的用例,您通常建议您选择更加表达和强大的语言,例如:
简单语言对复杂表达式使用 ${body
} 占位符,其中表达式包含常量文字。如果表达式只是令牌本身,则可以省略 $\{ } 占位符。
稍后,从 Camel 2.5 的替代语法 也可以使用替代语法,其使用 $simple{ }
作为占位符。这可用于避免在将 Spring 属性占位符与 Camel 搭配使用时发生冲突。
304.1. Camel 2.9 中的简单语言更改
从 Camel 2.9 开始,简单 语言已被改进,以使用更好的语法解析器,该解析器可以进行索引精确的错误消息,以便您准确了解错误以及问题的位置。例如,如果您在其中一个操作器中创建了拼写错误,那么解析程序将无法检测到这一点,并导致评估为 true。语法中有一些更改,不再向后兼容。当使用 简单 语言作为 predicates 时,字面文本 必须 用单引号或双引号括起来。例如: "${body} == 'Camel'"。
注意我们如何通过单引号显示字面上的单引号。使用 "body"
和 "header.foo"
的旧样式来指代消息正文,标头是 @deprecated,我们建议始终对内置功能使用 $\{ } 令牌。range 运算符现在要求范围以单引号括起,显示: "${header.zip} between '30000..39999'"。
要获得邮件的正文:"body" 或
或 "
in.body""${body}"
。
复杂的表达式必须使用 $\{ } 占位符,例如 :"Hello ${in.header.name} how are?"
.
您可以在同一表达式中有多个功能:" Hello ${in.header.name} this is ${in.header.me} talking"
.
但是,在 Camel 2.8.x 或更早的版本中,您无法嵌套功能(不允许在现有中使用另一个 $\{ } 占位符)。
从 Camel 2.9 开始,您可以嵌套功能。