30.5. predicates

概述

您可以根据测试表达式来构造 predicates,以实现相等性。例如: predicate, simple("${header.timeOfDay} == '14:30'"),测试传入消息中的 timeOfDay 标头等于 14:30

另外,每当将 resultType 指定为布尔值时,表达式会被评估为 predicate 而不是一个表达式。这允许这些表达式使用 predicate 语法。

语法

您还可以使用简单的 predicates 测试交换(headers、消息正文等)的不同部分。简单 predicates 具有以下通用语法:

${LHSVariable} Op RHSValue

在左侧的 LHSVariable 中,变量是 表 30.1 “简单语言的变量” 中显示的变量之一,右侧是 RHSValue 的值:

  • 另一个变量 ${RHSVariable}.
  • 字符串文字,用单引号 ' 括起。
  • 一个数字常量,用单引号括起来,'
  • null 对象 null

简单语言始终会尝试将 RHS 值转换为 LHS 值的类型。

注意

尽管简单的语言将尝试转换 RHS,但根据 LHS 可能需要在进行比较前,可能需要转换为相应的类型。

例子

例如,您可以执行简单字符串比较和数字比较,如下所示:

simple("${in.header.user} == 'john'")

simple("${in.header.number} > '100'")  // String literal can be converted to integer

您可以测试左侧是用逗号分开的列表的成员,如下所示:

simple("${in.header.type} in 'gold,silver'")

您可以测试左侧是否与正则表达式匹配,如下所示:

simple("${in.header.number} regex '\d{4}'")

您可以使用 is operator 测试左侧的类型,如下所示:

simple("${in.header.type} is 'java.lang.String'")
simple("${in.header.type} is 'String'") // You can abbreviate java.lang. types

您可以测试左侧是否在指定数字范围内(范围是 inclusive),如下所示:

simple("${in.header.number} range '100..199'")

Conjunctions

您还可以使用逻辑联合、& amp;& 和 || 将 predicates 组合。

例如,以下是一个使用 & amp;& 组合(逻辑和)的表达式:

simple("${in.header.title} contains 'Camel' && ${in.header.type} == 'gold'")

以下是使用 || 组合(逻辑包或包)的表达式:

simple("${in.header.title} contains 'Camel' || ${in.header.type} == 'gold'")