32.3. XPath Injection
参数绑定注解
当使用 Apache Camel bean 集成在 Java bean 上调用方法时,您可以使用 @XPath
注释从交换中提取值并将其绑定到方法参数。
例如,请考虑以下路由片段,它调用 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
注释的 namespaces
参数。然后,由 @NamespacePrefix
定义的命名空间可以在 @XPath
注释的表达式值中使用。
例如,要将前缀 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, ) { ... } ... }