【问题标题】:Flex: Configure AMF serialization warnings?Flex:配置 AMF 序列化警告?
【发布时间】:2010-04-09 14:35:45
【问题描述】:

我一直在尝试测试我的应用程序,以确保所有重要的类都可以正确地序列化/重新加载自己(尤其是那些实现 IExternalizable 的类):

[Test]
public function testMyObjectSerialization():void {
    var myobj:MyObject = new MyObject();
    var ba:ByteArray = new ByteArray();
    ba.writeObject(myobj);
    ba.position = 0;
    var loadedObj:MyObject = ba.readObject();
    assertMyObjectEqual(myobj, loadedObj);
}

当我尝试序列化一个没有[RemoteClass] 集的强类型对象时,我想收到警告(因为这几乎肯定代表我的代码中的一个错误)。

那么,有什么方法可以配置 AMF 序列化器发出警告?

另外,使用services-config.xml 似乎可能可能...但是文档似乎暗示services-config 是通道级别的,如果我的单元测试我真的很喜欢可以在不与服务器通信的情况下运行(而且我没有使用 LCDS,所以一堆services-config 无论如何都不适用于我)。

【问题讨论】:

  • 您希望警告出现在编译时还是运行时?
  • 我看不出它们怎么可能出现在编译时...例如,如果我有 class Foo { var bars:Array = [ new Bar(), new Baz() ] },编译器就不可能知道 A) 我想要序列化 ​​bars 和 B) bars 包含 Baz
  • 所以,是的 - 我希望它们出现在运行时。

标签: apache-flex serialization amf


【解决方案1】:

如果设置了 [RemoteClass] 或任何其他元数据,则无法从 Flash Player 配置本机 AMF 序列化/反序列化以向您发出警告。

但是您可以编写自己的类来执行此操作 - 您可以在列表中注册所有对象并使用 flash.utils.describeType 检查 [Remote]。或者在 writeObject 上使用一个包装器来检查 [Remote] 元数据。

【讨论】:

  • 不幸的是,这对于实现IExternalizable 的类不起作用,因为无法知道它们将向输出流写入什么。当然,我可以创建一个 ByteArray 的子类,它会监视 everything 被写入它……但这似乎相当痛苦:(
  • 另外,您是否有“无法配置本机 AMF 序列化/反序列化”的参考?因为它似乎像,如果我使用services-config.xml 和 LCDS 服务器,那么就有可能……
  • 我没有公开参考资料,我只是问了我办公桌附近的一位 FP 工程师。在服务器端,情况就不同了。你可以自定义很多东西,而且代码是开源的。
  • 啊,好的 :) 这比我得到的要好得多。谢谢。
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
相关资源
最近更新 更多