2012-12-19 3 views
7

RPCとJava Genericsを使用してオブジェクトのリストを送信するときにSerializationExceptionエラーが発生しています。これは、(ExporterFormKeyはPOJOオブジェクトである)のPOJOGWTとGenerics

List<ExporterFormKey> list = new ArrayList<ExporterFormKey>(); 
ExporterFormKey key = new ExporterFormKey(); 
key.setKey("key1"); 
list.add(key); 

Test<ExporterFormKey> test = new Test<ExporterFormKey>(); 
test.setItems(list); 
のリストをテストするウィジェットを作成して通過させるためのコードである

public class Test<T> { 

    ListDataProvider<T> ldp = new ListDataProvider<T>(); 

    public void setItems(List<T> list){ 
     for(T t :list){ 
      ldp.getList().add(t); 
     } 
    } 

    public List<T> getItems(){ 
     return ldp.getList(); 

    } 

} 

私はエラーを表示するには、このウィジェットを作成してい

終わりに次のコードは、SerializationExceptionをスロー:

service.sendList(test.getList(), new AsyncCallback...); 

次ながら一つは罰金を行います。

service.sendList(list, new AsyncCallback...); 

-----編集----

を私は次のコードも

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(); 
newList.add(test.getItems().get(0)); 
service.sendList(newList , new AsyncCallback...); 

それともこの作品やってするも

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(test.getItems()); 
を働くことがわかりました

私もこの変更がテストワークで見つかった!

public List<T> getItems(){ 
    return new ArrayList<T>(ldp.getList()); 
} 
+0

Test.getList()をタイプしてList またはDeclare Testをにタイプする必要があります。 – SSR

+1

ListDataProvider ()がArrayListを返していない可能性がありますが、Collections.unmodifiableList()がListまたはAbstractListの派生型を返した場合など、SerializationExceptionとサーバーログを完全に投稿できますか? – izaera

答えて

1

http://blog.rubiconred.com/2011/04/gwt-serializationexception-on-rpc-call.html

izaeraはListDataProviderワイヤの両端に直接送信することができない非シリアライズリストの実装(ListWrapper)を使用して示唆したように。

あなたの投稿に示唆しているように、ListDataProviderのgetList()メソッドからの応答を新しいArrayListにラップするのが最も簡単な方法です。

+0

誰かが答えのためにここを訪れている場合、上記のリンクは死んでいて、404を返します。このページもキャッシュされていないようです。 – JRSofty