问题描述
RT[14-9-2814:14:02:578CST]00000024servletEcom.ibm.ws.webcontainer.servlet.ServletWrapperserviceSRVE0068E:应用程序xTransSvc中servletaction的某一服务方法创建了未捕获到的异常。创建的异常:java.lang.IncompatibleClassChangeErroratcom.hiaward.xtranssvc.service.Trans_0100_00000_040000.exchangeWithHost(Trans_0100_00000_040000.java:117)atcom.hiaward.xtranssvc.service.Processor8583.process(Processor8583.java:427)atcom.hiaward.xtranssvc.controller.Service_0100_00000_040000Action.execute(Service_0100_00000_040000Action.java:43)atorg.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)atorg.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)atorg.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)atorg.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:738)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:831)atcom.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)atcom.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)atcom.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)atcom.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)atcom.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3944)atcom.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)atcom.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)atcom.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)atcom.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)atcom.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)atcom.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)atcom.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)atcom.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)atcom.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)atcom.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)atcom.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)atcom.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)atcom.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)atcom.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)atcom.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)atcom.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1646)怀疑是JDK版本编译的问题,后来尝试了好几次,还是报错。有大神帮忙看一下是什么问题么?
解决方案
解决方案二:
不是JDK版本变化了,而是你的导入或转换序列化对象时所用的类的版本不兼容。比如,在昨天序列化时用到的类的版本是1,今天再从磁盘读取时这个类的版本是2。或者你通过网络把readObject和writeObject时两端使用的类的版本也不兼容。那么这里说的类的版本兼容是指有一个原则不能违反:当我们改动一个类时,所有原来用的东西都不能变化,这包括,成员变量的名字,类型和访问范围声明都不允许改变,还包括所有现有的方法签名不允许改变,如果这个类包括了serialVersionUID这个常量,它的值也不能改变。这就是为什么经常在JDK或其它第三方API源码中看到很多方法被标记为@deprecated的原因,这个方法在新的设计中确实不应该曾经,但Java序列化的规范要求我们不改动或删除已经存在的方法。否则过去能工作的代码都会出现问题。