第 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 开始改进,以使用更好的语法解析器,该解析器可以执行索引精确的错误消息,因此您知道什么错误以及问题在哪里。例如,如果您在其中一个 Operator 中进行了拼写错误,则之前解析器将无法检测到这一点,并导致评估为 true。语法有几个更改,它们不再向后兼容。当使用 简单 语言作为 Predicate 时,必须 用单引号或双引号括起字面文本。例如: "${body} == 'Camel'"。
请注意,我们如何使用单引号括起字面上。使用 "body"
和 "header.foo"
的旧样式引用邮件正文,标题为 @deprecated,我们鼓励始终将 $\{ } 令牌用于内置功能。range 运算符现在要求范围以单引号括起,如下所示: "${header.zip} between '30000..39999'"。
若要获取消息中的正文:"body "或
或 "
in.body""${body}"
。
复杂的表达式必须使用 $\{ } 占位符,例如 :"Hello ${in.header.name} 如何?"
您可以在同一表达式中有多个功能 :"Hello ${in.header.name} is ${in.header.me} talking
"。
但是,您无法 嵌套在 Camel 2.8.x 或更老的函数(例如,现有 $\{ } 占位符)是不允许的。
从 Camel 2.9 开始,您可以嵌套功能。