GWT RPC 序列化和循环引用——先有鸡还是先有蛋的问题
Posted
技术标签:
【中文标题】GWT RPC 序列化和循环引用——先有鸡还是先有蛋的问题【英文标题】:GWT RPC serialization and circular references - chicken and egg problem 【发布时间】:2011-02-17 19:39:23 【问题描述】:我正在使用 GWT 2.1.1 和使用 AsyncService(不是 RequestFactory)的客户端-服务器通信。我有一个返回“基金”对象的对象。该基金引用了一个“分发者”对象,该对象本身具有“基金”对象的集合。
在一种情况下,我从服务器返回基金“foo”,其分销商参考有“foo”、“bar”和“joe”基金。这是一个常见的业务场景。在客户端反序列化时,我收到一个错误,因为分发器中资金收集中的“foo”引用最终没有填充任何值。特别是,fund-id(字符串)没有填充,它用于哈希码实现。在客户端反序列化期间,“bar”和“joe”资金被正确反序列化,但 foo 失败,即仅使用几个属性进行反序列化。
这里发生的是,当“foo”被反序列化时,它有一些反序列化的属性,然后 gwt 尝试反序列化分发器。 Foo 的 fund-id 属性尚未反序列化。因此,当分发者的资金集合被反序列化并且遇到“foo”时,反序列化器会返回对当前正在反序列化的没有fund-id的“foo”的引用。所以当GWT试图将它添加到distributor中的Set(HashSet)时,hashcode实现失败。
所以我的问题是,在这种情况下,有没有办法强制 GWT 首先序列化某些属性(在这种情况下,hashCode 依赖的fund-id)?
【问题讨论】:
【参考方案1】:发现这实际上是一个已知问题。对于遇到此问题并通过搜索找到此问题的其他任何人:
http://code.google.com/p/google-web-toolkit/issues/detail?id=3577
阅读完后,我将发布有关如何实现自定义序列化程序的信息,以便人们有更全面的了解。我也邀请其他人这样做。
【讨论】:
以上是关于GWT RPC 序列化和循环引用——先有鸡还是先有蛋的问题的主要内容,如果未能解决你的问题,请参考以下文章
谁在 OS 中调度调度程序——这不是先有鸡还是先有蛋的场景吗?
JS 究竟是先有鸡还是有蛋,Object与Function究竟谁出现的更早,Function算不算Function的实例等问题杂谈