如何调试 Java 对象到 Actionscript 的 AMF (BlazeDS) 序列化?
-
13-09-2019 - |
题
我正在使用 BlazeDS 远程传输在 Flex 应用程序中使用的一些 Java 对象。我的一个类遇到了类型强制错误,我一生都无法弄清楚。我有其他类可以使用相同的数据类型正常工作,并且我已经检查了我的映射十几次。据我所知,我正在遵循 getter 和 setter 的所有必要约定......
无论如何,我的问题是:我该如何调试这个问题? 在调试模式下运行 Flex 应用程序会向控制台输出一些一般性错误,但这些错误并没有多大帮助(TypeError:错误#1034:类型强制失败:无法将 Object@5d1d809 转换为 valueObjects.SomeClass。)。
我对整个 AMF / Flex + Java 很陌生,所以任何提示将不胜感激。
解决方案
这是我在使用 BlazeDS、AMF 等时使用的两个工具:
- 使用HTTP代理工具 显示客户端和服务器之间的调用,例如 查尔斯
Charles是HTTP代理 / HTTP监视器 /反向代理,使开发人员可以在其机器和Internet之间查看所有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"
>
其他提示
检查服务客户端 AMF 消息之间通信的最简单方法是使用 FireFox,安装 火虫 扩展名并添加 AMF 浏览器. 。您可以看到结构化的请求和响应。
这是在客户端侧被反序列的Java类必须具有在应用程序(MXML或AS3)对应的AS3类的一个对象的引用。否则,AS3类将不会在SWF文件中加载,并且将导致在反序列化Java类的通用AS3对象。
更新这将发生尽管具有映射,getter和setter。只是声明相应的AS3类的对象在MXML的脚本部分。
我使用Flex生成器,并将它设置为客户端和服务器端调试。这是一个痛苦的率先成立,但你可以谷歌一步一步的教程。我觉得对调试的RPC相当有价值的。上次我检查,Flex Builder中有一个免费试用,免费向学生和失业者。
这也是值得注意的在Java中该仪器也可以导致信息丢失和/或与序列化过程和流干扰。
我已经经历过这种TypeError: Error #1034: Type Coercion failed
一个项目(Flex的< - > BlazeDS的+春),其中我们的数据访问层用iBatis的实施,并延迟加载接通 - 我们把它关掉为代表的指标较小损失效率的(理论上,至少),相比于其它的变通方法,我们有在适当位置。