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 表达式中使用这些命名空间前缀。

表 32.1. @XPath 预定义的命名空间

自定义命名空间

您可以使用 @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,
  )
  {
    ...
  }
  ...
}