第 23 章 MVEL
概述
MVEL 是一个基于 Java 的动态语言,类似于 OGNL,但报告速度要快得多。MVEL 支持位于 camel-mvel 模块中。
语法
您可以使用 MVEL点语法调用 Java 方法,例如:
getRequest().getBody().getFamilyName()
因为 MVEL 是动态输入的,因此在调用 getFamilyName () 方法前,不需要广播消息正文实例(对象类型)。您还可以使用缩写语法来调用 bean 属性,例如:
request.body.familyName
添加 MVEL 模块
要在路由中使用 MVEL,您需要将对 camel-mvel 的依赖添加到项目中,如 例 23.1 “添加 camel-mvel 依赖项” 所示。
例 23.1. 添加 camel-mvel 依赖项
<!-- Maven POM File -->
<properties>
<camel-version>2.21.0.fuse-760027-redhat-00001</camel-version>
...
</properties>
<dependencies>
...
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mvel</artifactId>
<version>${camel-version}</version>
</dependency>
...
</dependencies>内置变量
表 23.1 “MVEL 变量” 列出使用 MVEL 时可访问的内置变量。
表 23.1. MVEL 变量
| Name | 类型 | 描述 |
|---|---|---|
|
|
| 当前的交换 |
|
|
| 当前的交换 |
|
|
| Exchange 异常(如果有) |
|
|
| Exchange ID |
|
|
| Fault 消息(若有) |
|
|
| IN 消息 |
|
|
| OUT 消息 |
|
|
| Exchange 属性 |
|
|
| named Exchange 属性的值 |
|
|
| named Exchange 属性的 typed 值 |
示例
例 23.2 “使用 MVEL 的路由” 显示使用 MVEL 的路由。
例 23.2. 使用 MVEL 的路由
<camelContext>
<route>
<from uri="seda:foo"/>
<filter>
<language langauge="mvel">request.headers.foo == 'bar'</language>
<to uri="seda:bar"/>
</filter>
</route>
</camelContext>