2009-06-11 5 views
7

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

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

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

ответ

13

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

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

Charles is an HTTP proxy/HTTP monitor/Reverse Proxy that enables a developer to view all of the HTTP and SSL/HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).

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

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

+0

Спасибо! Ну, похоже, что все правильно сериализуется на стороне сервера. Когда он добирается до клиента, что-то бьет. Как я могу увидеть, что происходит в клиенте, поскольку оно десериализуется? – Boden

+0

Я бы проверял, правильно ли вы привязываетесь, с истинно 1: 1 объектами Java: AS3, совместимыми типами данных и правильным использованием «[Bindable]» и «[RemoteClass (alias =" com.mycorp.myproj. vo.User ")]" Функции привязки AS3. В googlenets есть много примеров. –

+0

Мои типы в порядке, мои псевдонимы удаленных классов верны, и я экспериментировал с Bindable. Я использовал Чарльза за ваше предложение, и все возвращается с сервера, выглядящего отлично ... имена классов, типы, данные, все. Если бы я мог просто увидеть конкретную причину неудачи принуждения, я мог бы это понять ... но сейчас я чувствую себя слепым. – Boden

0

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

2

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

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

+0

В моем 'main.mxml', я просто добавляю' private const myVO: MyVO = null; 'и я работал, спасибо. –

4

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

0

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

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