升级到GWT 2.3后,我的一些RPC服务不再有效 失败的“响应无法反序列化”。好像 发生在返回使用Date的对象的服务上 用@Temporal(TemporalType.TIMESTAMP)注释的对象。一世 使用Gilead 1.3.2和Hibernate 3.6,我对GWT 2.2没有任何问题。 知道会发生什么,或者如何开始调试?
这是堆栈跟踪:
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)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp l.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:132)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214)
at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
at java.lang.Thread.run(Thread.java:680)
Caused by: com.google.gwt.user.client.rpc.SerializationException: java.sql.Timestamp/1769758459
Caused by: com.google.gwt.user.client.rpc.SerializationException: java.sql.Timestamp/1769758459
at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:114)
at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:111)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
at com.lensoo.shared.entity.Course_FieldSerializer.deserialize(Course_FieldSerializer.java:320)
at com.lensoo.shared.entity.Course_FieldSerializer.deserial(Course_FieldSerializer.java:405)
at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:113)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter$ResponseReader$8.read(RequestCallbackAdapter.java:106)
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:214)
... 26 more
... 26 more
答案 0 :(得分:3)
我有类似的问题--Gilead 1.3.1,Hibernate。 Exception也在Timestamp字段上抱怨。
这是我在吉利德的网站上找到的东西:
“Gilead附带的Timestamp_FieldSerializer与GWT 2.2或2.3中明显引入的那个冲突”
http://sourceforge.net/tracker/index.php?func=detail&aid=3285026&group_id=239931&atid=1111398
“详细信息”部分的结尾提示了简单的修复,但是,我还没有尝试过。
答案 1 :(得分:3)
如果你不想触及JAR - 当你使用Gilead 1.3.2作为Maven依赖时,我今天找到了一个更好的解决方案。
冲突的Gilead序列化程序必须被GWT 2.3中的镜像所掩盖,但由于两个JAR位于同一级别,并且gwt.xml中的inherit
定位无效,因此必须在项目结构中重新实现这些。 “新”序列化程序将优先于服务器和编译客户端。最后,你可以使用GWT 2.3和Gilead 1.3.2。
分步骤:
com.google.gwt.user.client.rpc.core.java.sql
。gwt-servlet-2.3.jar
并找到包含三个文件Date_CustomFieldSerializer.class
,Time_CustomFieldSerializer.class
和Timestamp_CustomFieldSerializer.class
的上述包。如果Maven下载了它,你应该看到来源。我想Gilead团队应该在下一个版本中删除序列化程序,然后从项目中删除它们。
答案 2 :(得分:0)
只需在 [project_path] / war / WEB-INF / lib 上搜索库 json.jar 并将其添加到构建路径(我正在使用Eclipse)。
答案 3 :(得分:0)
这很简单。您只需要从com.google.*
删除gilead4gwt-1.3.2.1839.jar
包。
事实上它确实解决了这个问题。