375.15. 审核命名空间

在评估 XPath 表达式前,Camel 能够发现并转储每个传入消息上存在的所有命名空间,为您提供所需信息的丰富性,以帮助您了解可能的命名空间问题。

为实现此目的,它会内部使用另一个特别定制的 XPath 表达式来提取信息中显示的所有命名空间映射,显示前缀以及每个映射的完整命名空间 URI。

有些点考虑如下:

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

您可以在 Java DSL 和 Spring DSL 中启用这个选项。

Java DSL:

XPathBuilder.xpath("/foo:person/@id", String.class).logNamespaces()

Spring DSL:

<xpath logNamespaces="true" resultType="String">/foo:person/@id</xpath>

审计的结果将显示在 org.apache.camel.builder.xml.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]}