0

我有一个简单的 POJO,它有一些属性,其中一个是枚举。这工作得很好,但是当我将枚举属性更改为枚举列表时,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{...}to 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

4

1 回答 1

0

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

因此,在服务器端,该属性是一个列表,而在客户端,它仍然是一个枚举,反序列化当然会失败。

总而言之,这是一个面子,但我希望这个线程在未来对某人有所帮助。

于 2012-09-25T09:30:53.737 回答