【发布时间】:2013-06-19 05:51:34
【问题描述】:
我有一个从 Scala-2.9 序列化出来的相当复杂的对象图,我需要将它读入 Scala-2.10。然而,在对象图 Scala-2.10 的某个深处抛出:
! java.lang.ClassNotFoundException: scala.collection.JavaConversions$SeqWrapper
! at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_21]
! at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_21]
! at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_21]
! at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_21]
! at java.lang.ClassLoader.loadClass(ClassLoader.java:423) ~[na:1.7.0_21]
! at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_21]
! at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ~[na:1.7.0_21]
! at java.lang.Class.forName0(Native Method) ~[na:1.7.0_21]
! at java.lang.Class.forName(Class.java:266) ~[na:1.7.0_21]
! at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:623) ~[na:1.7.0_21]
...
将这个序列化对象加载到 Scala-2.10 中的最简单方法是什么?
该对象使用 Scala-2.9 正确反序列化,但看起来标准库中的东西已经移动了。 scala.collection.JavaConversions的大部分成员现在都在scala.collection.convert.Wrappers
展望未来,我还对持久化大型复杂对象图的更强大的方法感兴趣,而无需为所涉及的每个类显式指定序列化。
【问题讨论】:
-
感谢@som-snytt。我在 ScalaDays 上看到了 Heather 的演讲。 Scala-pickling 看起来很棒,但它还没有准备好用于生产。
-
什么版本的Java?估计双方都一样。 SeqWrapper 只是 java 集合的包装器。如果不排除明显的类路径问题,我不会推测 CNFE。
-
草草评论关于 SeqWrapper 的评论——有人问到 2.9,我还在那个分支上——我必须看 hulu 的 101 天的夏季大师。
标签: scala serialization persistence classloader deserialization