【发布时间】:2013-08-06 13:37:29
【问题描述】:
我对 GWT 2.4.0 序列化 Date 的方式有疑问,最简单的解决方案似乎是编写 Date_CustomFieldSerializer - 重载原始实现。
但根据如何我启动应用程序我得到不同的结果。 很高兴部署的版本似乎可以正常工作。另一方面,从 Eclipse 启动调试会话会导致此消息:
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: The response could not be deserialized
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:221)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395)
...
Caused by: com.google.gwt.user.client.rpc.SerializationException: java.util.Date/1659716317
at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
我调试了服务器和客户端,服务器正在使用我的序列化程序,当客户端通过其“类型签名”查找序列化程序时失败:java.util.Date/1659716317
奇怪的是,客户端有一个包含java.util.Date/965047388 的序列化程序的映射。
GWT 如何创建这些类型签名以及当我使用 GWT 调试器时它们有何不同?
-- 编辑--
我现在知道数字是如何产生的。 GWT 计算层次结构中类名的 CRC32 哈希(有时也计算方法)。
java.util.Date
com.google.gwt.user.client.rpc.core.java.util.Date_CustomFieldSerializer
java.lang.Object
--> 1659716317 (server side)
java.util.Date
java.lang.Object
--> 965047388 (client side)
当 GWT 为客户端计算哈希时,我只是找不到位置,以了解它为什么不知道序列化程序,因为它位于 CompilingClassLoader 和运行时生成的类之间。
【问题讨论】:
-
这个问题和这个帖子有关系吗stackoverflow.com/questions/18021711/…
-
我不这么认为,因为我的问题不是随机发生的,而是序列化本身,而不是序列化的对象。但我会检查我放在静态目录中的内容。
标签: gwt serialization