OSGi声明性服务-空指针异常
我的声明性服务有问题。我有两个包,一个是服务器提供程序,另一个是使用服务的用户界面 在服务器端,实现是:OSGi声明性服务-空指针异常,osgi,declarative-services,Osgi,Declarative Services,我的声明性服务有问题。我有两个包,一个是服务器提供程序,另一个是使用服务的用户界面 在服务器端,实现是: public boolean checkUser(){ return true; } public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService{ IZBService zb; public void setZBService(IZBService e
public boolean checkUser(){
return true;
}
public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService{
IZBService zb;
public void setZBService(IZBService eventAdmin) {
this.zb = eventAdmin;
}
public void unsetZBService(IZBService eventAdmin){
if(this.zb == eventAdmin){
this.zb = null;}
}
public boolean greetServer(String input, String input2) throws Exception {
return zb.checkUser();
}
}
以及OSGi INF文件夹中的XML文件:
<component name="ZBService">
<implementation class="service.ZBService" />
<service>
<provide interface="service.IZBService" />
</service>
</component>
和XML文件:
<component name="ZBService">
<implementation class="main.java.com.gwt.app.server.GreetingServiceImpl" />
<service>
<provide interface="main.java.com.gwt.app.client.GreetingService"/>
</service>
<reference name="zb" interface="service.IZBService" bind="setZBService" unbind="unsetZBService" cardinality="0..n" policy="dynamic" />
</component>
XML客户端是:
<?xml version="1.0" encoding="UTF-8" ?>
<scr:component name="serviceZB" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
<implementation class="main.java.com.gwt.app.server.GreetingServiceImpl" />
<!-- <service>
<provide interface="main.java.com.gwt.app.client.GreetingService"/>
</service> -->
<reference name="zb" interface="service.IZBService"
bind="setZb" unbind="unsetZb" cardinality="1..1"
policy="static" />
</scr:component>
如果部署了服务,为什么不注入服务?两个组件的名称相同,这在讨论它们时有点尴尬
客户端上的引用具有:cardinality=“0..n”policy=“dynamic”。这意味着它可以通过0到n个引用激活。但是您的代码不能处理这个问题。它似乎只期望一个参考。也许您应该使用cardinality=“1..1”policy=“static” 以下是您可以尝试的事项列表:
- 首先,删除zb的“静态”,这可能是问题所在
- 如果您使用的是Equinox,请将-Dequinox.ds.print=true标志添加到VM参数中,并查看有关解析XML等的更多信息
- 当然,将sysout添加到setZB和unsetZB:)
- 请记住,IZBService实现需要一个不带参数的构造函数
- 如果使用Equinox,请使用“list-c”命令获取每个组件的信息(这很酷,因为它确切地说明了组件未注册的原因)
- 将XMLs中的“inmediate=true”设置为强制Inmediately激活
<?xml version="1.0" encoding="UTF-8" ?>
<scr:component name="serviceZB" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
<implementation class="main.java.com.gwt.app.server.GreetingServiceImpl" />
<!-- <service>
<provide interface="main.java.com.gwt.app.client.GreetingService"/>
</service> -->
<reference name="zb" interface="service.IZBService"
bind="setZb" unbind="unsetZb" cardinality="1..1"
policy="static" />
</scr:component>