第 17 章 Groovy
概述
Groovy 是一个基于 Java 的脚本语言,允许快速解析对象。Groovy 支持是 camel-groovy 模块的一部分。
添加 script 模块
要在路由中使用 Groovy,您需要将 camel-groovy 的依赖关系添加到项目中,如 例 17.1 “添加 camel-groovy 依赖项” 所示。
例 17.1. 添加 camel-groovy 依赖项
<!-- Maven POM File -->
<properties>
<camel-version>2.21.0.fuse-770013-redhat-00001</camel-version>
...
</properties>
<dependencies>
...
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-groovy</artifactId>
<version>${camel-version}</version>
</dependency>
</dependencies>静态导入
要在应用程序代码中使用 groovy () 静态方法,请在 Java 源文件中包含以下导入声明:
import static org.apache.camel.builder.script.ScriptBuilder.*;
内置属性
表 17.1 “Groovy 属性” 列出使用 Groovy 时可访问的内置属性。
表 17.1. Groovy 属性
| 属性 | 类型 | 值 |
|---|---|---|
|
|
| Camel 上下文 |
|
|
| 当前的交换 |
|
|
| IN 消息 |
|
|
| OUT 消息 |
|
|
|
使用 |
ENGINE_SCOPE 设置的属性。
示例
例 17.2 “使用 Groovy 的路由” 显示使用 Groovy 脚本的两个路由。
例 17.2. 使用 Groovy 的路由
<camelContext>
<route>
<from uri="direct:items" />
<filter>
<language language="groovy">request.lineItems.any { i -> i.value > 100 }</language>
<to uri="mock:mock1" />
</filter>
</route>
<route>
<from uri="direct:in"/>
<setHeader headerName="firstName">
<language language="groovy">$user.firstName $user.lastName</language>
</setHeader>
<to uri="seda:users"/>
</route>
</camelContext>使用属性组件
要从 properties 组件访问属性值,请在内置属性属性上调用 resolve 方法,如下所示:
.setHeader("myHeader").groovy("properties.resolve(PropKey)")
其中 PropKey 是您要解析的属性的键,其中 key 值为 String type。
有关属性组件的详情,请参阅 Apache Camel 组件参考指南 中的 属性。
自定义 Groovy Shell
有时,您可能需要在 Groovy 表达式中使用自定义 GroovyShell 实例。要提供自定义 GroovyShell,请在 Camel 注册表中添加 org.apache.camel.language.groovy.GroovyShellFactory SPI 接口的实现。
例如,当您将以下 bean 添加到 Spring 上下文时,Apache Camel 将使用包含自定义静态导入的自定义 GroovyShell 实例,而不是默认导入。
public class CustomGroovyShellFactory implements GroovyShellFactory {
public GroovyShell createGroovyShell(Exchange exchange) {
ImportCustomizer importCustomizer = new ImportCustomizer();
importCustomizer.addStaticStars("com.example.Utils");
CompilerConfiguration configuration = new CompilerConfiguration();
configuration.addCompilationCustomizers(importCustomizer);
return new GroovyShell(configuration);
}
}