gpt4 book ai didi

java - 警告 : [Kryo] Unable to load class x with Kryo's ClassLoader

转载 作者:行者123 更新时间:2023-11-29 02:57:41 30 4
gpt4 key购买 nike

WARN: [kryo] Unable to load class slade.core.Child with kryo's ClassLoader. Retrying with current...

Unable to find class: slade.core.Child

Serialization trace:

child (slade.core.Parent)

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

我可以看出这与类加载器有关,尽管从我可以看出它正在使用它需要的类型加载器。我上传了一个 tar,其中包含在 NetBeans 中创建的示例 3 个项目,以显示孤立的问题。没有使用自定义类加载器(如示例代码中所示)。

项目设置:

核心

  • OSGi 包
  • 包含ParentChild
  • 导出所有内容

捆绑

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

应用

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

如有任何关于如何解决此问题的建议,我们将不胜感激!

源代码可以从here下载.

最佳答案

我不是 Kryo 专家,但听起来好像 Kryo 默认不兼容 OSGi,考虑到它的功能(序列化和反序列化对象),我认为很难做到这一点。

在 OSGi 中,每个 bundle 都有自己的 ClassLoader,并且只能看到 bundle 中的类以及它从其他 bundle(或其包)导入的那些类。如果,正如我上面所说,Kryo 不兼容 OSGi,那么它将不会导入任何包,如果你考虑一下它如何导入人们想要使用的所有可能的包?我想 Kryo 需要你希望反序列化的类,它有一个“蓝图”来从字节流构造一个实例,但如果它没有可见性,它怎么能这样做呢?因此该类未发现异常(我相信)。

如何解决这个问题?我想这并不容易。我不得不做类似的事情,但幸运的是,我使用的库有一个方法允许我注册一个 Class 对象,这样它就可以识别该类。不知道Kryo有没有同样的功能。

关于java - 警告 : [Kryo] Unable to load class x with Kryo's ClassLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134108/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com