搜索

第 17 章 Groovy

download PDF

概述

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 时可以访问的内置属性。

表 17.1. Groovy 属性
属性类型value

context

org.apache.camel.CamelContext

Camel 上下文

交换

org.apache.camel.Exchange

当前的交换

Request (请求)

org.apache.camel.Message

IN 信息

响应

org.apache.camel.Message

OUT 消息

属性

org.apache.camel.builder.script.PropertiesFunction

通过 解析 方法使用解析方法,可以更轻松地在脚本中使用属性组件。

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);
  }
 }
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.