第 22 章 JXPath


概述

JXPath 语言允许您使用 Apache Commons JXPath 语言调用 Java Bean。JXPath 语言的语法与 XPath 类似,但不从 XML 文档选择元素或属性节点,而是调用 Java Bean 对象图中的方法。如果其中一个 bean 属性返回 XML 文档( DOM/JDOM 实例),但路径的剩余部分被解释为 XPath 表达式,并使用从文档中提取 XML 节点。换句话说,JXPath 语言提供了对象图形导航和 XML 节点选择的混合。

添加 JXPath 软件包

要在路由中使用 JXPath,您需要将对 camel-jxpath 的依赖关系添加到项目中,如 例 22.1 “添加 camel-jxpath 依赖项” 所示。

例 22.1. 添加 camel-jxpath 依赖项

<!-- 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-jxpath</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

变量

表 22.1 “jxpath 变量” 列出使用 JXPath 时可访问的变量。

表 22.1. jxpath 变量
变量类型

org.apache.camel.Exchange

当前的交换

in

org.apache.camel.Message

IN 消息

out

org.apache.camel.Message

OUT 消息

选项

表 22.2 “jxpath 选项” 描述 JXPath 的选项。

表 22.2. jxpath 选项
选项类型描述

lenient

布尔值

Camel 2.11/2.10.5 :允许打开 JXPathContext。在打开此选项时,JXPath 表达式可以评估针对表达式和消息正文,这可能无效或缺少数据。请参阅 JXPath 文档。这个选项默认为 false。

例子

以下示例路由使用 JXPath:

<camelContext>
  <route>
    <from uri="activemq:MyQueue"/>
    <filter>
      <jxpath>in/body/name = 'James'</xpath>
      <to uri="mqseries:SomeOtherQueue"/>
    </filter>
  </route>
</camelContext>

以下简单示例在 Message Filter 中使用 JXPath 表达式作为 predicate:

from("direct:start").
    filter().jxpath("in/body/name='James'").
    to("mock:result");

jxpath 注入

您可以使用 Bean 集成在 bean 上调用方法,并使用各种语言(如 JXPath)从消息中提取值并将其绑定到 method 参数。

例如:

public class Foo {
     @MessageDriven(uri = "activemq:my.queue")
     public void doSomething(@JXPath("in/body/foo") String correlationID, @Body String body)
     { // process the inbound message here }
   }

从外部资源载入脚本

从 Camel 2.11 开始提供

您可以对脚本进行外部化,并让 Camel 从资源(如 "classpath:""file:""http:" )加载它。请遵循以下语法:

"resource:scheme:location"

例如,引用 classpath 上的文件:

.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.