GWT сериализует класс, расширяющий TreeSet

1

У меня есть класс общих пакетов GWT следующим образом:

public class MyCustomClass extends TreeSet<MyCustomType> implements Serializable, IsSerializable {
     // ... a whole bunch of methods
}

Я пытаюсь отправить экземпляр класса как объект, инкапсулированный в другой класс, через RPC.

Проблема заключается в TreeSet, поскольку GWT отказывается сериализовать его, независимо от того, что я делаю. Во время выполнения я получаю сообщение об ошибке:

SEVERE: my-service: при обработке этого вызова было вызвано исключение IncompatibleRemoteServiceException. com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: java.lang.ClassNotFoundException: http: at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:323)

Итак, у меня есть все предварительные требования к сериализации (конструктор по умолчанию, никакие конечные поля, геттеры и сеттеры, все мои переменные экземпляра сериализуемы, реализуют интерфейсы и т.д.), Но это продолжается.

Дело в том, что, когда я переключаюсь с TreeSet на использование ArrayList, все работает нормально. По-моему, это связано с тем, что я уже использую ArrayList в ряде сервисов, поэтому GWT знает, чтобы их белый список в политике сериализации.

Это понимание возникло из-за этой темы. И я попробовал предложенное решение из принятого ответа (создаю "фиктивный" сервис и разместил TreeSet там, я даже создал фиктивный класс в своем клиентском пакете и поместил TreeSet в качестве поля), но не повезло.

Я на всякий случай проверил свой.gwt.xml, TreeSet не добавлен как исключение сериализации.

Таким образом, я в значительной степени застрял в этой точке, моим обходным путем является использование ArrayList и переупаковка в переходный набор, но мне не очень нравится этот подход.

Любая помощь будет высоко оценен.

(с использованием GWT 2.6)

Обновление: MyCustomType реализует интерфейс Comparable<MyCustomType>, и в TreeSet нет настраиваемого компаратора.

Теги:
arraylist
serialization
gwt
treeset

1 ответ

0

Может быть, MyCustomType не реализует java.lang.Comparable

Он отлично работает для ArrayList<MyCustomType> но не для TreeSet<MyCustomType>


--РЕДАКТИРОВАТЬ--

HashSet<MyCustomType> или LinkedHashSet<MyCustomType> работают нормально.

После получения данных на стороне клиента просто используйте

new TreeSet<MyCustomType>(<retured HashSet<MyCustomType>)

Нет необходимости повторять его, потому что он упорядочен <Comparable<MyCustomType>.

  • 0
    Он реализует Comparable <MyCustomType>, поэтому он должен быть чем-то другим: /
  • 0
    ОК Дайте мне разобраться.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню