2011-05-06 79 views
7

升级到GWT 2.3后,我的一些RPC服务不再工作, 失败,并显示“响应无法反序列化”。看来 发生在返回使用的对象的服务中Date 使用@Temporal(TemporalType.TIMESTAMP)注释的对象。 I 使用Gilead 1.3.2和Hibernate 3.6,我对GWT 2.2没有任何问题。 任何想法可能会发生什么,或者如何开始调试?GWT 2.3升级后的RPC错误

这里的堆栈跟踪:

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

您是否也在服务端升级到GWT 2.3?是否有来自服务器的堆栈跟踪? – 2011-05-06 17:17:25

+0

可能是您使用的对象没有实现可串行化接口,这就是我的想法。 – Ankit 2011-05-06 18:29:01

+0

这个问题在最近的GWT发布中解决了吗?(我试图升级到2.5.0-rc1)或者我们需要对某些问题进行修复? (Gilead 1.3.2) – rpr 2012-09-26 17:12:22

回答

3

我有非常类似的问题 - 吉利德1.3.1,休眠。异常也在时间戳字段抱怨。

这里的东西,我发现在Gilead公司网站:

“Timestamp_FieldSerializer附带一个吉利德冲突中显然在GWT 2.2或2.3引入了”的“详细信息”

http://sourceforge.net/tracker/index.php?func=detail&aid=3285026&group_id=239931&atid=1111398

结束部分建议简单的修复,但是,我还没有尝试过。

+0

感谢您的帮助。 为了好奇,从gilead4gwt.jar中删除com.google.gwt.user.client.rpc.core.java.sql包。 – KevMo 2011-05-06 22:48:30

3

如果您不想触摸JAR--当您将Gilead 1.3.2用作Maven依赖项时,我今天发现了一个更好的解决方案。

冲突的Gilead序列化程序必须被GWT 2.3中的这些序列化程序遮蔽,但是由于两个JAR都处于同一级别,并且在gwt.xml中定位inherit并不能帮助这些必须在项目结构中重新实现。 “新”序列化程序将优先于服务器和编译客户端。最后你得到工作GWT 2.3和Gilead 1.3.2。

步骤:

  1. 在项目中创建包com.google.gwt.user.client.rpc.core.java.sql
  2. 使用Eclipse打开gwt-servlet-2.3.jar并找到包含三个文件Date_CustomFieldSerializer.class,Time_CustomFieldSerializer.classTimestamp_CustomFieldSerializer.class的上述包。如果Maven下载它,你应该看到源代码。
  3. 在您的项目中重新创建这些源文件。

我想Gilead团队应该在下一个版本中删除序列化程序,然后从项目中删除这些序列化程序。

0

只要你可以在搜索[project_path] /战争/ WEB-INF/lib目录为图书馆json.jar,并将其添加到构建路径(我使用Eclipse)。

0

这很简单。您只需从gilead4gwt-1.3.2.1839.jar中删除com.google.*包。

其实它解决了这个问题。