2

我正在使用 GWT-RPC 创建应用程序。在某些时候,服务器使用 Collections.unmodifiableList(List l) 返回一个 Collection 给客户端。客户端报错:

[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'java.util.Collections$UnmodifiableList' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized

所以,我需要一种替代方法来获得唯一可读的集合,我该怎么做?非常感谢

我的代码如下:

    try {
        LinkedList all=new LinkedList();
        while(res.next()){
            all.add(objectFromCursor(res));
        }
        return Collections.unmodifiableList(all);
    } catch (SQLException e) {
        throw new ExceptionHandler("Error: "+e.getMessage());
    }



private static Film objectFromCursor(ResultSet res) throws SQLException{
    Film film=new Film(res.getString(1));
    film.setRegista(res.getString(2));
    film.setAnnoDiProduzione(res.getInt(3));
    return film;
}
4

2 回答 2

1

不可修改的可序列化集合本身似乎是一个矛盾。为了反序列化一个对象(我认为“可序列化”暗示“可序列化”),它必须是可修改的。

所以只需使用一个可修改的集合来通过 GWT-RPC 传递。

于 2015-06-10T00:01:49.683 回答
1

您可以使用来自番石榴的 ImmutableCollections。 https://github.com/google/guava/wiki/ImmutableCollectionsExplained

Guava(链接到他们的 Github 页面)是来自 Google 的 Java 实用程序库,但他们也为 GWT 制作了一个版本。要在您的项目中使用 ImmutableCollections,请将 guava-gwt 添加到您的项目并继承

<inherits name="com.google.common.collect.Collect"/>
于 2015-06-10T12:14:28.433 回答