Flex blazeds / lcds AMF сериализация для переходных переменных - PullRequest
1 голос
/ 08 сентября 2011

Я использую LCDS и Flex.Когда я отправляю объект из java во Flex, я не хочу отправлять все свойства.Насколько я знаю, если вы не хотите сериализовать, сделайте переменную переходной.

например.

 private transient Date birthDate;

 public Date getBirthDate(){  
    return birthDate;
 }

 public void setBirthDate(Date val){
    birthDate = val;
    //Some code here.
 }

Теперь в сериализованном объекте не должно быть даты рождения.Но когда я вижу журналы AMF, у объекта есть birthDate со значением в нем.
Проверяет ли сериализация код и проверяет, является ли временная переменная закрытой (я не понимаю, как она имеет доступ к частной собственности.немного сбит с толку.)
Должен ли я пометить переменную как общедоступную.Тогда методы получения и установки не имеют смысла, и более того, я пишу некоторый код в методе установки.Так что мне нужен сеттер.

Вопросы:

  1. Я прочитал в книге (Enterprise flex с блейзами от Brain Telintelo, глава 15), что из коробки Blazeds сериализует только те файлы, которые имеют соответствующие геттеры исеттера.Если это так, то он будет даже беспокоиться о том, чтобы проверить частную собственность как переходную.

  2. Может ли какой-нибудь орган объяснить, как происходит обычная сериализация (не amf serializtion), и отслеживает частную переходнуюпеременных, даже если они имеют общедоступные методы получения и установки.

  3. Как сделать так, чтобы переменная Java не сериализовалась в среде Flex / LCDS / BlazeDS.

У меня 50-60 переменных в объектах, и 4 или 5 вариабельных значений не подлежат проверке.Поэтому написание curation Serializer в таких больших объектах - большая боль.И еще один недостаток, который я вижу, это то, что hibernate не сможет использовать этот объект, если я напишу свой собственный сериализатор.

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Я обычно использую Granite Data Services (а не LCDS или Blaze), но вы пытались использовать тег [Transient] ActionScript?(Конечно, если вы генерируете ваши классы .as, это может быть проблемой - возможно, есть аннотация @Transient?)

http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html

Способ работы зависит от того, кто (что) делает сериализацию.Например, я считаю, что Granite ведет себя немного иначе, чем Blaze.Я не думаю, что Granite сериализует частные атрибуты (возможно, это неправильно).Также я вспоминаю несколько лет назад, что я создал собственный класс сериализации для Granite, который говорит ему игнорировать поля с ключевым словом «transient» Java (используя отражение).

Я не знаю, сможете ли вы реализовать собственную логику сериализации в Blaze / LCDS (так же легко), но, возможно, стоит обратить на это внимание.Это не было огромной болью (как вы говорите), потому что это был только один класс, который я настроил, но опять же, я точно знаю, что это просто с Гранитом.

Может быть вспомогательная библиотекаили два там для этого.Парень написал, что это http://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/, кажется, делает то, что вы просите в обратном порядке .(Принудительная сериализация при отсутствии установщика.)

1 голос
/ 11 марта 2014

Если вы хотите исключить одно свойство Java из сериализации во Flex, вот пост на тот же вопрос: https://stackoverflow.com/a/22328869/244911

0 голосов
/ 02 октября 2013

Достаточно поместить [Transient] на геттер, его установка на сеттер избыточна и избыточна и будет повторяться в предупреждении компилятора.

...