搜索

32.3. XPath Injection

download PDF

参数绑定注解

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

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

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

xsd

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

SOAP

自定义命名空间

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.