2012-09-25 48 views
0

我有一个简单的POJO,它有一些属性,其中一个是枚举。这工作得很好,但是当我将枚举属性更改为枚举列表时,GWT给了我一个序列化异常“无法反序列化响应”。GWT:枚举抛出列表“无法反序列化”

这工作:

public class Report implements Serializable, Comparable<Report> { 

    private static final long serialVersionUID = 1L; 

    private long id; 
    //some more attributes, all serialize fine 
    private ReportCategory category; // the enumeration 

    public ReportSVO(){ 
    } 
     //.. generated getters and setters 
} 

当我改变了private ReportCategory category;private List<ReportCategory> categories;我得到了(反)序列化异常。

从预感中,我改变了枚举为一个内部类:(public enum ReportCategory{...}public class ReportCategory{ private Name categoryName; public enum Name{...}})和魔术一样,它的工作原理。 此问题导致我有两个问题:

  1. 这是一个GWT错误?或者我错过了什么?
  2. 有没有更好的方法来解决这个问题?

枚举本身不应该是一个问题,因为它之前工作(和枚举可以默认序列化)。另外,当我忘记其他GWT类的无参数构造函数或具有不可序列化属性时,序列化异常消息如下所示:“com.google.gwt.user.client.rpc.SerializationException:Type'...'不包括在该组的类型,可以通过这个SerializationPolicy被序列化。”

我使用GWT 2.4

回答

0

事实证明,我的问题的原因是POJO类之间的不匹配上午(报告)以及该类的编译成Javascript版本。这是因为我改变了类并重新发布到服务器,但忘记了重新编译客户端代码...

所以在服务器端属性是一个列表,在客户端它仍然枚举和反序列化当然失败了。

总而言之,我希望这条线能够帮助未来的某个人。