1

我已经构建了一个简单的 flex 应用程序(使用 BlazeDS),它通过使用 flex 远程处理调用 java 服务来显示“Person”详细信息。所以,我的 Person 类看起来像这样:

class Person {
public int age;
public String name;
}

作为一名 java 开发人员,我的理解是:当我在我的 webapp 中运行前端 flex 应用程序时,会执行一个 RPC 调用,并且 BlazeDS 会努力调用正确的方法,将结果作为对象获取,将对象转换为 AMF格式(序列化)。然后,web/app 服务器通过 http 将此响应发送回请求应用程序。flex 应用程序现在执行反序列化以 AMF 格式接收的对象并以某种方式使用它的任务。

这是我的问题:我想在响应到达 Flex 应用程序之前通过修改 person 对象的属性来修改它。我有一个过滤器来执行此操作。但是,我不确定如何反序列化 AMF 流、修改对象、将对象序列化回流/以某种方式重建流。

有没有办法做到这一点?我应该从哪里开始?

PS 如果问题太令人困惑,这里有一个较短的版本:如何修改内容类型 AMF-X 的响应流,在它到达使用 java 过滤器的 flex 应用程序之前?

4

3 回答 3

1

自己序列化和反序列化 AMF 并不容易,所以一定要避免。更好的方法是在后端代码中将数据转换为正确的格式。从 Flex 调用后端的服务方法,然后获取数据并将其转换为正确的对象结构,然后再将其发送回 Flex。

于 2009-12-02T12:29:17.267 回答
0

为了进一步 James 的回答,请使用 spring 之类的东西来拦截调用的返回并在那里干扰它(同样,在它被序列化之前)。

您基本上必须重新实现(de)序列化过程,这并不简单。

于 2009-12-02T13:44:14.560 回答
0

好吧,这并不完全是您想要的,但如果您只需要在测试时偶尔更改某些内容,那么有一个解决方案。Charles Proxy ( http://www.charlesproxy.com/ ) 允许您“手动”修改返回数据。这是我每天用来监控 AMF 流量的工具,因为它在反序列化和显示人类可读格式方面做得很好。有一个免费版本你可以试试。

关于如何编辑数据的简短说明:

0)安装Charles(如果你使用的话,包括firefox插件)

1) 从主菜单中选择代理->断点。

2)填写主机(您可以使用通配符来填写 - 例如 mydomain.com* )

3)选中“响应”框

4)调用服务器

5)断点应该在数据返回时触发。现在只需找到“编辑响应”选项卡,选择底部的“AMF”,您就可以编辑任何您想要的内容。

希望这可以帮助

于 2009-12-02T14:16:28.643 回答