Как я могу отладить сериализацию AMF (BlazeDS) объектов Java в Actionscript?
-
13-09-2019 - |
Вопрос
Я использую 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 и включал отложенную загрузку - мы отключили его, поскольку эта мера представляла меньшую потерю эффективности (теоретически, по крайней мере) по сравнению с другими имеющимися у нас обходными путями.