xstream对象反序列化需要Osgi循环引用吗?

xstream对象反序列化需要Osgi循环引用吗?,osgi,eclipse-rcp,xstream,Osgi,Eclipse Rcp,Xstream,Bundle A依赖于Bundle XStream 然而,Bundle XStream还需要访问Bundle A中的类,否则我无法进行对象反序列化ala(Bundle A.class)XStream.fromXml(xmlString) 现在我所做的是在BundleA包上导入Bundle XStream中的包并在BundleA中导出它们,但由于BundleA也使用XStream,Eclipse检测到一个“循环引用”。这一切似乎运行良好,但我不明白这个Eclipse错误的意义是什么? 在osgi中

Bundle A依赖于Bundle XStream

然而,Bundle XStream还需要访问Bundle A中的类,否则我无法进行对象反序列化ala
(Bundle A.class)XStream.fromXml(xmlString)

现在我所做的是在BundleA包上导入Bundle XStream中的包并在BundleA中导出它们,但由于BundleA也使用XStream,Eclipse检测到一个“循环引用”。这一切似乎运行良好,但我不明白这个Eclipse错误的意义是什么?
在osgi中如何解决这个问题?

通常,您应该尝试在捆绑包之间获得清晰的客户机-服务器包关系。所以,如果可能的话,应该去掉循环引用。在你的情况下,这是可能的

与您所指出的相反,如果您能够告诉功能使用不同的类加载器来加载流中所指示的类,那么您的XStream捆绑包能够从另一个捆绑包中反序列化对象。由于您似乎正在使用XStream,因此可以使用:

xstream.setClassLoader(bundleAClassLoader);

其中
bundleClassLoader
是一个可以访问域类的类加载器(bundleA的类加载器)。在这种情况下,XStream捆绑包的
导入包是不必要的。

这确实有效,非常感谢!我假设大多数像这样使用反射的框架都会有某种应该有的.setClassLoader()方法。如果不是,请忽略它们,因为API设计不好。