我已经构建了一个简单的flex应用程序(使用BlazeDS),它通过使用flex remoting调用java服务来显示“Person”细节。 所以,我的Person类看起来像这样:
class Person {
public int age;
public String name;
}
作为一名java开发人员,我的理解是: 当我在webapp中运行front flex app时,执行RPC调用并且BlazeDS执行调用正确方法的艰苦工作,将结果作为对象获取,将对象转换为AMF格式(序列化)。然后,Web / app服务器通过http将响应发送回请求的应用程序。 flex应用程序现在执行反序列化以AMF格式接收的对象的任务,并以某种方式利用它。
这是我的问题: 我想通过修改person对象的属性来修改响应到达Flex应用程序之前。我有一个过滤器来做到这一点。但是,我不确定如何反序列化AMF流,修改对象,将对象序列化回流/重建流以某种方式。
有没有办法做到这一点?我应该从哪里开始?
PS 如果问题太混乱,这里是一个较短的版本: 在使用java过滤器到达Flex应用程序之前,如何修改内容类型AMF-X的响应流?
答案 0 :(得分:1)
自行序列化和反序列化AMF并不容易,所以绝对要避免这种情况。更好的方法是在后端代码中将数据转换为正确的格式。从Flex中,在后端调用服务方法,然后获取数据并将其转换为正确的对象结构,然后再将其发送回Flex。
答案 1 :(得分:0)
为了进一步回答詹姆斯的回答,请使用类似spring的东西来重新调用回调并在那里干扰它(再次,在它被序列化之前)。
您基本上必须重新实现(反)序列化过程,that's not simple.
答案 2 :(得分:0)
嗯,这不完全是你想要的,但如果你只需要在测试时偶尔改变一些东西,那就是解决方案。 Charles Proxy(http://www.charlesproxy.com/)允许您“手动”修改返回数据。它是我每天用于监控AMF流量的工具,因为它可以很好地反序列化它,并显示它是人类可读的格式。你可以试试免费版。
关于如何编辑数据的简短说明:
0)安装Charles(如果你使用它,包括firefox插件
1)从主菜单中选择代理 - >断点。
2)填写主持人(你可以使用通配符 - 例如.mydomain.com *)
3)选中“响应”框
4)致电服务器
5)数据恢复时应该触发断点。现在只需找到“编辑响应”选项卡,选择底部的“AMF”,即可编辑任何内容。
希望这有帮助