搜索

32.3. XPath Injection

download PDF

参数绑定注解

在使用 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 预定义的命名空间
命名空间 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.