2011-07-27 9 views
0

私はIsSerializableを実装する私のGWTアプリケーションのクライアント側にMyObjectを定義しました。ここではMyObject{String, Timestamp, Timestamp, String}です。GWTシリアライゼーションMyObject java.sql.Timestamp

シンプルなRPC(AsyncCallback<ArrayList<MyObject>>)を作るとき、私は次のエラーを取得する:

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>と1 MyObjectには(ArrayListに対立するものとして)、帰国してみましたエラー。

最後に、タイムスタンプのプロパティを削除しました。のシリアル化に問題があると私に信じられているMyObject{String, String}が問題になりました。誰でもこれについてコメントして、どのように進行するのが最善かをアドバイスできますか?

サーバーのログを確認したところ、普通のことは何も見つかりませんでした。

編集1: 私はMyObject{Timestamp}でテストしましたが、これも失敗しました。これまで

ソリューション: かなりハックは、共有フォルダへMyObjectを移動し、私はクライアント側でそれらのうちのTimestampオブジェクトを作成できるようにlong型にそれらを変換し、その後、transientとしてタイムスタンプを宣言しました。醜い、私は知っているが、それは動作する。

+0

DTO(データトランスミッタオブジェクト)を共有フォルダに配置しましたか? – helpermethod

+0

私はあなたの提案をそれぞれ独立して試してみましたが、どちらもうまくいきませんでした。私は一緒に(共有フォルダ+ロング変換)両方を試して、私のタイムスタンプを一時的なものとして設定しました。私が望んでいたエレガントな解決策ではありませんが、今のところうまくいきます。 – Vertical22

答えて

0

GWTでjava.sql.Timestampをシリアライズできることは間違いありません。疑問にGWTのシリアル化可能なタイプをよく読んでいる場合:

http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes

をだから私はあなたの呼び出しがサーバー側ではなく、シリアル化中にあなたの方法で失敗したと仮定します。デバッガを接続して、サーバーサイドの方法で何が起きているのか確認しましたか?

+0

GWTのシリアライズ可能な型を読んだので、なぜこれがうまくいかないのか困惑しています(必死の質問:P)。最初はサーバー側でシリアライズできなかったために失敗しました。私はストリングとタイムスタンプの両方を使用していたかもしれないと思っていましたが、Edit 1以降でもサーバー側でシリアル化できませんでした。私はデバッガに接続していましたが、私はまだ同じエラーが問題になっています。 – Vertical22

1

私は、同様のエラーを持っていたので、私は、私はこれが誰かを助けることを願っ

MyObjectにクラスで、この場合には、空のコンストラクタを追加

public MyObject(){}

を解決しました。

Bye。

関連する問題