获取java.io.InvalidClassException:本地类不兼容:甚至使用serialVersionUID

时间:2017-11-08 13:50:09

标签: java

开发人员在实现Serializable接口的类中声明了这一点。

XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://employer.webservicedto.dto.com", name = employerRequestDTO")
public class EmployerRequestDTO implements Serializable{

 private static final long serialVersionUID = -3956940714175091216L;
 // all private instance variables with getters & setters

}

并且堆栈跟踪说 -

  

decodeRequestData - decodeReqData()中的异常:   java.io.InvalidClassException:   EmployerRequestDTO;本地   class不兼容:stream classdesc serialVersionUID =   -3551130751187195282,本地类serialVersionUID = -3956940714175091216

/**
     * This method de-serializes user's request-data to return respective DTOs
     */
    public static Object decodeRequestData(String requestData, String userType){
        Object userRequestDTO = null;
        try{    
            byte[] b = Base64.decode(requestData);
            ByteArrayInputStream bi = new ByteArrayInputStream(b);
            ObjectInputStream si = new ObjectInputStream(bi);

1 个答案:

答案 0 :(得分:0)

看起来这个类是序列化的,serialVersionUID值设置为-3551130751187195282,然后该类在源代码中更新,serialVersionUID设置为-3956940714175091216。所以现在该类的源与序列化的版本不兼容。 您可以尝试将serialVersionUID设置回-3551130751187195282 - 但我会谨慎对待。试着找出为什么这个值被改变了 - 也许在类源中的其他变化使得它不能用于以前的序列化版本。