GWT RPC序列化和循环引用 - 鸡和蛋问题

时间:2011-02-17 19:39:23

标签: gwt gwt-rpc

我正在使用GWT 2.1.1和使用AsyncService(而非RequestFactory)的客户端 - 服务器通信。我有一个返回“基金”对象的对象。该基金提到了一个“经销商”对象,该对象本身有一系列“基金”对象。

在一个场景中,我从服务器返回,资助“foo”,其经销商参考有“foo”,“bar”和“joe”资金。这是一种常见的业务场景。在客户端进行反序列化时,我收到错误,因为分发服务器中的资金集合中的“foo”引用最终没有填充值。特别是,不填充fund-id(字符串),这在哈希码实现中使用。在客户端反序列化期间,“bar”和“joe”资金被正确反序列化,但foo失败,即仅使用少数属性进行反序列化。

这里发生的是当“foo”被反序列化时,它有一些反序列化的属性,然后gwt尝试反序列化分发器。 Foo的fund-id财产尚未反序列化。因此,当分销商的资金集合被反序列化并且遇到“foo”时,反序列化器会返回对当前正在反序列化的“foo”的引用,该foo没有基金ID。因此,当GWT尝试将其添加到分发服务器中的Set(HashSet)时,哈希码实现将失败。

所以我的问题是,在这种情况下,有没有办法强制GWT首先序列化某些属性(在这种情况下是hashCode所依赖的fund-id)?

1 个答案:

答案 0 :(得分:2)

发现这实际上是一个已知问题。对于遇到此问题的任何其他人,并通过搜索找到此问题:

http://code.google.com/p/google-web-toolkit/issues/detail?id=3577

我会在阅读之后发布有关如何实现自定义序列化程序的信息,以便人们有更全面的了解。我也邀请其他人这样做。