376.14. 命名空间审核以协助调试
可从 Camel 2.10 开始
用户经常会遇到到命名空间使用大量 XPath 相关的问题。您可能会在消息中的命名空间和 XPath 表达式知道或引用命名空间之间有一些错误。由于命名空间问题无法找到 XML 元素和属性的 XPath predicates 或表达式可能只是类似"它们无法正常工作",当事实上都缺少命名空间定义。
XML 中的命名空间是完全必要的,而我们希望通过实施一些音量或 voodoo 来自动进行有线命名空间的使用,但事实上是,对路径的任何行动都将与标准不满意,并且大大阻碍了互操作性。
因此,我们可以通过向 XPath 表达式语言添加两个新功能,从而帮助您对这些问题进行调试。
#=== 记录您的 XPath 表达式/predicate 的 Namespace Context
每次在内部池中创建新的 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
或根日志记录器)上启用 TRACE 日志记录 -
启用
logNamespaces
选项,如 Auditing Namespaces 中所示,在这种情况下,日志将在 INFO 级别上发生。