376.14. 命名空间审核以协助调试
从 Camel 2.10 开始提供
用户经常面临的大量与 XPath 相关的问题与命名空间使用相关联。您消息中存在的命名空间与 XPath 表达式了解或引用的命名空间之间可能有一些不正确。XPath predicates 或表达式无法找到 XML 元素和属性,因为命名空间问题可能只是像"它们无法正常工作",实际上它并没有命名空间定义。
XML 中的命名空间是完全必要的,而我们希望通过自动实施一些魔法或 voodoo 来简化其使用情况,但事实上是,该路径关闭了标准,并会大大阻碍了互操作性。
因此,我们几乎可以通过向 XPath 表达式语言添加两个新功能来协助您调试这些问题,因此可以从 predicates 和 表达式中轻松实现。
#=== 记录您的 XPath 表达式/predicate 的命名空间上下文
每次在内部池中创建新的 XPath 表达式时,Camel 都会记录 org.apache.camel.builder.xml.XPathBuilder 日志记录器下的表达式的命名空间上下文。由于 Camel 以分级方式表示命名空间上下文(父子关系),整个树都是以递归方式的输出,其格式如下:
[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]
[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]
任何这些选项都可用于激活此日志:
-
在
org.apache.camel.builder.xml.XPathBuilderlogger 或一些父日志记录器(如org.apache.camel或根日志记录器)上启用 TRACE 日志记录 -
启用
logNamespaces选项,如 Auditing Namespaces 所示,在这种情况下,日志记录将在 INFO 级别上发生