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