我的java应用程序有一个插件架构,可以通过添加实现其插件接口的jar文件来扩展其功能。我过去成功使用和部署了这种架构。但是,这一次,我试图从主应用程序序列化/反序列化插件对象。
加载插件工作得很好。测试应用程序甚至可以使用它。
序列化对象也可以正常工作(至少看起来如此)。将对象写入磁盘。
当我尝试反序列化对象时,抛出ClassNotFound。即使在与发现插件和序列化对象相同的应用程序中完成(即类应该已经由类加载器之一)。
我编写了一个加载插件的单个测试应用程序(加载jar文件及其中的所有类),创建插件对象的实例,序列化插件对象,然后尝试将对象反序列化为新的对象(失败的地方)。
失败发生在:
Class.forName(...)
调用readObject()。
我甚至实现了一个自定义ObjectInputStream,它使用与加载插件的类相同的ClassLoader,但这仍然不起作用。
我是否违反了一些我不了解的Java规则? 除了在理论上,这甚至可能吗? 还有其他想法吗?