376.14. 命名空间审计以帮助调试
从 Camel 2.10 开始提供
用户经常面临的大量与命名空间相关的问题。您可能会在消息中存在的命名空间和 XPath 表达式了解或引用的命名空间之间有一些对齐。如果因为命名空间问题而无法找到 XML 元素和属性的 XPath predicates 或 表达式可能只是"它们无法正常工作",实际上,它都缺少命名空间定义。
XML 中的命名空间是完全必要的,虽然我们希望通过自动将一些 magic 或 voodoo 到线命名空间来简化其使用情况,但实际上,任何操作都会与标准有关,并大大阻碍了互操作性。
因此,我们可以通过向 XPath Expression Language 添加两个新功能来帮助您调试此类问题,从而从 predicates 和 表达式中存活。
#=== 日志记录 XPath 表达式/predicate 的 Namespace 上下文
每次在内部池中创建新的 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.XPathBuilder
日志记录器或一些父日志记录器(如org.apache.camel
或 root 日志记录器)上启用 TRACE 日志记录 -
启用
logNamespaces
选项,如 Auditing Namespaces 所示,在这种情况下,日志记录将在 INFO 级别上发生