GWT序列化一个扩展TreeSet的类

时间:2014-03-19 07:21:51

标签: java gwt serialization arraylist treeset

我有一个GWT共享包类,如下所示:

public class MyCustomClass extends TreeSet<MyCustomType> implements Serializable, IsSerializable {
     // ... a whole bunch of methods
}

我试图通过RPC发送一个类的实例作为封装在另一个类中的对象。

问题是TreeSet,因为GWT拒绝将其序列化,无论我做什么。我在运行时遇到错误:

  

SEVERE:my-service:处理此调用时抛出了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时,一切正常。根据我的理解,这是因为我已经在许多服务中使用ArrayList,因此GWT知道在序列化策略中将其列入白名单。

由于this线程而产生了这种理解。我已经从接受的答案中尝试了提议的解决方案(创建一个&#34;虚拟&#34;服务并在其中放置TreeSet,我甚至在我的客户端包中创建了一个虚拟类并放置了{ {1}}作为一个领域),但没有运气。

我检查了我的.gwt.xml以防万一,TreeSet没有被添加为序列化异常。

所以,我几乎停留在这一点上,我的解决方法是使用ArrayList并将其重新打包成瞬态集,但我真的不喜欢这种方法。

任何帮助都将受到高度赞赏。

(使用GWT 2.6)

更新: TreeSet实现了MyCustomType界面,并且没有为Comparable<MyCustomType>提供自定义比较器。

1 个答案:

答案 0 :(得分:0)

可能MyCustomType未实施java.lang.Comparable

适用于ArrayList<MyCustomType>,但不适用于TreeSet<MyCustomType>


- 编辑 -

HashSet<MyCustomType>LinkedHashSet<MyCustomType>工作正常。

在客户端获取数据后,只需使用

new TreeSet<MyCustomType>(<retured HashSet<MyCustomType>)

无需迭代它,因为它是按<Comparable<MyCustomType>排序的。