在我们的项目(Osgi,Spring-Dm,Apache-Felix)中,当BundleContext.getService()返回null时,我们在生产中遇到了一些问题。这种情况很少发生,而且不是在一开始,所以这不是一个配置错误的问题。
另一种选择是使用ServiceTracker来定位服务,但由于该错误非常罕见,我不确定更改它是否能解决这种情况。
发布于 2010-11-24 22:32:22
OSGi规范说明该方法返回
我的第一个猜测是该服务没有注册。
顺便说一句,使用Spring-DM应该会使大多数对服务注册中心的编程访问变得不必要。至少在我们的公司,这些调用通常是被禁止的,并且只允许在较低级别的技术代码中使用。
发布于 2010-11-26 01:15:35
Uberto,这个服务还没有注册,这一点都不奇怪。OSGi是动态的。服务来来去去。如果您试图在注册服务之前访问它,那么您将得到null。
当您执行普通的getService()时,您在某种程度上假定服务已经存在。如果您需要服务在那里,那么您应该做一些涉及等待注册事件的事情。这可以使用ServiceTracker来完成,但它的级别相当低。正如其他人指出的那样,使用Spring-DM或声明性服务可以使这一点变得非常简单和健壮。
发布于 2019-05-01 18:41:46
如果ServiceReference不为null并且在getService(serviceReference)时获取null指针,则服务实现类未正确初始化。
确保服务实现类的构造函数是公共的,并且在创建对象时没有错误。
https://stackoverflow.com/questions/4266254
复制相似问题