2016-05-04 3 views
0

Я использую gwt, и я использую mapdb, и когда я извлекаю данные в виде карты (BTreeMap) gwt throw rpc exceptionization. Я завернул карту в объект, который реализует Serializable и IsSerializable, но это не работает.GWT - исключение сериализации RPC и MapDB

Я не знаю, почему это не работает, потому что я прочитал документацию mapdb, и я правильно ее использую.

Вот код:

public class WrapperObject implements Serializable, IsSerializable { 

      private Map<String, List<String>> map; 

      public WrapperObject() {} 
      public WrapperObject(Map<String, List<String>> map) { 
       this.map = map; 
      } 
      //GETTERS AND SETTERS 
      ... 
} 


public class Prova { 
    .... 

    private DB openDB() { 
     return DBMaker.shoutdownOnJvmClose().make(); 
    } 

    ... 

    public WrapperObject retrieveData() { 
     DB db = this.openDB(); 

     Map<String, List<String>> map = 
     db.getTreeMap("values"); 

     return new WrapperObject(map); 
    } 
} 

Тогда в классе клиента я создаю дерево с TreeItem используя карту.

Благодарим за помощь.

+0

вашего 'WrapperObject' выделяется в общем пакете? Вы снова пытались скомпилировать? – Tobika

+0

будет здорово, если вы поместите полное исключение stacktrace – Ajax

+0

, вы запускаете свой код в разработке, используя режим супер-dev. это может быть причиной –

ответ

1

Проблема заключается в том, что Map не является Serializable.

I.e. ваш WrapperObject обозначен как Serializable и IsSerializable, , но не все его члены помечены таким образом (см. Map и обернутый List).

Чтобы решить эту проблему, вы можете изменить тип map к реализации Map, который сериализует (например LinkedHashMap с ArrayList):

private LinkedHashMap<String, ArrayList<String>> map; 
+0

Спасибо за ваше предложение, я попробую позже. – Peduz

Смежные вопросы