Есть ли способ отключить GWT AutoBean?

Я использовал AutoBeans для сопоставления данных JSON, поступающих из веб-службы, не основанной на GWT-RPC Java. Пока все работает, кроме одного маппинга.

На стороне сервера класс имеет свойство типа Map, где MyAbstractParentObject является родительским классом примерно для 15 различных дочерних классов.

Когда я сопоставляю это с соответствующим интерфейсом AutoBean на клиенте, я не могу преобразовать MyAbstractParentObject в его дочерний тип после его декодирования. Я просмотрел всю документацию GWT и «Гуглы», чтобы узнать, есть ли у AutoBeans даже полиморфная поддержка, но в любом случае не смог получить ответа. Перехватчики и категории, похоже, не могут справиться с этим, это просто методы, которые они хотят использовать в интерфейсе, которые не являются геттерами / сеттерами.

Я пытался найти обходной путь, используя поле типа в данных JSON для создания экземпляра дочернего класса, но AutoBean не дает мне доступа к необработанному JSON, хотя в отладчике я вижу его как защищенное поле под названием «данные». Если я попытаюсь декодировать исходный компонент, у него будут только поля в MyAbstractParentObject.

Единственные альтернативы, которые я вижу:

  1. Расширить или создать мой собственный AutoBeanCodex, который может правильно обрабатывать дочерние элементы MyAbstractParentObject при декодировании JSON.
  2. Найдите способ получить необработанный JSON в MyAbstractParentObject AutoBean и используйте его для создания и экземпляра дочернего класса на лету.
  3. Переключитесь на другую платформу сериализации JSON-GWT, например GWTProJSONSerializer или piriti.

Любая помощь будет принята с благодарностью.

6
задан timmyonline 4 October 2011 в 21:34
поделиться