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
注释 的命名空间
参数。然后,可以在 @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, ) { ... } ... }