32.8. 使用变量和功能
评估路由中的变量 复制链接链接已复制到粘贴板!
在评估路由中的 XPath 表达式时,您可以使用 XPath 变量访问当前交换的内容,以及 O/S 环境变量和 Java 系统属性。如果通过 XML 命名空间访问变量,则用于访问变量值 的语法是 : VarName。
$VarName 或 $Prefix
例如,您可以将 In message 的正文作为 $in:body,将 In message 的标头值 进行访问为 $in:HeaderName。O/S 环境变量可以作为 $env 进行访问: EnvVar 和 Java 系统属性可作为 $system:SysVar 进行访问。
在以下示例中,第一个路由提取 /person/city 元素的值并将其插入到 城市 标头中。第二个路由过滤器使用 XPath 表达式 $in:city = 'London' 交换,其中 $in:city 变量由 城市 标头的值替换。
评估路由中的功能 复制链接链接已复制到粘贴板!
除了标准的 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");
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:HeaderName 或 in:body 变量之间的相似之处。这个功能有稍有不同的语法: in:header ('HeaderName') 而不是 in:HeaderName; 和 in:body () 而不是 in:body ()。
评估 XPathBuilder 中的变量 复制链接链接已复制到粘贴板!
您还可以使用表达式中的变量,这些变量通过 XPathBuilder 类进行评估。在这种情况下,您无法使用 $in:body 或 $in:HeaderName 等变量,因为没有要评估的交换对象。但是,您可以使用 使用变量(名称、Value) 定义的变量来 fluent builder 方法。
例如,以下 XPathBuilder 构建会评估 $test 变量,该变量的定义为具有值 London :
String var = XPathBuilder.xpath("$test")
.variable("test", "London")
.evaluate(getContext(), "<name>foo</name>");
String var = XPathBuilder.xpath("$test")
.variable("test", "London")
.evaluate(getContext(), "<name>foo</name>");
请注意,以这种方式定义的变量会自动输入到全局命名空间中(例如,变量 $test,不使用前缀)。