Flex: настроить предупреждения сериализации AMF?

Я пытался протестировать свое приложение, чтобы убедиться, что все важные классы могут правильно сериализовать / перезагружать себя (особенно те, которые реализуют 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 ко мне все равно не применимы).


person David Wolever    schedule 09.04.2010    source источник
comment
Вы хотите, чтобы предупреждения появлялись во время компиляции или выполнения?   -  person AaronLS    schedule 12.04.2010
comment
Я не понимаю, как они могут появиться во время компиляции ... Например, если бы у меня был class Foo { var bars:Array = [ new Bar(), new Baz() ] }, компилятор не мог бы знать A), что я хочу сериализовать bars и B), который bars содержит а Baz.   -  person David Wolever    schedule 12.04.2010
comment
Итак, да - я бы хотел, чтобы они появлялись во время выполнения.   -  person David Wolever    schedule 12.04.2010


Ответы (1)


Невозможно настроить встроенную сериализацию / десериализацию AMF из Flash Player, чтобы выдавать предупреждения, если [RemoteClass] или какие-либо другие метаданные установлены или нет.

Однако вы можете написать свой собственный класс для этого - вы можете зарегистрировать все объекты в списке и проверить [Remote] с помощью flash.utils.describeType. Или используйте оболочку над writeObject, которая проверяет метаданные [Remote].

person Cornel Creanga    schedule 12.04.2010
comment
К сожалению, это не сработает для классов, реализующих IExternalizable, потому что нет способа узнать, что они будут писать в выходной поток. Конечно, я мог бы создать подкласс ByteArray, который наблюдает за тем, как все записывается в него ... Но это похоже на изрядную боль :( - person David Wolever; 13.04.2010
comment
Кроме того, у вас есть ссылка на то, что нет возможности настроить собственную сериализацию / десериализацию AMF? Поскольку кажется, что если бы я использовал services-config.xml и сервер LCDS, то это было бы возможно ... - person David Wolever; 13.04.2010
comment
У меня нет публичной ссылки, я просто спросил инженера FP возле моего стола. На стороне сервера это совсем другая история. Вы можете многое настраивать, а код - с открытым исходным кодом. - person Cornel Creanga; 13.04.2010
comment
А, ладно :) Это намного лучше, чем у меня есть. Спасибо. - person David Wolever; 16.04.2010