32.8. 使用变量和功能


评估路由中的变量

在评估路由中的 XPath 表达式时,您可以使用 XPath 变量访问当前交换的内容,以及 O/S 环境变量和 Java 系统属性。如果通过 XML 命名空间访问变量,则访问变量值的语法为 $ VarName 或 $Prefix : VarName。

例如,您可以将 In 消息的正文访问为 $in:bodyIn message 的标头值为 $in:HeaderName。O/S 环境变量可作为 $env 访问:EnvVar 和 Java 系统属性可作为 $system:SysVar 访问。

在以下示例中,第一个路由提取 /person/city 元素的值,并将其插入到 city 标头中。第二个路由过滤使用 XPath 表达式 $in:city = 'London' 的交换,其中 $in:city 变量替换为 city 标头的值。

from("file:src/data?noop=true")
    .setHeader("city").xpath("/person/city/text()")
    .to("direct:tie");

from("direct:tie")
    .filter().xpath("$in:city = 'London'").to("file:target/messages/uk");

评估路由中的功能

除了标准 XPath 功能外,XPath 语言还定义了其他功能。这些额外功能(在 表 32.4 “XPath 自定义功能”中列出的)可用于访问底层交换,评估简单的表达式或查找 Apache Camel 属性占位符组件中的属性。

例如,以下示例使用 in:header () 函数和 in:body () 函数来访问底层交换中的头和正文:

from("direct:start").choice()
  .when().xpath("in:header('foo') = 'bar'").to("mock:x")
  .when().xpath("in:body() = '<two/>'").to("mock:y")
  .otherwise().to("mock:z");

请注意这些功能和对应的 in:HeaderNamein: body 变量之间的相似性。这个函数的语法略有不同: in:header ('HeaderName') 而不是 in:HeaderName; 和 in:body () 而不是 in:body

评估 XPathBuilder 中的变量

您还可以使用使用 XPathBuilder 类评估的表达式中的变量。在这种情况下,您无法使用 $in:body$in:HeaderName 等变量,因为没有要评估的 Exchange 对象。但是,您可以使用 变量(Name,Value) fluent builder 方法定义内联的变量。

例如,以下 XPathBuilder 构造评估 $test 变量,该变量定义为具有 伦敦 的值:

String var = XPathBuilder.xpath("$test")
               .variable("test", "London")
               .evaluate(getContext(), "<name>foo</name>");

请注意,以这种方式定义的变量会自动进入全局命名空间中(例如,变量 $test,不使用前缀)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.