發送使用RPC和Java泛型的對象列表時,發生SerializationException錯誤。GWT和泛型
我創建這個小工具來顯示錯誤:
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();
}
}
這是代碼來創建測試窗口小部件和傳球的POJO(其中ExporterFormKey是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);
列表
在結束的下一個代碼拋出一個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());
}
您可能必須使用強制使用test.getList()來鍵入List 或聲明測試。 –
SSR
可能你的ListDataProvider()沒有返回一個ArrayList,而是List的另一個實現(例如一個Collections.unmodifiableList()返回的列表或一個AbstractList派生類型。你可以發佈完整的SerializationException和服務器日誌嗎?它應該說爲什麼序列化失敗,哪個是違規類 –
izaera