GWT:枚举列表"无法反序列化响应"

时间:2012-09-25 08:05:23

标签: gwt enums deserialization gwt-rpc

我有一个简单的POJO,它有一些属性,其中一个是枚举。这工作正常,但是当我将enum属性更改为枚举列表时,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. 有没有更好的方法来解决这个问题?
  3. 枚举本身不应该是一个问题,因为它以前工作(默认情况下枚举是可序列化的)。此外,当我忘记其他GWT类上的no-args构造函数或具有非可序列化属性时,序列化异常消息如下所示:“com.google.gwt.user.client.rpc.SerializationException:Type'...'未包含在可通过此SerializationPolicy序列化的类型集中。“

    我正在使用GWT 2.4

1 个答案:

答案 0 :(得分:0)

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

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

总而言之,这是一个很好的面孔,但我希望这个帖子能帮助将来的某个人。