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

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

http://www.w3.org/2001/XMLSchema

xsd

http://www.w3.org/2003/05/soap-envelope

soap

自定义命名空间

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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.