GWT - RPC 序列化异常和 MapDB
GWT - RPC serialization exception and MapDB
我正在使用 gwt 并且正在使用 mapdb,当我将数据检索为地图 (BTreeMap) 时,gwt 抛出 rpc 序列化异常。我将地图包装在一个实现 Serializable
和 IsSerializable
的对象中,但这不起作用。
我不知道为什么这不起作用,因为我阅读了 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);
}
}
然后在客户端中 class 我使用地图创建了一个带有 treeItem 的树。
感谢您的帮助。
问题是,Map
不是 Serializable
。
即您的 WrapperObject
被标记为 Serializable
和 IsSerializable
,
但并非其所有成员都以这种方式标记(参见 Map
和包装的 List
)。
要解决此问题,您可以将 map
的类型更改为可序列化的 Map
的实现(例如 LinkedHashMap
和 ArrayList
):
private LinkedHashMap<String, ArrayList<String>> map;
我正在使用 gwt 并且正在使用 mapdb,当我将数据检索为地图 (BTreeMap) 时,gwt 抛出 rpc 序列化异常。我将地图包装在一个实现 Serializable
和 IsSerializable
的对象中,但这不起作用。
我不知道为什么这不起作用,因为我阅读了 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);
}
}
然后在客户端中 class 我使用地图创建了一个带有 treeItem 的树。
感谢您的帮助。
问题是,Map
不是 Serializable
。
即您的 WrapperObject
被标记为 Serializable
和 IsSerializable
,
但并非其所有成员都以这种方式标记(参见 Map
和包装的 List
)。
要解决此问题,您可以将 map
的类型更改为可序列化的 Map
的实现(例如 LinkedHashMap
和 ArrayList
):
private LinkedHashMap<String, ArrayList<String>> map;