【问题标题】:Osgi cyclic reference needed for xstream object deserialization?xstream对象反序列化需要Osgi循环引用?
【发布时间】:2014-01-09 11:38:47
【问题描述】:

Bundle A 依赖于 Bundle XStream。

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

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

【问题讨论】:

    标签: osgi eclipse-rcp xstream


    【解决方案1】:

    通常,您应该尝试在您的捆绑包之间建立清晰的客户端-服务器包关系。因此,如果可能的话,您应该摆脱循环引用。在你的情况下这是可能的。

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

    xstream.setClassLoader(bundleAClassLoader);
    

    其中bundleAClassLoader 是一个类加载器,它可以访问您的域类(bundle A 的类加载器)。在这种情况下,XStream 包的Import-Package 是不必要的。

    【讨论】:

    • 这确实有效,非常感谢!我假设大多数像这样使用反射的框架都会有某种 .setClassLoader() 方法
    • 他们应该。如果没有,请忽略它们,因为 API 设计不佳。
    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多