303.4. OGNL 表达式支持

可作为 Camel 2.3 提供

INFO:Camel 的 OGNL 支持仅用于调用方法。您无法访问字段。从 Camel 2.11.1 开始,我们添加了对访问 Java 阵列长度字段的特例支持。

SimpleBean 语言现在支持 Camel OGNL 表示法在链中调用 Bean。假设 Message IN body 包含 POJO,它使用 getAddress () 方法。

然后,您可以使用 Camel OGNL 表示法访问地址对象:

simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")

Camel 了解 getter 的短名称,但您可以调用任何方法或使用类似的实际名称:

simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")

例如,如果正文没有地址,您可以使用 null 安全运算符()以避免 NPE

simple("${body?.address?.street}")

也可以以 MapList 类型索引,因此您可以:

simple("${body[foo].name}")

假设正文基于 Map,并使用 foo 作为键查找值,并在该值上调用 getName 方法。

如果键有空格,则必须使用 引号包括密钥,例如 'foo bar':

simple("${body['foo bar'].name}")

您可以使用密钥名称(带有或不带句点)直接访问 MapList 对象:

simple("${body[foo]}")
simple("${body[this.is.foo]}")

假设键为 foo 没有值,您可以使用 null 安全 Operator 以避免 NPE,如下所示:

simple("${body[foo]?.name}")

您还可以访问 列表 类型,例如从地址中获取行:

simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")

有一个特殊的 last 关键字,可用于从列表中获取最后一个值。

simple("${body.address.lines[last]}")

最后,您可以减去一个数字,因此我们可以使用 last-1 来指明这一点:

simple("${body.address.lines[last-1]}")

最后第三步是课程:

simple("${body.address.lines[last-2]}")

您可以在列表中调用 size 方法

simple("${body.address.lines.size}")

Camel 2.11.1 开始,我们增加了对 Java 阵列的长度字段的支持,例如:

String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);

simple("There are ${body.length} lines")

和 yes,您可以将其与 Operator 支持合并,如下所示:

simple("${body.address.zip} > 1000")