2012-04-05 13 views
2

GWT RPC(GWT 2.4)でオブジェクトを送信しようとしています。 fooMapが空である、それは正常に動作する場合GWT RPC SerializationException

public interface Foo extends Serializable { 

} 

@Serialized 
private Map<Class<? extends Foo>, Foo> fooMap = ImmutableMap.of(); 
Foo

は次のように定義される:オブジェクトは、次のフィールドを含むオブジェクトを含みます。値が入力されると、GWT RPCは、SerializationExceptionで失敗します。 (。サーバーがヒットされることはありません)fooMapFooの唯一のタイプは、このクラスからです。私は間違って何をやっている

public class FooImpl implements Foo { 

    private static final long serialVersionUID = 1L; 

    private long bar; 
    private float baz; 
    private int batz; 

    ... 
} 

FooImplは問題を引き起こすべきではありません。すべてのクラスには、引数なしのコンストラクタがあります。私はシリアル化されたすべてのオブジェクトのすべてのプライベートフィールドにゲッターとセッターを必要としません。 Class<? extends Foo>は問題がありますか?

+0

オブジェクト自体の定義はどこですか?あなたの 'fooMap'以外に何かが含まれていますか? –

+0

オブジェクト自体は 'Serializable'であり、' fooMap'が削除されたとき、または空のときにうまく動作します。 –

+0

私の考えは、使用しているMap実装のGWT直列化の特性を調べることです。 – stickfigure

答えて

2

Class<? extends Foo>が最も問題になります。私が知る限り、GWTは単にClassインスタンスを直列化する方法を知らない(通常のオブジェクト、列挙型と配列をシリアル化するためのコードしかなく、CustomFieldSerializerはありません)。したがって、Classインスタンスの代わりにクラス名を使用してみてください。