Adobe Air で XML ログ ファイルを作成する必要があります。私が最初に考えたのは、ある種の自動シリアル化を使用することでした。そして、FlexXB ライブラリを見つけました。単純なロガーを作成し、次の方法でクラスに注釈を付けました
package loggingTools
{
[XmlClass]
[ConstructorArg(reference="timeStamp")]
[ConstructorArg(reference="item")]
[ConstructorArg(reference="action")]
[ConstructorArg(reference="arguments")]
[ConstructorArg(reference="success")]
[Bindable]
public class MessageAction
{
[XmlAttribute()]
public var timeStamp:Date;
[XmlAttribute()]
public var item:String;
[XmlAttribute()]
public var action:String;
[XmlAttribute()]
public var arguments:String;
[XmlAttribute()]
public var success:Boolean;
public function MessageAction(timeStamp:Date, item:String, action:String, arguments:String, success:Boolean) {
this.timeStamp = timeStamp;
this.item = item;
this.action = action;
this.arguments = arguments;
this.success = success;
}
}
単一のオブジェクトをシリアル化しようとしています:
public class PlainXMLLogger
{
//private static var isStarted:Boolean;
private var logFile:XML;
[XmlArray(alias = "Log", type="loggingTools.MessageAction")]
[ArrayElementType("loggingTools.MessageAction")]
public var messages:Array;
public function addMessageAction(item:String, action:String, arguments:String, success:Boolean):void {
var newMessageAction:MessageAction;
newMessageAction = new MessageAction(new Date(), item, action, arguments, success);
messages.push(newMessageAction);
}
public function close():void {
var logXML:XML = FlexXBEngine.instance.serialize(messages);
trace(">> XML LOG ");
trace(logXML.toString() );
}
}
現在、シリアライゼーションはエラーを生成します: TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。com.googlecode.flexxb.core::SerializationCore/serialize() で
確かに、コレクション内のすべてのオブジェクトを 1 つずつシリアル化できますが、これは悪い考えだと思います。