在我的谷歌Web工具包項目,我得到了以下錯誤:SerializationException:類型不包含在序列化的類型設置
com.google.gwt.user.client.rpc.SerializationException:類型「your.class.Type '未包含在可由此SerializationPolicy序列化的類型集中,或者其Class對象無法加載。爲了安全起見,這種類型不會被序列化。
這個錯誤的可能原因是什麼?
在我的谷歌Web工具包項目,我得到了以下錯誤:SerializationException:類型不包含在序列化的類型設置
com.google.gwt.user.client.rpc.SerializationException:類型「your.class.Type '未包含在可由此SerializationPolicy序列化的類型集中,或者其Class對象無法加載。爲了安全起見,這種類型不會被序列化。
這個錯誤的可能原因是什麼?
GWT跟蹤一系列可以序列化併發送到客戶端的類型。 your.class.Type
顯然不在此列表中。像這樣的列表存儲在.gwt.rpc
文件中。這些列表已生成,因此編輯這些列表可能沒有用處。如何生成這些名單是有點不清楚,但你可以嘗試以下操作:
your.class.Type
實現java.io.Serializable
your.class.Type
有一個公共無參數的構造確保成員的your.class.Type
也這樣做
檢查你的程序是否不包含非序列化類型的集合,例如ArrayList<Object>
。如果這樣的集合包含your.class.Type
並被序列化,則會發生此錯誤。
製作your.class.Type
實施IsSerializable
。這個標記接口專門用於應該發送給客戶端的類。這對我不起作用,但我的班級也實施了Serializable
,所以也許兩個界面在一起工作不好。
另一種選擇是創建一個虛擬類,其中your.class.Type
作爲成員,並向您的RPC接口添加一個獲取並返回虛擬對象的方法。這迫使GWT編譯器將虛擬類及其成員添加到序列化白名單。
太棒了!我沒有添加默認構造函數......不知道序列化類型的構造函數的用途......但我的老闆在修復它之後向我解釋了它...... - 再次感謝:) – 2013-09-30 10:31:07
你是一個生活救星.. 剛剛得到了一些鏈接http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/ – 2015-02-06 10:15:13
更多的信息構造函數解決了我的問題:) – nikoo28 2015-03-03 14:55:32
看起來像這個問題是非常相似的what IsSerializable or not in GWT?,看到更多的相關文檔的鏈接那裏。
我還會補充一點,如果你想使用嵌套類,請使用靜態成員類。 即,
public class Pojo {
public static class Insider {
}
}
非靜態成員類得到SerializationException在GWT 2.4
將課程移到外面是另一種選擇。 – drone6502 2017-11-27 20:34:56
我有同樣的問題在RemoteService這樣
public List<X> getX(...);
,其中X是一個接口。唯一的實現符合規則,即實現Serializable或IsSerializable,具有默認構造函數,並且其所有(非瞬態和非最終)字段也遵循這些規則。
但我一直得到SerializationException,直到我改變了結果類型的列表,以X [],所以
public X[] getX(...);
工作。有趣的是,唯一的參數是一個List,Y是一個接口,根本沒有問題...
謝謝!我有類似的問題。我有一個看起來像Collection
我遇到了這個問題,如果你有機會使用JPA或Hibernate,這可能是試圖返回查詢對象,而不是創建一個新對象,並將相關字段複製到該新對象中。檢查以下內容,我在谷歌組中看到。
@SuppressWarnings("unchecked")
public static List<Article> getForUser(User user)
{
List<Article> articles = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
Query query = pm.newQuery(Article.class);
query.setFilter("email == emailParam");
query.setOrdering("timeStamp desc");
query.declareParameters("String emailParam");
List<Article> results = (List<Article>) query.execute(user.getEmail
());
articles = new ArrayList<Article>();
for (Article a : results)
{
a.getEmail();
articles.add(a);
}
}
finally
{
pm.close();
}
return articles;
}
這幫了我很多,希望它指向了正確的方向。
請參閱http://www.gwtproject.org/articles/using_gwt_with_hibernate.html – leeyuiwah 2015-09-29 15:41:12
當你的類有JDO註釋,那麼這個固定爲我(除了點bspoel的答案):https://stackoverflow.com/a/4826778/1099376
這意味着,異步調用的返回類型不是序列化。要對此進行排序,請在返回類型類中實現java.io.seriablizable接口。 – Ashok 2011-08-16 05:04:09