Как я могу отладить сериализацию AMF (BlazeDS) объектов Java в ActionScript?

Я использую BlazeDS для удаления некоторых объектов Java, которые используются в приложении Flex. Я получаю ошибку приведения типов в одном из моих классов, которую я не могу понять, хоть убей. У меня есть другие классы, которые отлично работают с теми же типами данных, и я десятки раз просматривал свое отображение. Насколько я знаю, я следую всем необходимым соглашениям для геттеров и сеттеров ...

В любом случае, мой вопрос: как я могу отладить эту проблему? Запуск приложения Flex в режиме отладки выдает в консоль некоторые общие ошибки, которые на самом деле не очень помогают (TypeError: Error # 1034: Type Ошибка принуждения: невозможно преобразовать Object @ 5d1d809 в valueObjects.SomeClass.).

Я новичок во всей этой штуке с AMF / Flex + Java, поэтому буду благодарен за любые советы.


person Boden    schedule 11.06.2009    source источник


Ответы (5)


Это два инструмента, которые я использую при работе с BlazeDS, AMF и т. Д .:

  • Используйте инструмент HTTP-прокси, который показывает вызовы между вашим клиентом и сервером, например Чарльз

Charles - это прокси-сервер HTTP / монитор HTTP / обратный прокси, который позволяет разработчику просматривать весь трафик HTTP и SSL / HTTPS между его компьютером и Интернетом. Сюда входят запросы, ответы и заголовки HTTP (которые содержат файлы cookie и информацию кеширования).

  • Включите ведение журнала для BlazeDS. Внутри WEB-INF/conf/services-conf.xml понизьте уровень отладки до «debug», как в приведенном ниже фрагменте. Результат, который довольно подробен, появится в {tomcat-home}/logs/localhost.yyyy-mm-dd.log

    <target class="flex.messaging.log.ConsoleTarget" level="debug">

person Stu Thompson    schedule 11.06.2009
comment
Спасибо! Похоже, что на стороне сервера все сериализуется правильно. Когда доходит до клиента, что-то рвет. Как я могу увидеть, что происходит в клиенте во время десериализации? - person Boden; 11.06.2009
comment
Я бы проверил, правильно ли вы выполняете привязку, с действительно 1: 1 Java: AS3-объектами, совместимыми типами данных и правильным использованием [Bindable] и [RemoteClass (alias = com.mycorp.myproj.vo.User)] привязки AS3 Особенности. В сети Google есть множество примеров. - person Stu Thompson; 11.06.2009
comment
Мои типы в порядке, псевдонимы удаленных классов верны, и я экспериментировал с Bindable. Я использовал Чарльза по вашему предложению, и все возвращается с сервера, выглядит отлично .... имена классов, типы, данные, все. Если бы я мог просто увидеть конкретную причину, по которой принуждение не работает, я мог бы понять это ... но сейчас я чувствую себя слепым. - person Boden; 11.06.2009
comment
Хорошо, как вы и подозревали, это была проблема с привязкой. Я отмечал свои объекты значений как связываемые, и хотя это работало для некоторых, не для всех. Я нашел видео о привязке во флексе и собираюсь посмотреть его, чтобы узнать, смогу ли я лучше понять этот материал. Еще раз спасибо! - person Boden; 11.06.2009
comment
PS - Я собираюсь принять этот ответ, потому что ваш исходный ответ действительно ответил на мой исходный вопрос (хотя было бы здорово предложить немного лучше узнать, что происходит в клиенте). - person Boden; 11.06.2009
comment
Привет - извините за восстановление старой ветки, но я собирался опубликовать тот же вопрос, когда нашел это. Как и вы, я бы хотел получить обратную связь о том, почему перевод объектов не выполняется в клиенте (при условии, что все сопоставления типов и т. Д. Верны). Прежде чем я пойду и создам новый вопрос, мне просто было интересно, что это за проблема привязки, которую вы упомянули в конце? то есть: это что-то общее? - person stubotnik; 02.09.2010

Самый простой способ проверить связь между сообщениями AMF сервисных клиентов - использовать FireFox, установить расширение FireBug и добавить AMF Explorer. Вы можете увидеть структурированные запросы и ответы.

person FidelGonzo    schedule 31.01.2011

Класс java, десериализуемый на стороне клиента, должен иметь ссылку на объект соответствующего класса AS3 в приложении (mxml или as3). В противном случае класс as3 не будет загружен в файл swf и приведет к десериализации класса java в общий объект as3.

обновлено Это произойдет, несмотря на наличие сопоставления, методов получения и установки. Просто объявите объект соответствующего класса AS3 в разделе сценария вашего mxml.

person Rivet    schedule 14.07.2010
comment
В своем main.mxml я просто добавляю private const myVO:MyVO = null; и у меня получилось, спасибо. - person Mickaël Gauvin; 20.04.2016

Я использую Flex Builder и настроил его для отладки как на стороне клиента, так и на стороне сервера. Сначала было сложно настроить, но вы можете найти в Google пошаговые инструкции. Я считаю его весьма полезным для отладки RPC. Последний раз я проверял, что Flex Builder имеет бесплатную пробную версию и бесплатен для студентов и безработных.

person Philip    schedule 18.06.2009

Также стоит отметить, что инструментарий в Java также может вызывать потерю информации и / или мешать процессу сериализации и потоку.

Я испытал это TypeError: Error #1034: Type Coercion failed в проекте (Flex ‹-> BlazeDS + Spring), где наш уровень доступа к данным был реализован с помощью iBatis и была включена отложенная загрузка - мы отключили ее, поскольку эта мера представляла меньшую потерю эффективности ( теоретически, по крайней мере), по сравнению с другими обходными путями, которые у нас были.

person Darren Bishop    schedule 25.03.2011