Hello,
I'm a perfect newbie to sxcml, so i'm probably asking stupid questions !

I'm trying to get access to the content of a datamodel from within the scxml document and a custom action :
Here is the dummy state machine:

    <scxml xmlns="http://www.w3.org/2005/07/scxml"; version="1.0"
        xmlns:mc="http://com.mccsoft.scxml/action"; initialstate="start">
        <!--  Defining global data  -->
        <datamodel>
            <data name="timeout" expr="1" />
            <data name="counter" expr="1" />
            <data name="poolconfiguration">
                <foo>
                    <dir>toto</dir>
                    <freq>1</freq>
                </foo>
            </data>
        </datamodel>
        <!-- State machine starts here -->
        <state id="start">
            <onentry>
                <log
                    expr="Data(poolconfiguration, 'foo/dir')"
                />
            </onentry>
            <transition target="now_waiting" />
        </state>
        <state id="now_waiting">
            <onentry>
                <log expr="Counter is now counter" />
            </onentry>
            <onentry>
                <mc:wait timeoutName="timeout" conf="poolconfiguration"/>
                <assign name="counter" expr="counter +1" />
                <log
expr="'Timeout is ' + timeout + ' Counter is ' + counter " />
            </onentry>
            <transition target="now_waiting" />
        </state>

    </scxml>

Regarding execution environment everything is copied from samples using Jexl :

            exec = new SCXMLExecutor(new JexlEvaluator(),
                    new SimpleDispatcher(), new SimpleErrorReporter());
            exec.setStateMachine(scxml);
            exec.setRootContext(new JexlContext());

I've got a custom action <mc:wait ...> that get the name of the data entry to inspect... Within the execute of the action i'm trying to do roughly but with java the equivalent of
<log expr="Data(poolconfiguration, 'foo/dir')" />

-->
        scInstance.getEvaluator().eval(
scInstance.getRootContext(), "Data(" + conf + ",'foo/dir')");


My objective is to be able to access sub elements of a defined data (in this case poolconfiguration/foo/dir) of a top level datamodel.
and that either by scxml script or within custom action.

Unfortunately, none of those evaluation is returning the expected "toto".

I got in the log :
1922 [main] DEBUG org.apache.commons.jexl.ExpressionFactory - Parsing expression: _builtin.data(_ALL_NAMESPACES, poolconfiguration, 'foo/dir'); 4500 [main] WARN org.apache.commons.scxml.Builtin - Data(): No nodes matching the XPath expression "foo/dir", returning null

or
126125 [main] DEBUG org.apache.commons.scxml.Builtin - Turning off namespaced XPath evaluation since no namespace information is available for path: foo/dir 126140 [main] WARN org.apache.commons.scxml.Builtin - Data(): No nodes matching the XPath expression "foo/dir", returning null

(for the custom action).

The strange point is that, after debugging this sample, it appeared that the poolconfiguration node is correctly extracted by the Data expression. I mean the datanode found
in the _builtin seems ok (with childs, sieblings...),
but this piece of code  (org.apache.commons.scxml.Builtin.java):
result = XPathAPI.selectNodeList(dataNode, path);
returns an empty list.

It is most obvious (to everybody except me) that i've probably spelled the XPATH in an incorrect way, but i've tried may path without success ( '//dir', '/data/foo/dir', 'data/foo/dir'...)

So any help or idea is welcomed !!!!

By advance thanks.

P. Ravot.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to