【发布时间】:2014-03-19 07:21:51
【问题描述】:
我有一个 GWT 共享包类如下:
public class MyCustomClass extends TreeSet<MyCustomType> implements Serializable, IsSerializable {
// ... a whole bunch of methods
}
我正在尝试通过 RPC 将类的实例作为封装在另一个类中的对象发送。
问题在于TreeSet,因为无论我做什么,GWT 都拒绝序列化它。我在运行时遇到错误:
严重:我的服务:处理此调用时引发了 IncompatibleRemoteServiceException。 com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:java.lang.ClassNotFoundException:http: 在 com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:323)
所以,我拥有所有序列化的先决条件(默认构造函数、没有最终字段、getter 和 setter、我所有的实例变量都是可序列化的、实现接口等),但这仍在继续。
问题是,当我从 TreeSet 切换到使用 ArrayList 时,一切正常。据我了解,这是因为我已经在多个服务中使用了ArrayLists,所以 GWT 知道在序列化策略中将其列入白名单。
这种理解来自this 线程。我已经从接受的答案中尝试了建议的解决方案(创建一个“虚拟”服务并在那里放置一个 TreeSet,我什至在我的客户端包中创建了一个虚拟类并将 TreeSet 作为一个字段),但没有运气。
我检查了我的 .gwt.xml 以防万一,TreeSet 没有作为序列化异常添加。
所以,我几乎被困在这一点上,我的解决方法是使用 ArrayList 并将其重新打包到一个瞬态集合中,但我不太喜欢这种方法。
任何帮助将不胜感激。
(使用 GWT 2.6)
更新:MyCustomType 实现了Comparable<MyCustomType> 接口,并且没有为TreeSet 提供自定义比较器。
【问题讨论】:
-
MyCustomType是否实现了java.lang.Comparable?
标签: java gwt serialization arraylist treeset