2015-06-09 11 views
2

Я использую GWT-RPC для создания приложения. В определенный момент сервер возвращает коллекцию с использованием Collections.unmodifiableList (List l) для клиента. Клиент выдаст ошибку:Я не могу использовать в GWT Collections.unmodifiableList (List l), чтобы сделать только читаемый мой список, потому что не является сериализуемым, альтернативным способом?

[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 

Итак, мне нужен альтернативный способ получить только читаемый Collection, как я могу это сделать? Большое спасибо

мой код выглядит следующим образом:

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; 
} 
+1

Почему вам нужно передать неизменяемый список по GWT-RPC? Список удаляется из экземпляра сервера в любом случае после его поступления на клиент, то есть изменения на стороне клиента не будут распространяться на сервер (если вы не отправите его обратно в другой запрос GWT-RPC). –

ответ

1

неизменяемой сериализуемая коллекция кажется противоречие в себе. Чтобы десериализовать объект (я считаю «десериализуемым» подразумеваться «сериализуемым»), он должен быть модифицируемым.

Так что просто используйте модифицируемую коллекцию, подлежащую передаче через GWT-RPC.

1

Вы можете использовать ImmutableCollections из guava. https://github.com/google/guava/wiki/ImmutableCollectionsExplained

Guava (link to their Github Page) является библиотекой утилиты от Google для Java, но они также сделали версию для GWT. Чтобы использовать ImmutableCollections в проекте, добавить гуавы-GWT вам проецировать и наследовать

<inherits name="com.google.common.collect.Collect"/>