126.6. 例子


在以下 XML DSL 示例中,我们根据标头值进行过滤:

<from uri="seda:orders">
   <filter>
       <simple>${header.foo}</simple>
       <to uri="mock:fooOrders"/>
   </filter>
</from>
Copy to Clipboard

Simple 语言可用于上面的 predicate 测试,在 Message Filter 模式中测试 中是否有 foo 标头(带有键 foo 的标头)。如果表达式评估为 true,则消息将路由到 mock:fooOrders 端点,否则消息将被丢弃。

Java DSL 中的相同示例:

from("seda:orders")
    .filter().simple("${header.foo}")
        .to("seda:fooOrders");
Copy to Clipboard

您还可以将简单语言用于简单文本串联,例如:

from("direct:hello")
    .transform().simple("Hello ${header.user} how are you?")
    .to("mock:reply");
Copy to Clipboard

请注意,我们必须在表达式中使用 $\\{ } 占位符,以允许 Camel 正确解析它。

这个示例使用 date 命令输出当前日期。

from("direct:hello")
    .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
    .to("mock:reply");
Copy to Clipboard

在以下示例中,我们调用 bean 语言来调用要包含在返回的字符串中的 bean 方法:

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator}")
    .to("mock:reply");
Copy to Clipboard

其中 orderIdGenerator 是 Registry 中注册的 bean 的 id。如果使用 Spring,则它是 Spring bean id。

如果要声明对顺序 id 生成器 bean 调用的方法,我们必须首先将 .method 名称 放在下方,我们调用 generateId 方法。

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
    .to("mock:reply");
Copy to Clipboard

我们可以使用 ?method=methodname 选项,我们熟悉 Bean 组件本身:

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
    .to("mock:reply");
Copy to Clipboard

您还可以将正文转换为给定类型,例如确保它是一个 String:

<transform>
  <simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
Copy to Clipboard

有几个类型有一个简写表示法,因此我们可以使用 String 而不是 java.lang.String。这些是: byte[], String, Integer, Long。所有其他类型必须使用其 FQN 名称,如 org.w3c.dom.Document

也可以从标头 映射 中查找值:

<transform>
  <simple>The gold value is ${header.type[gold]}</simple>
</transform>
Copy to Clipboard

在上面的代码中,我们查找名为 type 的标头,并将其命名为 java.util.Map,然后使用键 gold 进行查找并返回值。如果标头无法转换为 Map,则会抛出异常。如果名为 type 的标头不存在 null,则返回 null。

您可以嵌套功能,如下所示:

<setHeader name="myHeader">
  <simple>${properties:${header.someKey}}</simple>
</setHeader>
Copy to Clipboard
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat