gpt4 book ai didi

java - OSGi 服务引用为空(从启动器到 bundle 的服务)

转载 作者:行者123 更新时间:2023-11-30 11:20:01 25 4
gpt4 key购买 nike

我需要将一些参数从 felix 启动器类(主要)传递到 bundle,我遵循了 this advice .我做了什么

启动器项目
test.launcher包包含:Main.java,Temp.java,TempI.java

捆绑项目
test.bundle包包含:Activator.java
test.launcher 包包含:TempI.java

如您所见,我将 TempI.java 复制到捆绑项目,因为启动器未捆绑并且无法导出其包。

主要

BundleContext context = felix.getBundleContext();
ServiceRegistration serviceRegistration=context.registerService(TempI.class.getName(), new Temp(), null);

在激活器中

ServiceReference serviceReference = context.getServiceReference(TempI.class.getName());
TempI service = (TempI) context.getService(serviceReference);
System.out.println(service.testService());

但我进入了Activator

java.lang.NullPointerException: Specified service reference cannot be null.

问题是什么?又是不同的类加载器?或者什么?

最佳答案

您声明启动器和包都包含它们自己的 TempI 类副本。一个由启动器的类加载器加载,另一个由 bundle 的类加载器加载。对于 VM 和 OSGi 服务注册表,这些是不同的类对象。因此,当您捆绑查找属于您的 bundle 已知的 TempI 类的 TempI 服务时,它找不到。

您不需要将 TempI 放入包中,而是导入包。您还需要配置框架以使用 org.osgi.framework.system.packages.extra 导出包.然后你的 bundle 将从系统 bundle 中导入包,并且在启动器中注册的服务将对 bundle 可见。

关于java - OSGi 服务引用为空(从启动器到 bundle 的服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22955417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com