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]