Для передачи данных между BlazeDS 3.2 и клиентом рекомендуется использовать value object-ы. Эти объекты содержат только те данные, которые действительно необходимы клиенту.
К сожалению, в BlazeDS есть некоторые неудобства при сериализации объектов:
Обязательное наличие set-метода (можно и пустого), если вы хотите сериализовать поле у которого есть только get-метод
Сериализация enum-ов как объектов, вместо использования строчного значения, как заявлено в документации
Так же не очень удобно, на мой взгляд, является создание отдельных классов для каждого value object-a. Было бы удобнее помечать аннтоциями getter-ы или поля, которые будут учавствовать/отсутсвовать в value object-е, без создания нового класса.
Чтобы устранить вышеперечисленные недостатки придется разобраться с механизмом сериализации BlazeDS. Кратко опишу классы, которые задействованы при сериализации: flex.messaging.io.PropertyProxy
- основной интерфейс, используемый для сериализации/десериализации объектов. Каждому классу объекта, передаваемому на клиента, соответствует определенная реализация PropertyProxy
, в основном это flex.messaging.io.BeanProxy
. Соответствие (Класс объекта - PropertyProxy-объект) держится в классе flex.messaging.io.PropertyProxyRegistry
, при сериализации/десериализации BlazeDS получает PropertyProxy
для какого-либо объекта используя методы: getProxy
и getProxyAndRegister
.
Т.к. PropertyProxyRegistry
является singleton-ом, то замену реализации нам придется сделать через смену значения поля registry
, которое спрятано внутри класса. Реализация, в которой убраны перечисленные выше недостатки, выглядит так:
Комментариев нет:
Отправить комментарий