GWT序列化MyObject java.sql.Timestamp

GWT序列化MyObject java.sql.Timestamp,gwt,timestamp,rpc,gwt-rpc,serializable,Gwt,Timestamp,Rpc,Gwt Rpc,Serializable,我已经在GWT应用程序的客户端定义了MyObject,它实现了IsSerializable,其中MyObject{String,Timestamp,Timestamp,String} 当制作一个简单的rpc(其中AsyncCallback)时,我得到以下错误: com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details at co

我已经在GWT应用程序的客户端定义了
MyObject
,它实现了
IsSerializable
,其中
MyObject{String,Timestamp,Timestamp,String}

当制作一个简单的rpc(其中
AsyncCallback
)时,我得到以下错误:

com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:209)
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.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.entry0(Impl.java:214)
at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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(Unknown Source)
我尝试使用
AsyncCallback
只返回一个MyObject(与ArrayList相反),这也导致了上述错误

最后,我删除了Timestamp属性,因此
MyObject{String,String}
起了作用,这让我相信序列化
java.sql.Timestamp
会有问题。有人能对此发表评论并建议我如何最好地继续吗

我检查了服务器日志,没有发现任何异常

编辑1: 我用
MyObject{Timestamp}
进行了测试,结果也失败了

到目前为止的解决方案:
相当粗糙,将
MyObject
移动到共享文件夹,并将时间戳声明为
transient
,然后将它们转换为long,这样我就可以在客户端用它们创建一个Timestamp对象。我知道这很难看,但它很管用。

我确信在GWT中序列化
java.sql.Timestamp
是可能的。如果有疑问,请阅读GWT的可序列化类型:


所以我假设您的调用在服务器端的方法中失败,而不是在序列化过程中。是否尝试附加调试器以查看服务器端方法中发生的情况?

我遇到了类似的错误,因此我解决了在MyObject类中添加空构造函数的问题

公共MyObject(){}

我希望这能帮助一些人


再见。

您是否已将DTO(数据传输对象)放入共享文件夹?我分别尝试了您的两个建议,但均无效。我最终尝试了两者(共享文件夹+长转换),并将时间戳设置为暂时的。这不是我所希望的优雅的解决方案,但它现在起作用了。我确实读过GWT可序列化类型,这就是为什么我很困惑为什么它不起作用(求助于一个绝望的SO问题:P)。起初它失败是因为它无法在服务器端序列化,我想可能是因为我同时使用了字符串和时间戳,但即使在编辑1之后,它仍然无法在服务器端序列化。我确实附加了一个调试器,但仍然得到了同样的错误。