现在的位置: 首页 > 综合 > 正文

InvalidClassException异常的原因分析

2013年10月13日 ⁄ 综合 ⁄ 共 1483字 ⁄ 字号 评论关闭

如下的异常信息:

  1. weblogic.management.ManagementException: [Management:141266]Parsing Failure in config.xml: javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionUID = 4418622981026545151, local class serialVersionUID = -9120448754896609940
  2. at weblogic.management.provider.internal.RuntimeAccessImpl. <init>(RuntimeAccessImpl.java:118)
  3. at weblogic.management.provider.internal.RuntimeAccessService.start(RuntimeAccessService.java:38)
  4. at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesManager.java:365)
  5. at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServicesManager.java:116)
  6. at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:630)
  7. at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:402)
  8. at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361)
  9. at weblogic.Server.main(Server.java:67)
  10. Caused by: java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionUID = 4418622981026545151, local class serialVersionUID = -9120448754896609940
  11. at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
  12. at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583

JAVA世纪网

是类不兼容造成的。 那个UID就是类的时间戳。

比如本地是1.3 而远端是1.31则会出现这个错误!

类里面,特别是那些可以序列化的类,都有一个类的版本标记,就是 :serialVersionUID

如果2个类,名字完全相同,但这个标记不同,证明他们是2个不同的版本,则会出现不兼容的问题。

这个可 ClassCastException 是不同的,那个是因为2个类是完全不同的类,或者父类向子类强制转化引起的。

而这个可以确定是一个类,但是不同的版本。 如果你的类里面去掉serialVersionUID , 则不会出这个错误了。

但却是隐藏的定时炸弹。所以如果你的类需要序列化,最好加上这个标记,保证2面都是一个类的相同的版本。

抱歉!评论已关闭.