Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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
Java 加载器约束冲突:加载器(x的实例)以前为名为y的不同类型启动加载_Java_Classloader_Apache Felix_Ipojo_Linkageerror - Fatal编程技术网

Java 加载器约束冲突:加载器(x的实例)以前为名为y的不同类型启动加载

Java 加载器约束冲突:加载器(x的实例)以前为名为y的不同类型启动加载,java,classloader,apache-felix,ipojo,linkageerror,Java,Classloader,Apache Felix,Ipojo,Linkageerror,我将Felix iPOJO包装在我的框架中,称之为“MyFramework”,以简化它的一些操作 使用MyFramework,我有以下几点: ProvidedService ps= content.getProvidedService("myhelloservice.helloservice.HelloService"); 1-“HelloService”捆绑包,它是一个iPOJO组件,作为服务提供“hello”消息的打印 2-“MyFrameworkComposite”捆绑包,它是另一个iP

我将Felix iPOJO包装在我的框架中,称之为“MyFramework”,以简化它的一些操作

使用MyFramework,我有以下几点:

ProvidedService ps= content.getProvidedService("myhelloservice.helloservice.HelloService");
1-“HelloService”捆绑包,它是一个iPOJO组件,作为服务提供“hello”消息的打印

2-“MyFrameworkComposite”捆绑包,它是另一个iPOJO组件,实例化上面的“HelloService”组件并在其start方法中检索其服务

3-一个启动包,它只是一个OSGI包,在其启动方法中实例化“MyFrameworkComposite”组件

4-我的Java应用程序,它加载IPOJO所需的捆绑包和上述3个捆绑包

当我运行java应用程序时,我收到以下带有错误的输出:

MyFramework Hello Service Bundle Started!
MyFramework Composite Bundle Started!
MyFramework Starter Bundle Started!
MyFramework Composite Started!
MyFramework Hello Service Component started!!
hello Component copy State is2
[ERROR]  : [adere-composite-0] The callback method start has thrown an exception : loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription"
java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at .....................................(OTHER SIMILAR ERRORS)
done ok (Y)
错误正好发生在以下行:(这一行在我的框架代码中):

providedServiceDescription属于providedServiceDescription类型,它是
org.apache.felix.ipojo.handlers.providedservice
包的一部分

在尝试检索“MyFrameworkComposite”组件中的“Hello Service”组件服务时,到达发生错误的行,如下所示:

ProvidedService ps= content.getProvidedService("myhelloservice.helloservice.HelloService");

我在不同的参考资料中读到,当类路径中存在重复的库时,可能会导致这种情况。但我相信情况并非如此。原因可能是什么

问题在于您的OSGi嵌入。OSGi框架内部和外部使用的类不同,因为它们的类加载器不同。您应该通过以下任一方式配置框架以避免此问题:

  • 通过添加额外的系统包(此处为iPOJO包)
  • 通过将这些包添加到bootdelegation

您提供的链接已失效,

@Clement上描述了问题和解决办法