web-dev-qa-db-ja.com

GWT-時折com.google.gwt.user.client.rpc.SerializationException

次のような例外が時折発生することに悩まされています。

com.google.gwt.user.client.rpc.SerializationException:タイプ「xxx」は「com.google.gwt.user.client.rpc.IsSerializable」に割り当てられず、カスタムフィールドシリアライザーがありませんでした。セキュリティ上の理由から、この型はシリアル化されません。instance = xxx at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.Java:610)at com.google.gwt.user.client.rpc.impl com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter $ ValueWriter $ 8.write(ServerSerializationStreamWriter.Java:152)at com.google.gwt.user.server.rpc.i.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.Java:129) rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.Java:534)at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.Java:609)at com.google.gwt.user.server.rpc。 RPC.encodeResponseForSuccess(RPC.Java:467)at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.Java:564)at com.google.g wt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.Java:188)at de.softconex.travicemanager.server.TraviceManagerServiceImpl.processCall(TraviceManagerServiceImpl.Java:615)at com.google.gwt.user.server.rpc。 RemoteServiceServlet.processPost(RemoteServiceServlet.Java:224)at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.Java:62)at javax.servlet.http.HttpServlet.service(HttpServlet.Java:710) javax.servlet.http.HttpServlet.service(HttpServlet.Java:803)at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .Java:206)org.jboss.web.Tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.Java:96)at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:235)at org.Apache catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:20 6)org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:230)at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)at org.jboss.web.Tomcat.security .SecurityAssociationValve.invoke(SecurityAssociationValve.Java:179)at org.jboss.web.Tomcat.security.JaccContextValve.invoke(JaccContextValve.Java:84)at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:127) )org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)at org.jboss.web.Tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.Java:157)at org.Apache.catalina。 core.StandardEngineValve.invoke(StandardEngineValve.Java:109)at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:262)at org.Apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.Java:419) org.Apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler.process(AjpAprProtocol.Java:378)at org.Apache.Tomcat.util.net.AprEndpoint $ Worker .run(AprEndpoint.Java:1508)at Java.lang.Thread.run(Thread.Java:619)

通常、アプリケーションは正常に動作しています。指定されたクラスは、Serializable(オブジェクトグラフ全体)を実装します。

これまでのところ、唯一のパターン/観測は次のとおりです。

  • アプリケーションがiframe内で使用されている場合にのみ問題があるようです

  • この問題は、アプリケーションの新しいバージョンがデプロイされたときに発生するようです

  • firefoxをプライバシーモード(すべてのキャッシュを無効にするなど)で実行しても問題は解決しません。

何か案は?

ホルガー

38
user1946784

確認しましたか http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#serialize 記事には次のように書かれています:アクセス修飾子付きのデフォルト(引数なし)コンストラクター(例:private Foo(){}は機能します)

常に引数ゼロのconstを忘れています。シリアライズ可能なオブジェクトを作成しているとき:D

32
Kerem

Ubuntu Lucid AMD64でTomcat6 + Devmodeを使用したときに問題が発生しました。を使用して com.google.gwt.user.client.rpc.IsSerializable の代わりに Java.io.Serializable 問題を解決したようです。

18
Hamzeh

非常に考えられる理由-古いバージョンのクライアントはまだブラウザにキャッシュされています。 rpcリクエストを送信しますが、サーバーはすでに再起動されており、rpcファイル(* .symbolMap)の新しいバージョンがあります

16
user2229686

アプリケーションを実行していると仮定しますlocalhostおよびhostedモード?その場合、workディレクトリ(または、Tomcatサーバーでアプリケーションを実行していない場合は同等のディレクトリ)に注意してください。 。シリアル化ポリシーファイル(* .gwt.rpc)については、webappのフォルダーを確認してください。

それらが正しくロードされていない可能性があります。これまでに見つかった唯一の回避策は、各シリアル化エラーの後にサーバーを再起動することです。

この問題は、ホストモードで実行していると仮定すると、GWTが実行時にシリアル化ポリシーファイルを生成するためです。コンパイルモードでは、GWTはコンパイル時に必要なすべてのファイルを生成します。私の知る限り、Tomcatは実行時にリソースファイルを読み込むことができないため、シリアル化ファイルが最初に必要になるたびに含まれません。

サーバーを再起動すると、Tomcatは以前に生成されたファイルを取得できるため、再起動後に同じエラーが発生することはありません。

これを確認できますか?

14
thomaux

JBossで実行している場合、これは以前にデプロイされたアプリケーションがアンデプロイ時に削除されないという事実による可能性があります。これを修正するには、JBossの次のファイルを変更する必要があります。 deleteWorkDirOnContextDestroy

以前にデプロイされたアプリケーションがクリーンアップされていない場合、GWTはどのRPCファイルをロードする必要があるかについて混乱し、SerializationExceptionが発生します。

5
Guillaume Polet

この問題は、GWT 2.5アプリケーションがJDK 1.7を使用してコンパイルされるときに発生します。 GWT 2.5はJDK 1.6をサポートしており、このバージョンのJDKを使用するとこの問題が修正されます。

3
Cengiz

同じエラーが発生しましたが、ブラウズキャッシュとナビゲーション履歴を消去して修正しました。

1
Gardella Juan

正確な問題を知る最良の方法は、-logLevel DEBUGまたはTRACEを使用してコードをコンパイルし、検証ユニット内をチェックすることです。行番号についても正確な問題を見つけることができると確信しています。

0
Vikash Joshi

SerializationExceptionも発生していましたが、シリアル化例外の直前にこのエラーが表示されていました。

[uptimereports/2.340102563369350884] .:例:エラー:template registration-confirmation.vmが見つかりません

それは私の速度テンプレートを見つける問題であることが判明しました。この問題を修正すると、SerializationExceptionが表示されなくなりました。Keremのアドバイスに従っても問題が解決しない場合は、ログで他の例外を探してください。

0
Chris Novak