我试图通过专用通信捆绑包将对象从捆绑包发送到其他框架。对于通信,我使用TCP/IP上的Java标准序列化(使用ObjectStreams)。在OSGi中自定义类型数组的反序列化
通信流程如下:发送程序包会将可序列化的对象传递给发送 - 发送方,后者将序列化对象并通过TCP/IP将它们发送到发送接收器。接收器将对接收到的对象进行反序列化,并将它们传递给接收器包。因为OSGi类加载体系结构不同于本机体系结构,所以我必须对类加载器做一点小事:因为我认为接收器包应该知道他接收到的类(=是否已导入或以其他方式访问它们通过类加载器),我使用接收器的类加载器而不是发送器来加载类。 (通过Bundle.loadClass(..)方法)。 这适用于自定义类,但是,这不适用于自定义类型的数组。 (其不知道的发射 - 接收机的类加载器,但向接收器束。)
编辑: ObjectInputStream.readObject(...)抛出ClassNotFoundException的,如果它试图反序列化阵列。 (我认为这个异常起源于接收包的Bundle.loadClass(...)方法。)
它可以与java.util.List或其他Serializable类一起工作。它也适用于包含其他自定义类型的字段的自定义类型,只要它们不是数组。
所以问题是:数组的de/serialized方式有什么不同吗?或者他们装载不同?
这是真的,我们在这里运行这个bug ....我们尝试过的一个肮脏的解决方法是使用动态导入。但是,目前我们只是避免使用数组。 – Arvodan 2010-10-04 09:36:15