`
cjc19762338
  • 浏览: 61669 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java.io.InvalidClassException 实体类序列化问题

阅读更多
2010-07-27 19:12:55,004 ERROR [com.danga.MemCached.MemCachedClient] - <实体类(pojo); local class incompatible: stream classdesc serialVersionUID = 812952289507407815, local class serialVersionUID = -7688346538714640295>
java.io.InvalidClassException: 实体类(pojo); local class incompatible: stream classdesc serialVersionUID = 812952289507407815, local class serialVersionUID = -7688346538714640295
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:546)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at java.util.HashMap.readObject(HashMap.java:2365)
        at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1364)
        at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1209)
        at com.laoer.session.SessionService.getSession(SessionService.java:88)
        at com.laoer.session.HttpSessionSidWrapper.<init>(HttpSessionSidWrapper.java:22)
        at com.laoer.session.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:22)
        at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:236)
        at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:245)
       
原因是在resin部署了两个项目,两个项目中,都有user表的实体类,然后两个项目的序列号不一致,估计是同在一个jvm中,导致反序列化出问题,回来把序列号都改为一致的就没问题啦!
第一次碰到这样的情况,如果一个一个项目的部署,我想这问题不会出现!值得保留!
0
1
分享到:
评论
1 楼 vigiles 2012-12-03  
请问博主,我这个例子如何解决:
import java.io.*;

class FileDemo implements Serializable
{
	private String file="this is a file";

	public static void main(String[] args) throws Exception
	{
		//writeObj();
		readObj();
	}

	public static void writeObj() throws Exception
	{
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));
		oos.writeObject(new FileDemo());
		oos.close();
	}

	public static void readObj() throws Exception
	{
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));
		FileDemo fd=(FileDemo)ois.readObject();

		System.out.println(fd);
		ois.close();
	}
}

错误提示为:
Exception in thread "main" java.io.InvalidClassException: FileDemo; local class incompatible: stream classdesc serialVersionUID = 7852643495300877935, local class serialVersionUID = -7750810969726093294
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:604)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at FileDemo.readObj(FileDemo.java:23)
at FileDemo.main(FileDemo.java:10)

相关推荐

    java.io.InvalidClassException local class incompatible 处理方法

    为了避免序列化过程中出现`java.io.InvalidClassException`异常,特别是处理序列化对象版本兼容性问题时,强烈推荐在所有可序列化的类中显式声明`serialVersionUID`。这不仅可以提高程序的稳定性和健壮性,还能简化...

    p29814665_122130_Generic.zip

    29448643 JAVA.IO.INVALIDCLASSEXCEPTION: FILTER STATUS: REJECTED 29671623 CVE-2019-2725 26403575 CVE-2016-7103 29667975 CVE-2019-2824 29726561 CVE-2019-2729 29701537 CVE-2019-2827 1.2 Oracle WebLogic ...

    java自动序列化

    1. `java.io.ObjectOutputStream`和`java.io.ObjectInputStream`:基础的序列化和反序列化工具类。 2. `java.io.Serializable`: 标记接口,表明对象支持序列化。 3. `java.io.NotSerializableException`: 当尝试序列...

    Java 多次序列化对象到同壹個文件及反序列化的问题

    当一个类实现`java.io.Serializable`接口时,它的实例就可以被序列化。系统会默认生成一个唯一的`serialVersionUID`,用于验证序列化和反序列化的类版本是否一致。如果在序列化后修改了类的结构(如添加、删除或修改...

    java 对象的序列化与反序列化

    如果类的版本更新导致结构变化,而此值未做更新,反序列化时会抛出`InvalidClassException`。因此,为了保证兼容性,有时需要显式声明`serialVersionUID`。 2. **序列化的作用**: - 持久化数据:将对象状态保存到...

    IDEA中实体类实现了序列化接口

    在Java中,如果一个类需要支持序列化,那么这个类需要实现`java.io.Serializable`接口。实现该接口后,Java虚拟机(JVM)会根据类的信息生成一个序列化ID,即`serialVersionUID`,用于表示类的版本标识。如果序列化ID...

    java序列化实现演示

    在Java中,如果一个类需要支持序列化,它应该实现`java.io.Serializable`接口。 在Java序列化过程中,`serialVersionUID`扮演着至关重要的角色。`serialVersionUID`是一个长期不变的标识符,用于验证序列化版本的...

    Java对象的序列化与反序列化Java开发Java经验技巧

    - **序列化API**:主要使用`java.io.ObjectOutputStream`类的`writeObject()`方法将对象写入输出流,`java.io.ObjectInputStream`类的`readObject()`方法从输入流读取对象。 2. **反序列化(Deserialization)**: ...

    如何正确的使用Java序列化技术

    为了将可序列化的对象序列化到文件或其他存储介质中,需要使用 `java.io.ObjectOutputStream` 和 `java.io.ObjectInputStream` 类。以下是一个简单的序列化示例: ```java import java.io.*; public class ...

    Java对象序列化的秘密

    在Java中,实现对象序列化主要依靠实现`java.io.Serializable`接口。本文将深入探讨Java对象序列化的原理、用途和注意事项。 **一、序列化原理** 1. **实现Serializable接口**: 对象要能够被序列化,它所在的类...

    java serializable 序列化与反序列化

    Java的序列化与反序列化是Java开发中的一项重要技术,它允许我们将对象的状态转换为字节流,以便存储或在网络上传输。`Serializable`接口是Java提供的一个标记接口,用于实现对象的序列化。当一个类实现了这个接口,...

    关于 Java 对象序列化您不知道的 5 件事

    通过实现`java.io.Serializable`接口,一个类的实例就能被序列化。 2. **默认序列化过程** 默认情况下,序列化会保存对象的所有实例变量,但不包括静态变量。这是因为静态变量属于类,而非特定的对象实例。序列化...

    Java IO流对象的序列化和反序列化实例详解

    在Java中,要实现对象的序列化,对象所属的类必须实现java.io.Serializable接口。这个接口虽然没有任何方法,但它是对象可以被序列化的标志。实现Serializable接口的对象可以被写入到输出流,并且可以从输入流中被...

    序列化(三) 实例分析深入了解序列化

    在Java中,它通过实现`java.io.Serializable`接口来标记一个类为可序列化的。序列化的主要目的是保存对象的状态,以便在后续阶段恢复或在不同环境间传递。 2. **如何实现序列化**: 一个类只需声明实现`...

    关于Java对象序列化您不知道的5件事Java开发Java

    `java.io.ObjectStreamClass`类提供了关于正在序列化或反序列化的类的信息,包括类的`serialVersionUID`、是否为`Serializable`以及类的字段描述。 9. **序列化流的性能优化**: 序列化和反序列化可能会消耗大量...

    对象的序列化和反序列化

    在Java中,如果一个类需要支持序列化,那么这个类就需要实现`java.io.Serializable`接口。这是一个标记接口,没有包含任何方法,它仅仅表示该类的对象可以被序列化。当一个对象实例化后,如果其类实现了`...

    Java序列化与反序列化

    在Java中,要实现序列化,一个类必须实现`java.io.Serializable`接口。这是一个标记接口,没有包含任何方法,它的作用仅仅是告诉JVM该类的对象可以被序列化。例如,我们有一个名为`Child`的类,它可能如下所示: ``...

    Java对象序列化详细解析.doc

    在Java中,对象序列化是通过实现`java.io.Serializable`接口来实现的。 **Serializable接口**: `Serializable`接口是一个标记接口,它没有定义任何方法。当一个类实现了这个接口,就意味着该类的对象可以被序列化...

    类的序列化

    在Java中,序列化是通过实现`java.io.Serializable`接口来实现的。 序列化主要有以下几个关键知识点: 1. **实现Serializable接口**:要使一个类能够被序列化,该类必须实现`Serializable`接口。这个接口没有定义...

    Java中序列化学习笔记/序列和反序列化的实现

    如果你有两个平台之间通过序列化进行数据交换,如果在序列化后修改了类的定义但没有更新`serialVersionUID`,那么在反序列化时就会出现问题,因为`serialVersionUID`不再匹配,Java会抛出`InvalidClassException`。...

Global site tag (gtag.js) - Google Analytics