GWT - RPC序列化异常和MapDB

时间:2016-05-04 07:42:30

标签: java serialization gwt mapdb

我正在使用gwt和我使用mapdb,当我将数据检索为地图(BTreeMap)时,gwt会抛出rpc序列化异常。我将地图包装在一个实现SerializableIsSerializable但不起作用的对象中。

我不知道为什么这不起作用,因为我阅读了mapdb的文档并且我正确地使用了它。

代码:

public class WrapperObject implements Serializable, IsSerializable {

          private Map<String, List<String>> map;

          public WrapperObject() {}
          public WrapperObject(Map<String, List<String>> map) {
              this.map = map;
          }
          //GETTERS AND SETTERS
          ...
}


public class Prova {
    ....

    private DB openDB() {
        return DBMaker.shoutdownOnJvmClose().make();
    }

    ...

    public WrapperObject retrieveData() {
        DB db = this.openDB();

        Map<String, List<String>> map = 
        db.getTreeMap("values");

        return new WrapperObject(map);
    }
}

然后在客户端类中,我使用map创建一个带有treeItem的树。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是,Map不是Serializable

即。您的WrapperObject被标记为SerializableIsSerializable, 但并非所有成员都以这种方式标记(请参阅Map和包裹的List)。

要解决此问题,您可以将map的类型更改为Map的可序列化的实现(例如LinkedHashMap ArrayList):

private LinkedHashMap<String, ArrayList<String>> map;