Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaOSGi:带有声明性服务的实例化异常_Java_Osgi_Declarative Services - Fatal编程技术网

JavaOSGi:带有声明性服务的实例化异常

JavaOSGi:带有声明性服务的实例化异常,java,osgi,declarative-services,Java,Osgi,Declarative Services,我是OSGi新手,正在构建第一个DS实现 所有内容都根据“本书”进行编码,但运行时会出现以下错误: java.lang.InstantiationException: com.mine.logger.internal.udp.UdpListener at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.equinox.interna

我是OSGi新手,正在构建第一个DS实现

所有内容都根据“本书”进行编码,但运行时会出现以下错误:

java.lang.InstantiationException: com.mine.logger.internal.udp.UdpListener
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.eclipse.equinox.internal.ds.model.ServiceComponent.createInstance(ServiceComponent.java:457)
at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.createInstance(ServiceComponentProp.java:264)
at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:325)
at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:328)
at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:933)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:756)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:711)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
at org.eclipse.equinox.internal.ds.InstanceProcess.registerService(InstanceProcess.java:504)
at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:212)
at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:441)
at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:213)
at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:800)
at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:767)
at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70)
这是我想在其他模块中使用的模块的configuration.xml:

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="startup" deactivate="shutdown" immediate="true" name="com.mine.logger.storeindb">
   <implementation class="com.mine.logger.internal.storeindb.StoreLog"/>
   <service>
      <provide interface="com.mine.logger.storeindb.IStoreLog"/>
   </service>
</scr:component>
有什么想法吗? 谢谢
弗兰克打字错误?
IStoreLog
字段名为
storeLog
,但您说的是
name=“storeLog”
(小写
l
)。

当应用程序尝试使用class类中的newInstance方法创建类的实例,但无法实例化指定的class对象时引发。实例化可能因各种原因而失败,包括但不限于:

  • class对象表示抽象类、接口、数组类、基元类型或void
  • 该类没有空构造函数
com.mine.logger.internal.udp.UdpListener是否有一个公共的、没有参数的构造函数?

多亏了Thilo

添加了一个无参数函数,错误消失了

public UdpListener() 
{
    // public, no-args constructor needed for Declarative Services !!!
}

public UdpListener(int port) 
{
    this.port = port;
}

我也有类似的问题,因为引用了非公共类。比如:

在ServiceAImpl.java文件中:

class ServiceBImpl implements Service {
...
}

这是不幸的重构造成的后果。

不,同样的结果,名称似乎只是用作标签,而不是代码。同样的结果:你只是用评论回答了自己的问题。这不是一个论坛。您应该只接受正确答案和/或对其他答案或您的问题添加评论。如果你愿意,你也可以编辑你的问题。
public UdpListener() 
{
    // public, no-args constructor needed for Declarative Services !!!
}

public UdpListener(int port) 
{
    this.port = port;
}
class ServiceBImpl implements Service {
...
}