繁体   English   中英

父/子序列化本地类不兼容异常

[英]Parent/Child Serialization local class incompatible Exception

我从下面的两个类中收到序列化兼容性错误。 仅父类CommericalCustomer实现序列化。 当我具有下面的父/子关系时,使用可序列化接口的正确方法是什么?

public class CachedCommercialCustomers extends CommercialCustomer {


}

public class CommercialCustomer implements Serializable {

    private static final long serialVersionUID = 1L;

}

例外:

[#|2013-01-02T05:01:02.553-0800|SEVERE|glassfish3.1.2|com.hazelcast.nio.AbstractSerializer|_ThreadID=10;_ThreadName=Thread-2;|spot.api.model.vo.backoffice.CachedCommercialCustomers; local class incompatible: stream classdesc serialVersionUID = -2672531984245897526, local class serialVersionUID = -743225273062282831
java.io.InvalidClassException: com.sample.CachedCommercialCustomers; local class incompatible: stream classdesc serialVersionUID = -2672531984245897526, local class serialVersionUID = -743225273062282831
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
        at java.io.ObjectInputStream.readUnshared(ObjectInputStream.java:458)
        at com.hazelcast.nio.DefaultSerializer$ObjectSerializer.readNormal(DefaultSerializer.java:383)
        at com.hazelcast.nio.DefaultSerializer$ObjectSerializer.read(DefaultSerializer.java:353)
        at com.hazelcast.nio.DefaultSerializer.read(DefaultSerializer.java:134)
        at com.hazelcast.nio.CustomSerializerAdapter.read(CustomSerializerAdapter.java:33)
        at com.hazelcast.nio.AbstractSerializer.toObject(AbstractSerializer.java:116)
        at com.hazelcast.nio.AbstractSerializer.toObject(AbstractSerializer.java:146)
        at com.hazelcast.nio.Serializer.readObject(Serializer.java:72)
        at com.hazelcast.impl.ThreadContext.toObject(ThreadContext.java:103)
        at com.hazelcast.nio.IOUtil.toObject(IOUtil.java:149)
        at com.hazelcast.impl.BaseManager$RequestBasedCall.getResultAsObject(BaseManager.java:384)
        at com.hazelcast.impl.BaseManager$ResponseQueueCall.getResultAsObject(BaseManager.java:455)
        at com.hazelcast.impl.BaseManager$RequestBasedCall.getResultAsObject(BaseManager.java:368)
        at com.hazelcast.impl.BaseManager$ResponseQueueCall.getResultAsObject(BaseManager.java:455)

这里的问题是您没有为子类指定serialVersionId因此java会代您生成一个。 如果更改Java源文件,则简单的重新编译可能会更改此值。 参见规格

当代码更改时我会更改的事实是一件好事,但在某些情况下,它将使您感到有些悲伤:)

请参阅此处以获取更多信息以及如何在必要时“解决”问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM