第 301 章 简单语言

可作为 Camel 版本 1.1 提供

从创建简单表达式语言时,简单表达式语言是一种简单语言,但由于发展更加强大。它主要是为了作为评估表达式和谓词的小而简单的语言,无需 XPath 的任何新依赖关系或知识;因此,最好在 camel-core 中进行测试。当您在 Camel 路由中需要一些基于表达式的脚本时,这些理念涵盖了常见用例的 95%。

但是,对于更复杂的用例,通常建议您选择更加表达力和强大的语言,例如:

对于表达式包含恒定字面值的复杂表达式,简单语言使用 ${body} 占位符。如果表达式仅是令牌本身,则可以省略 $\{ } 占位符。

提示

另一种 语法 :从 Camel 2.5 开始,您还可以使用替代语法,该语法使用 $simple{ } 作为占位符。这可用于避免在将 Spring 属性占位符与 Camel 一起使用时发生冲突。

301.1. Camel 2.9 中的简单语言变化

从 Camel 2.9 开始,简单 语言改进为使用更好的语法解析程序,可以进行索引精确的错误消息,因此您知道错误以及问题所在位置。例如,如果您在其中一个操作器中有拼写错误,则解析器将无法检测到此问题,并导致评估为 true。语法中的一些更改不再向后兼容。使用 简单 语言作为谓词时,必须用 单引号或双引号括起字面文本。例如: "${body} == 'Camel'"。请注意,我们如何用单引号括起字面。使用 "body""header.foo" 的旧风格来指代消息正文和标题为 @ deprecated,我们鼓励始终为内置函数使用 $\{ } 令牌。范围 Operator 现在需要以单引号括起,也显示: "${header.zip}"介于 '30000..39999' 之间"。

以获得消息正文:"body" 或 "in.body ""${body}"

复杂的表达式必须使用 $\{ } 占位符,例如 :"Hello ${in.header.name} 如何?"

您可以在同一表达式中有多个函数:" Hello ${in.header.name} is ${in.header.me} speaking"
但是,您不能将 功能嵌套在 Camel 2.8.x 或更早的版本中(例如,不允许在现有的 $\{ } 占位符中使用其他 $\{ } 占位符)。
Camel 2.9 开始,您可以嵌套功能。