Występuje błąd SerializationException podczas wysyłania listy obiektów za pomocą RPC i Java Generics.GWT i Generics
Tworzę ten widget, aby pokazać błąd:
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();
}
}
jest to kod do tworzenia widget test i przekazując listę POJOs (gdzie ExporterFormKey obiektem POJO)
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);
Pod koniec następnego kodu rzuca SerializationException:
service.sendList(test.getList(), new AsyncCallback...);
Podczas następnego jeden robi dobrze:
service.sendList(list, new AsyncCallback...);
----- Edit ----
Okazało się, że robi następny kod działa również
List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>();
newList.add(test.getItems().get(0));
service.sendList(newList , new AsyncCallback...);
Albo ten działa również
List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(test.getItems());
Znalazłem tę zmianę w teście działa!
public List<T> getItems(){
return new ArrayList<T>(ldp.getList());
}
Być może trzeba będzie rzucić test.getList(), aby wpisać List lub Declare Test z . –
SSR
Prawdopodobnie twój ListDataProvider() nie zwraca tablicy ArrayList, ale innej implementacji listy (na przykład zwróconej listy Collections.unmodifiableList() lub typu pochodnego AbstractList. Czy mógłbyś opublikować pełny wyjątek SerializationException i log serwera? serializacja nie działa, a która jest klasą obraźliwą –
izaera