32.3. XPath Injection
参数绑定注解
当使用 Apache Camel bean 集成在 Java bean 上调用方法时,您可以使用 @XPath
注释从交换中提取值并将其绑定到 method 参数。
例如,请考虑以下路由片段,它会在 AccountService
对象中调用 credit
方法:
from("queue:payments") .beanRef("accountService","credit") ...
credit
方法使用参数绑定注解从消息正文中提取相关数据并将其注入其参数,如下所示:
public class AccountService { ... public void credit( @XPath("/transaction/transfer/receiver/text()") String name, @XPath("/transaction/transfer/amount/text()") String amount ) { ... } ... }
如需更多信息,请参阅客户门户网站上的 Apache Camel 开发指南中的 Bean 集成。
命名空间
表 32.1 “@XPath 的预定义命名空间” 显示为 XPath 预定义的命名空间。您可以在 @XPath
注释中的 XPath
表达式中使用这些命名空间前缀。
命名空间 URI | prefix |
---|---|
| |
|
自定义命名空间
您可以使用 @NamespacePrefix
注释来定义自定义 XML 命名空间。调用 @NamespacePrefix
注释,以初始化 @XPath
注释 的命名空间
参数。然后,@NamespacePrefix
定义的命名空间可以在 @XPath
注释的 expression 值中使用。
例如,要将前缀 ex
与自定义命名空间 http://fusesource.com/examples
关联,请按如下所示调用 @XPath
注释:
public class AccountService { ... public void credit( @XPath( value = "/ex:transaction/ex:transfer/ex:receiver/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String name, @XPath( value = "/ex:transaction/ex:transfer/ex:amount/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String amount, ) { ... } ... }