SEVERE: IOException while loading persisted sessions: java.io.InvalidClassException: com.ehi.sbg.core.rating.SGHealthPlanGroupRate; local class incompatible: stream classdesc serialVersionUID = -470877338133163279, local class serialVersionUID = 4717150679672597349
java.io.InvalidClassException: com.ehi.sbg.core.rating.SGHealthPlanGroupRate; local class incompatible: stream classdesc serialVersionUID = -470877338133163279, local class serialVersionUID = 4717150679672597349
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
...
分析:
当一个类实现了序列化接口,有时会遇到java.io.InvalidClassException异常出现,上面报的异常是序列化兼容性所致;java通过一个名为UID(stream unique identifier)来控制,这个UID是隐式的,它通过类名,方法名等诸多因素经过计算而得,理论上是一一映射的关系,也就是唯一的。也可以理解为,UID就是类的时间戳。如果UID不一样的话,就无法实现反序列化了,并且将会得到InvalidClassException。
为了避免版本问题带来的UID隐式的异常,可以通过显式的声名UID来
实现,对于上例,在SGHealthPlanGroupRate类中,添加:
private static final long serialVersionUID = 1L;
这样就解决了,注意UID不能有重复。建议,在需要序列化的类中添加serialVersionUID ,防止这类异常的抛出。
分享到:
相关推荐
然而,这种默认的计算方式对类的细节非常敏感,并且可能因不同的Java编译器实现而异,从而导致序列化和反序列化过程中出现`java.io.InvalidClassException`异常。因此,强烈建议所有可序列化的类都显式声明`...
常见的问题
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 ...
有时,启动WebLogic服务器可能会遇到问题,比如"The WebLogic Server did not start up properly."的提示或"java.io.InvalidClassException"异常。这些问题通常由于JDK选择错误引起。确保在MyEclipse配置中使用的JDK...
2. `java.io.InvalidClassException`异常:这个异常可能是因为类路径或JDK版本不兼容。检查JDK配置,确保使用的JDK版本与WebLogic兼容。 解决这些问题的关键在于正确配置JDK,确保MyEclipse和WebLogic使用的JDK版本...
遇到"The WebLogic Server did not start up properly."提示或者java.io.InvalidClassException异常,通常是因为JDK选择不正确导致的。务必确保myEclipse和Weblogic配置中使用的JDK版本一致。如果使用了特定版本的...
当序列化和反序列化过程中,序列化版本ID必须匹配,否则会抛出`InvalidClassException`异常。 以上所述的JDK命令是Java开发人员在构建分布式应用时不可或缺的工具,它们提供了强大的功能来简化远程对象的管理和交互...
3. **备份和恢复**: 对象序列化可以作为备份策略,当系统出现问题时,可以从序列化的数据中恢复。 4. **缓存**: 序列化可以将对象转化为字节流存储在内存中,提高缓存效率。 5. **跨进程通信(RMI)**: Remote ...
如果两个不同版本的类具有相同的`serialVersionUID`,那么在反序列化过程中可能会出现`InvalidClassException`异常,这是因为Java序列化机制认为这两个版本是不兼容的。 #### 五、`serialVersionUID`的定义 `...
4. **InvalidClassException**:无效的类异常,通常在反序列化时出现,因为类的版本与序列化时的版本不符。为解决此问题,可以在类上定义一个常量`serialVersionUID`以固定版本号,使序列化和反序列化兼容。 ```...
例如,在服务器端创建的对象可以通过序列化传递到客户端,或者在程序关闭后,下次启动时可以从序列化的文件中恢复之前的状态。此外,序列化也是实现分布式计算、持久化存储和RMI(远程方法调用)的基础。 实现序列...
`start()`方法用于启动线程,而`run()`方法包含线程执行的主要逻辑。理解线程同步和通信(如`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`方法)是防止数据竞争和死锁的关键。 2. **IO流**:Java的...
比如,如果你在序列化后修改了类的结构(添加或移除字段),那么在反序列化时可能会遇到`InvalidClassException`。此外,序列化可能会暴露敏感数据,因此在处理敏感信息时要格外谨慎。 总结一下,`HashTable`的序列...
当类的结构发生变化时,建议显式声明`serialVersionUID`以避免反序列化时出现`InvalidClassException`。 5. **transient关键字**:某些对象属性可能不需要或不适合序列化,这时可以使用`transient`关键字标记。例如...
在给定的部分内容中,可以看到一个具体的异常信息示例,这涉及到MyEclipse和WebLogic 9的集成过程中出现的问题。异常信息显示为: ``` There are 1 nested errors: weblogic.management.ManagementException: ...
当Java在反序列化时检测到目标类的`serialVersionUID`与原始序列化数据中的`serialVersionUID`不匹配时,会抛出`InvalidClassException`,提示类的序列化版本不一致。默认情况下,JVM会根据类的字段和方法自动生成一...
如果序列化流中的`serialVersionUID`与当前类的不匹配,则会出现`InvalidClassException`异常。 - **自定义序列化**: 开发者可以通过实现特定的方法来自定义序列化的过程,从而更好地控制序列化行为。 #### 五、...
如果你有两个平台之间通过序列化进行数据交换,如果在序列化后修改了类的定义但没有更新`serialVersionUID`,那么在反序列化时就会出现问题,因为`serialVersionUID`不再匹配,Java会抛出`InvalidClassException`。...
如果类的结构发生变化(如添加、删除或修改字段),那么`serialVersionUID`也应该更新,以避免反序列化时出现`InvalidClassException`。在这个例子中,`serialVersionUID`被定义为1L: ```java private static ...
此外,为了保持序列化版本的一致性,通常会在实现`Serializable`的类中声明一个名为`serialVersionUID`的静态常量,如果类的结构发生改变,这个ID应当更新,以避免反序列化时出现`InvalidClassException`。...