【发布时间】:2015-05-04 00:52:33
【问题描述】:
我正在运行嵌入在我的 Android 应用程序中的 OSGI (Apache Felix)。此外,我能够安装、注册和启动服务提供和服务消费包。服务消费束按预期消费由服务提供束提供的服务。 现在我希望我的应用程序与包通信,即为包提供方法参数或从那里接收处理结果。
不幸的是,当尝试直接从我的应用程序访问捆绑包时,由于涉及不同的类加载器,我要么收到同一类型的 ClassCastExceptions,要么收到 NoClassDefFoundException。
开始更新
我的应用程序的核心是一个工作服务 w,它启动另一个服务 f,该服务专门负责管理 OSGI 事务。在 f 中运行的包只能作为 *.jar 文件使用,它们都导出自己的接口。从 w 内部,我可以获取一个 ServiceTracker 对象,该对象跟踪通过
实现捆绑接口的对象的实例ServiceTracker serviceTracker = new ServiceTracker(context,"my.bundle.BundleInterface", null);.
我现在可以通过
Object serviceObject = serviceTracker.getService(); 来自 w 代码内的任何捆绑包之外。
现在调用BundleInterface interfaceObject = (BundleInterface) serviceObject; 会得到NoClassDefFoundException。
我已经将包的 jar 文件添加到构建路径中,以便完全编译代码。
如何访问我的serviceObject?
我想这是一个类加载的问题,但我如何确保类是由相同的类加载器加载的?我是否必须在 felix 配置属性文件中添加任何条目?
结束更新
【问题讨论】:
标签: android osgi apache-felix osgi-bundle