7

GWT 2.3 にアップグレードした後、一部の RPC サービスが機能しなくなり、「応答をデシリアライズできませんでした」というエラー メッセージが表示されて失敗します。@Temporal(TemporalType.TIMESTAMP) で注釈が付けられた Date オブジェクトを使用するオブジェクトを返すサービスで発生するようです。私は 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
4

4 に答える 4

3

JAR に触れたくない場合 - Gilead 1.3.2 を Maven の依存関係として使用する場合、今日私が見つけたより良い解決策があります。

競合する Gilead シリアライザーは、GWT 2.3 からこれらによってシャドウイングされる必要がありますが、両方の JAR が同じレベルにありinherit、gwt.xml での配置は役に立たないため、これらをプロジェクト構造に再実装する必要があります。「新しい」シリアライザーは、サーバーとコンパイル済みクライアントの両方で優先されます。最後に、GWT 2.3 と Gilead 1.3.2 が動作するようになります。

手順:

  1. プロジェクトにパッケージを作成com.google.gwt.user.client.rpc.core.java.sqlします。
  2. Eclipse を使用しgwt-servlet-2.3.jarて上記のパッケージを開き、3 つのファイルDate_CustomFieldSerializer.classと. Maven がダウンロードした場合は、ソースが表示されるはずです。Time_CustomFieldSerializer.classTimestamp_CustomFieldSerializer.class
  3. プロジェクトでこれらのソース ファイルを再作成します。

ギリアドのチームは次のリリースでシリアライザーを削除する必要があると思います。その後、プロジェクトからもこれらを削除します。

于 2011-05-10T07:53:21.350 に答える
3

私は非常によく似た問題を抱えています - Gilead 1.3.1、Hibernate。Timestamp フィールドでも例外が発生します。

ギリアドのウェブサイトで見つけたものは次のとおりです。

「ギリアドに同梱されている Timestamp_FieldSerializer は、明らかに GWT 2.2 または 2.3 で導入されたものと競合しています」

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

「詳細」セクションの最後に簡単な修正方法が示されていますが、まだ試していません。

于 2011-05-06T21:37:33.583 に答える
0

[project_path]/war/WEB-INF/libでライブラリjson.jarを検索し、それをビルド パスに追加するだけです (私は Eclipse を使用しています)。

于 2011-09-02T13:35:37.810 に答える
0

とても簡単です。com.google.*からパッケージを削除するだけgilead4gwt-1.3.2.1839.jarです。

実際、この問題は解決します。

于 2012-08-21T09:53:14.873 に答える