Some troubles with XML-array

121 views
Skip to first unread message

eugene ledak

unread,
Apr 9, 2012, 11:29:17 AM4/9/12
to fle...@googlegroups.com
Hello, FlexXB Team.

I need to serialize XML-array. And I've got some troubles with it. The array's element is defined as follows

package loggingTools
{
    [XmlClass(alias = "message")]
    [ConstructorArg(reference="timeStamp")]
    [ConstructorArg(reference="item")]
    [ConstructorArg(reference="action")]
    [ConstructorArg(reference="arguments")]
    [ConstructorArg(reference="success")]
    [ConstructorArg(reference="stackTrace")]
    [Bindable]
    public class MessageLog
    {
        [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;
       
        [XmlAttribute()]
        public var stackTrace:String;
       
        public function MessageLog(timeStamp:Date, item:String, action:String, arguments:String, success:Boolean, stackTrace:String) {
            this.timeStamp = timeStamp;
            this.item = item;
            this.action = action;
            this.arguments = arguments;
            this.success = success;
           
        }
       
    }
}

It serializes good and I have no problems, while dealing with a single object. But i need an array. Of course, it's possible to serialize all items one by one in loop, but I dislike this idea. Array's definiton is looking in the following way:

package loggingTools
{
    [XmlClass(alias = "Log")]
    [ConstructorArg(reference="timeStamp")]
    [ConstructorArg(reference="testScenarioName")]
    public class TestCaseLog
    {
        [XmlAttribute()]
        public var timeStamp:Date;
       
        [XmlAttribute()]
        public var testScenarioName:String;
       
        [XmlArray(alias = "Log", type="loggingTools.MessageLog")]
        [ArrayElementType("loggingTools.MessageLog")]
        public var messages:Array;
       
        public function TestCaseLog(timeStamp:Date, testScenarioName:String)
        {
            this.timeStamp = timeStamp;
            this.testScenarioName = testScenarioName;
            messages = new Array();
        }
       
        /**
         * Adds a message to the log
         * @param control -- tested control
         * @param arguments -- action's params (if any)
         * @param stackTrace -- stack trace (if any)
         *
         **/
        public function addMessage(timeStamp:Date, control:String, action:String, arguments:String, success:Boolean, stackTrace:String):void {
            var testMessage:MessageLog = new MessageLog(timeStamp, control, action, arguments, success, stackTrace);
            messages.push(testMessage);
        }
    }
}

And I try to serialize it with the following code:

package loggingTools
{
    import com.googlecode.flexxb.FlexXBEngine;

    //import com.googlecode.flexxb.serializer.BaseSerializer;
   
    public class PlainXMLLogger
    {
        private var logFile:XML;
        public var logData:TestCaseLog;
....
....

        public function close():void {
            // TODO: uncomment
           
            var logXML:XML = FlexXBEngine.instance.serialize(logData.messages);
           
            trace(">> XML LOG ");
            trace(logXML.toString() );
           
                   
        }
}

'serialize()' method raises an exception. 'logData' object is created and isn't null yet. It's 'messages' member contains 70 elements.

The exception's call stack is
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at com.googlecode.flexxb.core::SerializationCore/serialize()
    at FlexXBCore/serialize()
    at com.googlecode.flexxb::FlexXBEngine/serialize()
    at loggingTools::PlainXMLLogger/close()[D:\_Projects\Flex Monkey\Tivios\Repo\trunk\gui_automation\loggingTools\PlainXMLLogger.as:41]
    at smokeTestSuite.testCases::LoggingTestBase/afterTest()[D:\_Projects\Flex Monkey\Tivios\Repo\trunk\gui_automation\smokeTestSuite\testCases\LoggingTestBase.as:140]
    at com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/finishTest()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyCustomTestBase.as:295]
    at com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/failTest()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyCustomTestBase.as:281]
    at com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/checkCommandResult()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyCustomTestBase.as:267]
    at smokeTestSuite.testCases::LoggingTestBase/finishedItemHandler()[D:\_Projects\Flex Monkey\Tivios\Repo\trunk\gui_automation\smokeTestSuite\testCases\LoggingTestBase.as:85]
    at mx.binding.utils::ChangeWatcher/wrapHandler()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\binding\utils\ChangeWatcher.as:560]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at com.gorillalogic.flexmonkey.model::RunnerModel/dispatchEvent()
    at com.gorillalogic.flexmonkey.model::RunnerModel/set finishedItemCount()
    at com.gorillalogic.flexmonkey.model::RunnerModel/itemFinished()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexmonkey/model/RunnerModel.as:70]
    at com.gorillalogic.flexunit::FlexMonkeyFlexUnitListener/testFinished()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyFlexUnitListener.as:86]
    at Function/<anonymous>()[/Users/jonr/projects/flexmonkey/flexunit-latest/flexunit/FlexUnit4/src/org/flexunit/runner/notification/RunNotifier.as:199]
    at SafeNotifier/run()[/Users/jonr/projects/flexmonkey/flexunit-latest/flexunit/FlexUnit4/src/org/flexunit/runner/notification/RunNotifier.as:272]
    at org.flexunit.runner.notification::RunNotifier/fireTestFinished()[/Users/jonr/projects/flexmonkey/flexunit-latest/flexunit/FlexUnit4/src/org/flexunit/runner/notification/RunNotifier.as:202]
    at com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/finishCommand()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyRunnerBaseClass.as:378]
    at com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/verifyReturn()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyRunnerBaseClass.as:324]
    at com.gorillalogic.flexunit::FlexMonkeyNestedRunner/runCommand()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyNestedRunner.as:68]
    at com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/retryCommand()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/FlexMonkeyRunnerBaseClass.as:342]
    at com.gorillalogic.flexunit::RunTimer/timerRunning()[/Users/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/RunTimer.as:48]
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

