首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:[Kryo]无法用Kryo的ClassLoader加载x类

警告:[Kryo]无法用Kryo的ClassLoader加载x类
EN

Stack Overflow用户
提问于 2017-09-09 18:57:00
回答 1查看 1.3K关注 0票数 2

警告: kryo无法用kryo的slade.core.Child加载类ClassLoader。用电流重试..。 找不到类: slade.core.Child 序列化跟踪: 儿童(slade.core.Parent)

在尝试反序列化根对象类型中包含的自定义对象类型时,Kryo抛出了上述错误。只有在从OSGi包中运行并在另一个OSGi包中引用对象时才会发生这种情况。(我使用Karaf作为我的OSGi实现)

我可以看到,这与类加载程序有关,不过从我所看到的情况来看,它使用的是它所需要的类型加载器。我已经上传了一个tar,其中包含在NetBeans中创建的示例3项目,以显示孤立的问题。不使用自定义类加载器(如示例代码中所示)。

项目设置:

  • OSGi丛
  • 包含ParentChild类。
  • 出口一切

  • OSGi丛
  • 对Kryo有依赖性
  • 依赖于核心
  • 创建包含Parent实例的Child实例,然后使用Kryo序列化为字节数组,并尝试反序列化回对象(这是发生错误的地方)
  • 使用类加载器:BundleWiringImpl$BundleClassLoader

应用程序

  • Java应用
  • 对Kryo有依赖性
  • 依赖于核心
  • 创建包含Parent实例的Child实例,然后使用Kryo序列化为字节数组,并成功地反序列化回对象。
  • 使用类加载器:Launcher$AppClassLoader

任何关于如何解决这一问题的建议都将不胜感激!

源代码可以从这里下载。

EN

回答 1

Stack Overflow用户

发布于 2017-09-12 12:33:52

我不是Kryo方面的专家,但是听起来Kryo在默认情况下并不兼容OSGi,考虑到它的功能(序列化和反序列化对象),我可以想象很难做到这一点。

在OSGi中,每个包都有自己的ClassLoader,并且只对包中的类和从其他包(或它们的包)导入的类具有可见性。如果,正如我前面所说的,Kryo与OSGi不兼容,那么它将不导入任何包,如果您仔细考虑,它如何导入人们想要使用的所有可能的包?我设想Kryo需要您希望反序列化的类,以便它有一个从字节流构造实例的“蓝图”,但是如果它没有可见性,它怎么能这样做呢?因此,这个类没有发现异常(我相信)。

你怎么能解决这个问题?我觉得不容易。我不得不做一些类似的事情,但幸运的是,与我一起工作的库有一个方法,允许我注册一个class对象,这样它就知道了这个类。我不知道Kryo是否有同样的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46134108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档