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

StackOverflow https://stackoverflow.com/questions/979617

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top