21

次の例外が発生します。

com.google.gwt.user.client.rpc.SerializationException: タイプ 'java.lang.Long' が、この SerializationPolicy によってシリアル化できるタイプのセットに含まれていないか、そのクラス オブジェクトを読み込めませんでした。セキュリティ上の理由から、この型はシリアル化されません

GWT 2.1 と組み込みの Jetty サーバーを使用します。ドキュメントによると、このタイプは間違いなくシリアライズ可能です...どうすればそれをSerializationPolicyに含めることができますか?

4

10 に答える 10

28

Here's the link that should resolve problem: http://developerlife.com/tutorials/?p=131

A user defined class is serializable if:

  1. the class is assignable to IsSerializable or java.io.Serializable, either because it implements one of these interfaces, or because it is derived from a superclass that implements one of these interfaces.
  2. all the class’s non-final, non-transient instance fields are serializable
  3. the class has a public default (zero argument) constructor
于 2011-09-11T18:16:18.340 に答える
20

多数のオブジェクトを「ホワイトリストに登録」する余分なメソッドを RPC サービスに含める必要があります。これは、ジェネリックの使用が原因で発生します。GWT は、ジェネリック内に含めるためにシリアル化する可​​能性のあるオブジェクトを必ずしも決定することはできません。

オブジェクト ( ) のメンバーとしてシリアル化 (非) 化する必要があるすべての型を含めましたSerializableWhitelist。次のようなメソッドを RPC サーブレット オブジェクトに追加しました。

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

GWT は明らかに 2 つの別個のシリアル化ポリシーを保持しているため、ホワイトリストのデータ型を引数と戻り値の型の両方として含める必要があることに注意してください。

于 2010-11-20T22:19:28.190 に答える
8

war/app ディレクトリの *.gwt.rpc ファイルを削除し、クリーンアップして再構築してみてください。

注意すべき点: long または Long は
GWT でエミュレートされ (ネイティブ Javascript long がないため)、非常に
遅いため、可能な限り避ける必要があります。可能な限り、代わりに int を使用してください。

于 2010-11-17T09:34:46.703 に答える
4

参考までに、これをGWTのバグとして取り上げました:http ://code.google.com/p/google-web-toolkit/issues/detail?id = 5811

彼らの言うことを見ていきます。

于 2010-12-23T15:09:06.503 に答える
3

FWIW、私はこの問題を抱えていましたが、「オブジェクト」タイプは生成されたクラスの背後に隠されていました。エラーメッセージ自体が間違っていました。

したがって、rpc メソッドの 1 つにクラスが含まれる場合:

class Xxx<T> implements IsSerializable {...

次のように変更する必要があります。

class Xxx<T extends IsSerializable> implements IsSerializable {...
于 2013-05-22T05:15:01.953 に答える
1

この問題は、ホストモードを実行しているローカルマシンのコードが、RPCを介して接続している外部サーバーのコードと同じでないことが原因である可能性もあります。そのため、私の場合、外部サーバーにデプロイされたものと一致するローカルマシンのgitpullがありませんでした。変更は最小限で、gwt.rpcに含まれているクラスの1つにある新しいプロパティでしたが、gwt.rpc md5ファイル名が異なるため、上記のエラーが発生しました。

于 2012-01-24T15:44:36.227 に答える
0

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8に触発されました

Eclipse と Maven と gwt 2.1.1 の使用

gwt war をコンパイルしてデプロイします。

Eclipse から起動した OOPHM を使用してみてください。

これは私には失敗します。

これはサーバー ログに生成されます。

エラー: シリアル化ポリシー ファイル 'blah.gwt.rpc' が見つかりませんでした。この展開に含めるのを忘れましたか?

警告: モジュール 'http://blah:8080/BlahUI/BlahUI/' の SerializationPolicy '94DEC228B2828D3A5897FEE3D6845A40' を取得できませんでした。従来の 1.3.3 互換のシリアル化ポリシーが使用されます。その結果、SerializationExceptions が発生する場合があります。

その後

着信 RPC 呼び出し com.google.gwt.user.client.rpc.SerializationException のディスパッチ中の例外: タイプ '[LpathToClass;' は 'com.google.gwt.user.client.rpc.IsSerializable' に割り当て可能ではなく、カスタム フィールド シリアライザーを持っていませんでした。セキュリティ上の理由から、この型はシリアライズされません。 google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:614)

追加の gwt.rpc ファイルが生成されたので (Eclipse/Maven プラグインのどちらかを知っていますか?)

再コンパイル (gwt.rpc ファイルがターゲット フォルダーにないため、クリーン コンパイルでも機能します。私の OOPHM gwt.rpc ファイルはエントリポイント html と同じフォルダーにあります) および再デプロイします。この新しい war ファイルには、生成された gwt.rpc ファイルが含まれます。

Eclipse から OOPHM を再起動します。

私のために働きます。

于 2011-10-26T03:58:37.450 に答える