第 17 章 Groovy
概述
Groovy 是基于 Java 的脚本语言,允许快速解析对象。Groovy 支持是 camel-groovy
模块的一部分。
添加 script 模块
要在路由中使用 Groovy,您需要向项目添加 一个依赖项
,如 例 17.1 “添加 camel-groovy 依赖项” 所示。
例 17.1. 添加 camel-groovy 依赖项
<!-- Maven POM File --> <properties> <camel-version>2.23.2.fuse-7_13_0-00013-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 时可以访问的内置属性。
属性 | 类型 | value |
---|---|---|
|
| Camel 上下文 |
|
| 当前的交换 |
|
| IN 信息 |
|
| OUT 消息 |
|
|
通过 |
ENGINE_SCOPE
设置的属性。
Example
例 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 是您要解析的属性的键,其中键值是 String
类型。
有关属性组件的详情,请参阅 Apache Camel 组件参考指南 中的 属性。
自定义 Groovy Shell
有时,您可能需要在 Groovy 表达式中使用自定义 GroovyShell
实例。要提供自定义 GroovyShell
,请将 org.apache.camel.language.groovy.GroovyShellFactory
SPI 接口的实现添加到 Camel registry 中。
例如,当您将以下 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); } }