我在使用GWT 2.4.0序列化Date的方法時遇到了問題,最簡單的解決方案似乎是編寫Date_CustomFieldSerializer - 重載原始實現。使用CustomFieldSerializer的GWT java.util.Date序列化在調試器中失敗
但取決於如何我開始應用程序我得到不同的結果。 很高興部署的版本似乎工作沒有任何麻煩。在另一方面開始從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運行時生成的類之間。
是與此相關的帖子http://stackoverflow.com/questions/18021711/intermitant-serialization-exception-with-gwt-dev-mode-and-external-server?answertab=這個問題主動#tab-top – otonglet
我不這麼認爲,因爲我的問題不是隨機發生的,而是關於序列化本身,而不是什麼對象被序列化。但我會檢查我放在我的靜態目錄中。 – Stroboskop