3

GWT の組み込み jetty サーバーを使用して、Dev モードでほぼ問題なく動作する GWT アプリがあります。

ただし、外部の jetty サーバーの使用に移行する必要があります (さまざまな理由により)。私は GWT のドキュメントCompile & Debug for external server setup に正確に従いました。

私のアプリは実行されますが、ロード時の 2/3 の時間で、次のようなシリアライゼーション例外が発生します (サーバー側で):

com.google.gwt.user.client.rpc.SerializationException: タイプ 'my.package.impl.ContentTypeImpl' は 'com.google.gwt.user.client.rpc.IsSerializable' に割り当てられず、カスタム フィールドがありませんでしたserializer.セキュリティ上の理由から、この型はシリアル化されません。: インスタンス = my.package.impl.ContentTypeImpl@5e5edf72

この特定のクラスはシリアライズ可能であると確信しており、アプリケーションをコンパイルして静的アセットを外部サーバーの war ディレクトリに移動したことを確認しました。私が言ったように、ブラウザを更新する 3 回ごとに動作します。

助言がありますか?

ありがとう!

4

2 に答える 2

3

から: http://www.gwtproject.org/doc/latest/tutorial/RPC.html#serialize

次の 3 つの要件を満たす場合、クラスはシリアライズ可能です。

  1. Java Serializableまたは GWT IsSerializableインターフェースのいずれかを直接実装するか、実装 するスーパークラスから派生するために実装します。<--
  2. その非最終的で非一時的なインスタンス フィールドは、それ自体がシリアライズ可能であり、
  3. アクセス修飾子を備えたデフォルト(引数なし)のコンストラクターがあります(たとえば、private Foo(){} が機能します
于 2013-08-02T19:26:59.597 に答える
2

私の推測では、あなたは外部サーバーで別の war ディレクトリを使用しており、すべての静的コンテンツ (*.gwt.rpc ファイルを含む) をその war ディレクトリにコピーしてから、シリアル化可能なモデルについて何かを変更したと思います。 RPC 呼び出しを通過します。これらのモデルが変更されるたびに、生成された .gwt.rpc ファイルが変更されます。サーバーはシリアル化ポリシーの 1 つのバリエーションを使用し、クライアントの Java デバッグは別のものを使用します。

次の 2 つのオプションが考えられます。

  1. .gwt.rpc ファイルをサーバーの war ディレクトリに必ずコピーしてください。これを行うカスタム Ant タスクを作成できます。

  2. 内部 GWT デバッグに使用するものと同じ war ディレクトリを指すように、外部 Web サーバーを構成します。そうすれば、GWT が変更を生成すると、それらは自動的に適切な場所に配置されます。

オプション #2 は、外部サーバーを必要とする大規模で複雑なシステムを扱う場合に使用するものです。

于 2013-08-03T03:37:34.313 に答える