77.13. 命名空间审核以帮助调试


用户经常面临的许多与 XPath 相关的问题都与命名空间的使用相关联。您的消息中的命名空间之间可能有一些拼写错误,而您的 XPath 表达式不知道或引用它们。由于命名空间问题而导致的 XML 元素和属性无法找到 XML 元素和属性的 XPath predicates 或表达式,如果实际都缺乏命名空间定义,它们可能看起来不工作

XML 中的命名空间完全是必需的,但我们希望通过实现一些 magic 或 voodoo 来自动连接命名空间来简化其使用,但事实上,除此路径的任何操作都将与标准冲突,并大大阻碍了互操作性。

因此,我们目前可以通过向 XPath Expression 语言添加两个新功能来帮助您调试此类问题,因此可通过 predicates 和 表达式访问。

每次在内部池中创建新的 XPath 表达式时,Camel 将记录 org.apache.camel.language.xpath.XPathBuilder 日志记录器下的表达式的命名空间上下文。由于 Camel 以分级方式(父子关系)代表命名空间上下文,因此整个树以递归方式输出,其格式如下:

[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]
Copy to Clipboard Toggle word wrap

这些选项可用于激活此日志记录:

  • org.apache.camel.language.xpath.XPathBuilder 日志记录器或某些父日志记录器(如 org.apache.camel 或根日志记录器)上启用 TRACE 日志记录
  • 启用 logNamespaces 选项,如以下部分所示,在这种情况下,日志记录将在 INFO 级别中进行

77.13.2. 审计命名空间

在评估 XPath 表达式前,Camel 可以发现并转储每个传入消息上存在的所有命名空间,提供帮助您分析和固定可能命名空间问题所需的信息。

要做到这一点,它会在内部使用另一个特殊定制的 XPath 表达式来提取消息中显示的所有命名空间映射,显示每个映射的前缀和完整命名空间 URI。

考虑以下几点:

  • 隐式 XML 命名空间(xmlns:xml="http://www.w3.org/XML/1998/namespace")被禁止在输出中,因为它没有添加值
  • 默认命名空间列在输出中的 DEFAULT 关键字下
  • 请记住,可以在不同的范围下重新映射命名空间。认为顶级的"a"前缀,可以分配内部元素,或者内部范围中的默认命名空间更改。对于每个发现的前缀,会列出所有关联的 URI。

您可以在 Java DSL 和 XML DSL 中启用这个选项:

Java DSL :

XPathBuilder.xpath("/foo:person/@id", String.class).logNamespaces()
Copy to Clipboard Toggle word wrap

XML DSL:

<xpath logNamespaces="true" resultType="String">/foo:person/@id</xpath>
Copy to Clipboard Toggle word wrap

审计的结果将显示在 org.apache.camel.language.xpath.XPathBuilder 日志记录器下的 INFO 级别,类似如下:

2012-01-16 13:23:45,878 [stSaxonWithFlag] INFO  XPathBuilder  - Namespaces discovered in message:
{xmlns:a=[http://apache.org/camel], DEFAULT=[http://apache.org/default],
xmlns:b=[http://apache.org/camelA, http://apache.org/camelB]}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat