Karaf启动时Blueprint容器启动失败及API 404问题求诊
问题根本原因分析
核心矛盾:Bundle状态与Blueprint容器状态解耦
OSGi框架中,Bundle的Active状态仅代表Bundle的类已被加载、自身完成基础启动流程,但Bundle内部的Blueprint容器是独立的子组件,它的启动失败不会改变Bundle的整体状态。所以你会看到Bundle显示Active,但实际内部的服务注册、Servlet初始化等核心逻辑并未执行。
依赖未解析的连锁故障链
从报错日志可梳理出明确的故障传导路径:
org.opendaylight.netconf.restconf-nb-bierman02的Blueprint容器因缺少org.opendaylight.aaa.api.AAAService无法启动,导致它本应提供的JSONRestconfService服务无法注册到OSGi服务注册表org.opendaylight.neutron.northbound-api依赖上述JSONRestconfService,因此它的Blueprint容器也启动失败org.opendaylight.aaa.aaa-shiro的Blueprint容器找不到符合过滤条件(&(|(type=default)(!(type=*)))(objectClass=org.osgi.service.http.HttpService))的HttpService实例,导致其内部的认证相关Servlet无法完成注册
Servlet未注册与API 404的直接原因
所有API相关的Servlet都是通过Blueprint配置文件绑定到HttpService的,一旦Blueprint容器启动失败,这些Servlet的注册代码根本不会被执行,所以执行scr:info org.ops4j.pax.web.service.internal.WhiteboardDtoService时看不到对应的Servlet条目,外部API调用自然返回404。
内容的提问来源于stack exchange,提问作者soma
相关产品推荐
相关产品推荐

