376.15. 审计命名空间
Camel 可以在评估 XPath 表达式之前发现并转储每个传入消息上存在的所有命名空间,从而为您提供所需的所有丰富的信息,以帮助您分析和固定可能的命名空间问题。
为了达到此目的,它会在内部使用另一个定制的 XPath 表达式提取消息中显示的所有命名空间映射,显示每个映射的前缀和完整命名空间 URI。
需要考虑的一些点:
- 隐式 XML 命名空间(xmlns:xml="http://www.w3.org/XML/1998/namespace")被禁止在输出中,因为它没有添加值
- 默认命名空间列在输出中的 DEFAULT 关键字下
- 请记住,命名空间可以在不同的范围下重新映射。考虑可分配不同命名空间或默认命名空间更改内部元素的顶级 'a' 前缀。对于每个发现的前缀,会列出所有关联的 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]}