【发布时间】:2017-09-09 18:57:00
【问题描述】:
警告:[kryo] 无法使用 kryo 的 ClassLoader 加载类 slade.core.Child。正在重试当前...
找不到类:slade.core.Child
序列化跟踪:
孩子(slade.core.Parent)
我遇到了一个问题,即 Kryo 在尝试反序列化根对象类型中包含的自定义对象类型时抛出上述错误。这只发生在从 OSGi 包中运行并从另一个 OSGi 包中引用对象时。 (我使用 Karaf 作为我的 OSGi 实现)
我可以看到这与类加载器有关,尽管据我所知它正在使用它需要的类型加载器。我上传了一个 tar,其中包含在 NetBeans 中创建的 3 个示例项目,以显示孤立的问题。没有使用自定义类加载器(如示例代码所示)。
项目设置:
核心
- OSGi 包
- 包含
Parent和Child类 - 导出所有内容
捆绑
- OSGi 包
- 依赖 Kryo
- 依赖于核心
- 创建一个包含
Child实例的Parent实例,然后使用Kryo 序列化为一个字节数组并尝试反序列化回该对象(这是错误发生的地方) - 使用类加载器:
BundleWiringImpl$BundleClassLoader
应用
- Java 应用程序
- 依赖 Kryo
- 依赖于核心
- 创建包含
Child实例的Parent实例,然后使用Kryo 序列化为字节数组并成功反序列化回对象 - 使用类加载器:
Launcher$AppClassLoader
任何有关如何解决此问题的建议将不胜感激!
源码可以从here下载。
【问题讨论】:
标签: java serialization osgi kryo