<state> can't have <parallel> 
------------------------------

                 Key: SCXML-67
                 URL: https://issues.apache.org/jira/browse/SCXML-67
             Project: Commons SCXML
          Issue Type: Bug
    Affects Versions: 0.7
            Reporter: SeongSoo, Park
            Priority: Critical
             Fix For: 0.8


According to the latest SCXML W/D the <state> can have <parallel> as its child.
But, Commons SCXML 0.7 doesn't  seems to support that. 

The  org.apache.commons.scxml.io.SCXMLParser can't parse this scxml doc. 

<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml"; version="1.0"
  initialstate="microwave"> 
  <state id="microwave">
   <initial>
          <transition  target="parts"/>  
    </initial>
    <parallel id="parts">
      <state id="oven">
          <initial>
               <transition  target="oven2"/>     
          </initial>
             <state id= "oven2">
               <transition event="exit"  target="dest"/>
             </state>
      </state>
      <state id="door">
             <initial>
                   <transition  target="door2"/>         
             </initial>
              <state id= "door2">
         <transition event="e" target="dest"/>
             </state>
      </state>
    </parallel>
  </state>
  <state id= "dest"  final ="true"/>
</scxml>

The SCXML  engine generates the following exception during parsing the scxml 
doc.
Exception in thread "main" java.lang.ClassCastException: 
org.apache.commons.scxml.model.Parallel
        at 
org.apache.commons.scxml.io.ModelUpdater.updateState(ModelUpdater.java:213)
        at 
org.apache.commons.scxml.io.ModelUpdater.updateSCXML(ModelUpdater.java:78)
        at org.apache.commons.scxml.io.SCXMLParser.parse(SCXMLParser.java:268)
        at org.apache.commons.scxml.io.SCXMLParser.parse(SCXMLParser.java:152)
        at 
org.apache.commons.scxml.test.StandaloneUtils.execute(StandaloneUtils.java:80)
        at 
org.apache.commons.scxml.test.StandaloneJexlExpressions.main(StandaloneJexlExpressions.java:60)

So, I fixed  the 'updateState()' in org.apache.commons.scxml.io.ModelUpdater 
class like this 
(and also org.apache.commons.scxml.io.SCXMLSerializer.serializeState() )
        ..........
        } else {
            Iterator j = c.keySet().iterator();
            /* ---- your code  ----
            while (j.hasNext()) {
                updateState((State) c.get(j.next()), targets);
            }
             */
            /* -------   my fixed code ---------*/
            while (j.hasNext()) {
               TransitionTarget tt = (TransitionTarget) c.get(j.next());
                if (tt instanceof State) {
                   updateState((State) tt, targets);
                } else {
                   updateParallel((Parallel) tt, targets);
               }
           }
          /*  ------------------------------------*/
        }
    } /* end of  'updateState()' */

So, the engine works well. 

I think this is a critical bug. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to