Could you tell me, how can I solve this problem?

Alexutz

unread,
Apr 9, 2012, 1:49:14 PM4/9/12
to FxWorks
Hello Eugene,

I see that in the close method you have the following line:

var logXML:XML = FlexXBEngine.instance.serialize(logData.messages);

Did you try with serializing the logData itself? I will runt a quick
test with the config you sent and see how it goes.

Alex
> *'serialize()'* method raises an exception. *'logData' *object is created
> and isn't null yet. It's '*messages' *member contains 70 elements.
>
> The exception's call stack is
> TypeError: Error #1009: Cannot access a property or method of a null object
> reference.
>     at com.googlecode.flexxb.core::SerializationCore/serialize()
>     at FlexXBCore/serialize()
>     at com.googlecode.flexxb::FlexXBEngine/serialize()
>     at loggingTools::PlainXMLLogger/close()[D:\_Projects\Flex
> Monkey\Tivios\Repo\trunk\gui_automation\loggingTools\PlainXMLLogger.as:41]
>     at
> smokeTestSuite.testCases::LoggingTestBase/afterTest()[D:\_Projects\Flex
> Monkey\Tivios\Repo\trunk\gui_automation\smokeTestSuite\testCases\LoggingTes­tBase.as:140]
>     at
> com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/finishTest()[/Users/dig­italogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexu­nit/FlexMonkeyCustomTestBase.as:295]
>     at
> com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/failTest()[/Users/digit­alogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexuni­t/FlexMonkeyCustomTestBase.as:281]
>     at
> com.gorillalogic.flexunit::FlexMonkeyCustomTestBase/checkCommandResult()[/U­sers/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalog­ic/flexunit/FlexMonkeyCustomTestBase.as:267]
>     at
> smokeTestSuite.testCases::LoggingTestBase/finishedItemHandler()[D:\_Project­s\Flex
> Monkey\Tivios\Repo\trunk\gui_automation\smokeTestSuite\testCases\LoggingTes­tBase.as:85]
>     at
> mx.binding.utils::ChangeWatcher/wrapHandler()[E:\dev\4.5.1\frameworks\proje­cts\framework\src\mx\binding\utils\ChangeWatcher.as:560]
>     at flash.events::EventDispatcher/dispatchEventFunction()
>     at flash.events::EventDispatcher/dispatchEvent()
>     at com.gorillalogic.flexmonkey.model::RunnerModel/dispatchEvent()
>     at com.gorillalogic.flexmonkey.model::RunnerModel/set
> finishedItemCount()
>     at
> com.gorillalogic.flexmonkey.model::RunnerModel/itemFinished()[/Users/digita­logic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexmonk­ey/model/RunnerModel.as:70]
>     at
> com.gorillalogic.flexunit::FlexMonkeyFlexUnitListener/testFinished()[/Users­/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/f­lexunit/FlexMonkeyFlexUnitListener.as:86]
>     at
> Function/<anonymous>()[/Users/jonr/projects/flexmonkey/flexunit-latest/flex­unit/FlexUnit4/src/org/flexunit/runner/notification/RunNotifier.as:199]
>     at
> SafeNotifier/run()[/Users/jonr/projects/flexmonkey/flexunit-latest/flexunit­/FlexUnit4/src/org/flexunit/runner/notification/RunNotifier.as:272]
>     at
> org.flexunit.runner.notification::RunNotifier/fireTestFinished()[/Users/jon­r/projects/flexmonkey/flexunit-latest/flexunit/FlexUnit4/src/org/flexunit/r­unner/notification/RunNotifier.as:202]
>     at
> com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/finishCommand()[/Users­/digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/f­lexunit/FlexMonkeyRunnerBaseClass.as:378]
>     at
> com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/verifyReturn()[/Users/­digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/fl­exunit/FlexMonkeyRunnerBaseClass.as:324]
>     at
> com.gorillalogic.flexunit::FlexMonkeyNestedRunner/runCommand()[/Users/digit­alogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexuni­t/FlexMonkeyNestedRunner.as:68]
>     at
> com.gorillalogic.flexunit::FlexMonkeyRunnerBaseClass/retryCommand()[/Users/­digitalogic8/Workspaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/fl­exunit/FlexMonkeyRunnerBaseClass.as:342]
>     at
> com.gorillalogic.flexunit::RunTimer/timerRunning()[/Users/digitalogic8/Work­spaces/FlexMonkeyLatest/MonkeyLink/src/com/gorillalogic/flexunit/RunTimer.a­s:48]

eugene ledak

unread,
Apr 10, 2012, 9:17:03 AM4/10/12
to fle...@googlegroups.com
Thank you, your advise was a very helpful. FlexXB created a file, which is looking in the following way:

<Log timeStamp="Tue Apr 10 16:09:37 GMT+0300 2012" testScenarioName="LOC_Locations_CRUD">
  <Log>
    <message item="Pause: 10000" arguments="" timeStamp="Tue Apr 10 16:10:28 GMT+0300 2012" stackTrace="" success="false" action=""/>
    <message item="SelectText: textInputName" arguments="" timeStamp="Tue Apr 10 16:10:28 GMT+0300 2012" stackTrace="" success="false" action=""/>
    ....
  </Log>
</Log>

It's nice. But can you give me a little hint about how to remove this blue tag?

Alexutz

unread,
Apr 10, 2012, 10:10:18 AM4/10/12
to fle...@googlegroups.com
Try setting alias to "*" for the messages array

eugene ledak

unread,
Apr 10, 2012, 10:38:24 AM4/10/12
to fle...@googlegroups.com
Thanks, again :)
Reply all
Reply to author
Forward
0 new messages