【发布时间】:2026-01-12 22:30:01
【问题描述】:
几年来,我一直在使用 ServiceMix,但仍然没有成功地在我的包之间共享服务实现 - 由于使用了代理实现,它总是导致 ClassCastException。
我有两个捆绑包和一个嵌入式 jar。
- 嵌入式 jar 包含我的服务类实现的接口。
- Bundle 'A' 具有服务类实现并导出 impl 所在的包。
-
Bundle 'B' 导入了 bundle 'A' 暴露的包。在 Bundle 'B' 中,以下代码成功获取服务;
IScenarioService scenarioService = null; try { ServiceReference<?>[] servRefs = context.getServiceReferences(IScenarioService.class.getName(), null); if (servRefs == null || servRefs.length == 0) { LOGGER.error("Found no service references for " + IScenarioService.class.getName()); return false; } else { LOGGER.info("Services: " + servRefs.length); boolean assign = servRefs[0].isAssignableTo(context.getBundle(), IScenarioService.class.getName()); LOGGER.info("Assign: " + assign); scenarioService = (IScenarioService) context.getService(servRefs[0]); } } catch (InvalidSyntaxException e) { LOGGER.error(e.getMessage()); e.printStackTrace(); return false; }
我的日志显示找到了 1 个服务并且服务“isAssignable”,但在线 scenarioService = (IScenarioService) context.getService(servRefs[0]); 我得到了
java.lang.ClassCastException: Proxy511e3d1b_93b7_4de1_835f_3e5df19040b4 无法转换为 xx.x.xx.IScenarioService
我尝试通过 Blueprint 注入服务,在上面的代码中访问,更改 pom 的 maven-bundle-plugin 中的导入/导出关系,以及将所有接口存储在 Bundle 'A' 中并导出相关包....都无济于事。
有人可以提供一个答案让我摆脱痛苦吗? 谢谢。
【问题讨论】:
标签: java osgi apache-karaf apache-servicemix