【发布时间】:2020-02-23 04:01:16
【问题描述】:
我一遍又一遍地争论这个问题。归结为:
如何调试在 Apache Karaf 中运行的 Aries 蓝图?
我最终得到来自 diag 的输出,它仅暗示 XML 命名空间 http://camel.apache.org/schema/blueprint/cxf 找不到有效模式这一事实。顺便说一下,文档架构 URL 是 http://camel.apache.org/schema/blueprint/camel-cxf-blueprint.xsd。
Status: GracePeriod
Declarative Services
Blueprint
10/27/19 4:52 PM
Missing dependencies:
(&(objectClass=org.apache.aries.blueprint.NamespaceHandler)(osgi.service.blueprint.namespace=http://camel.apache.org/schema/blueprint/cxf))
是的,camel-cxf 正在运行。但是我怎样才能看到到底出了什么问题呢?
我在 IBM 文档中找到了这个注释:
蓝图运行时解析蓝图描述符两次。第一遍很快,只找到蓝图包使用的每个命名空间。如果蓝图包使用非标准名称空间,则蓝图容器会尝试在 OSGi 服务注册表中为每个自定义名称空间定位 NamespaceHandler 服务。 NamespaceHandler 服务通过使用 OSGi 服务属性来通告它可以处理的每个 xml 命名空间。蓝图运行时不会解析蓝图 xml,直到可以为包中使用的每个自定义命名空间找到 NamespaceHandler 服务。除非可以为每个自定义命名空间找到 NamespaceHandler 服务,否则蓝图容器无法处理捆绑包。此结果可能意味着如果不存在 NamespaceHandler,则蓝图容器会无限期地等待。如果遇到这种情况,那么蓝图容器会向日志发出警告。当蓝图解析器开始解析蓝图 xml 文件时,它会解析任何标准蓝图元素。当解析器到达一个自定义元素时,解析器会调用 NamespaceHandler 来宣传对自定义元素的命名空间的支持。在这里,NamespaceHandler 有机会处理自定义元素中的信息、修改运行时蓝图模型或执行任何其他操作。如果在任何命名空间定义中出现输入错误,那么蓝图几乎肯定无法启动。
【问题讨论】:
标签: apache-camel apache-karaf blueprint-osgi