如何将Java对象的AMF(BlazeDS)序列化调试为Actionscript?

时间:2009-06-11 06:24:11

标签: java flex blazeds amf livecycle

我正在使用BlazeDS远程访问我在Flex应用程序中使用的一些Java对象。我的一个课程出现了类型强制错误,但我无法解决这个问题。我有其他类使用相同的数据类型工作正常,我已经超过了我的映射十几次。据我所知,我正在遵循吸气剂和制定者的所有必要约定......

无论如何,我的问题是:如何调试此问题?在调试模式下运行Flex应用程序会向控制台发出一些通用错误,这些错误实际上没有多大帮助(TypeError:Error# 1034:类型强制失败:无法将Object @ 5d1d809转换为valueObjects.SomeClass。)。

我是这个AMF / Flex + Java的新手,所以任何提示都会非常感激。

5 个答案:

答案 0 :(得分:13)

这是我在使用BlazeDS,AMF等时使用的两个工具:

  • 使用HTTP代理工具显示客户端与服务器之间的通话,例如 Charles
  

Charles是一个HTTP代理/ HTTP   监视/反向代理,启用a   开发人员查看所有的HTTP和   他们之间的SSL / HTTPS流量   机器和互联网。这个   包括请求,回复和   HTTP标头(包含   cookie和缓存信息)。

  • 打开BlazeDS的日志记录。在WEB-INF/conf/services-conf.xml内,将调试级别降低到“debug”,如下面的snippit所示。输出相当详细,将显示在{tomcat-home}/logs/localhost.yyyy-mm-dd.log

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

答案 1 :(得分:4)

检查服务客户端AMF消息之间通信的最简单方法是使用FireFox,安装 FireBug 扩展并添加 AMF Explorer 。您可以看到结构化请求和响应。

答案 2 :(得分:2)

在客户端进行反序列化的java类必须引用应用程序中相应AS3类的对象(mxml或as3)。否则,as3类将不会加载到swf文件中,并导致将java类反序列化为泛型as3对象。

已更新尽管有映射,getter和setter,但仍会发生这种情况。只需在mxml的脚本部分声明相应AS3类的对象。

答案 3 :(得分:0)

我使用Flex Builder并将其设置为客户端和服务器端调试。首先设置起来很痛苦,但是您可以通过Google逐步进行教程。我觉得调试RPC很有价值。最后我查了一下,Flex Builder有一个免费试用版,对学生和失业者免费。

答案 4 :(得分:0)

值得注意的是,Java中的检测也会导致信息丢失和/或干扰序列化过程和流。

我在一个项目(Flex< - > BlazeDS + Spring)上体验过这个TypeError: Error #1034: Type Coercion failed我们的数据访问层是用iBatis实现的,并且启用了延迟加载 - 我们将其关闭了与我们采用的其他变通办法相比,衡量标准代表了较低的效率损失(理论上至少)。