第 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 依赖项
变量 复制链接链接已复制到粘贴板!
表 22.1 “jxpath 变量” 列出使用 JXPath 时可访问的变量。
变量 | 类型 | 值 |
---|---|---|
|
| 当前的交换 |
|
| IN 消息 |
|
| OUT 消息 |
选项 复制链接链接已复制到粘贴板!
表 22.2 “jxpath 选项” 描述 JXPath 的选项。
选项 | 类型 | 描述 |
---|---|---|
|
| Camel 2.11/2.10.5 :允许打开 JXPathContext。在打开此选项时,JXPath 表达式可以评估针对表达式和消息正文,这可能无效或缺少数据。请参阅 JXPath 文档。这个选项默认为 false。 |
例子 复制链接链接已复制到粘贴板!
以下示例路由使用 JXPath:
以下简单示例在 Message Filter 中使用 JXPath 表达式作为 predicate:
{snippet:id=example|lang=java|url=camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathFilterTest.java}
{snippet:id=example|lang=java|url=camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathFilterTest.java}
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 } }
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"
"resource:scheme:location"
例如,引用 classpath 上的文件:
.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")
.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")