You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by at...@apache.org on 2015/02/12 00:49:36 UTC
svn commit: r1659109 - in /commons/proper/scxml/trunk/src:
main/java/org/apache/commons/scxml2/ main/java/org/apache/commons/scxml2/env/
main/java/org/apache/commons/scxml2/invoke/
main/java/org/apache/commons/scxml2/model/ main/java/org/apache/commons...
Author: ate
Date: Wed Feb 11 23:49:35 2015
New Revision: 1659109
URL: http://svn.apache.org/r1659109
Log:
SCXML-226: Support of special send targets #_parent and #_invokeid
- partly based upon a patch contributed by Michael Goerlich
Removed:
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/InvokerManager.java
Modified:
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLIOProcessor.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/Invoker.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Invoke.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Send.java
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java Wed Feb 11 23:49:35 2015
@@ -29,6 +29,7 @@ import org.apache.commons.scxml2.env.Sim
import org.apache.commons.scxml2.env.SimpleErrorReporter;
import org.apache.commons.scxml2.invoke.Invoker;
import org.apache.commons.scxml2.invoke.InvokerException;
+import org.apache.commons.scxml2.invoke.SimpleSCXMLInvoker;
import org.apache.commons.scxml2.model.Invoke;
import org.apache.commons.scxml2.model.ModelException;
import org.apache.commons.scxml2.model.SCXML;
@@ -37,7 +38,16 @@ import org.apache.commons.scxml2.model.S
* SCXMLExecutionContext provides all the services and internal data used during the interpretation of an SCXML
* statemachine across micro and macro steps
*/
-public class SCXMLExecutionContext implements SCXMLIOProcessor, InvokerManager {
+public class SCXMLExecutionContext implements SCXMLIOProcessor {
+
+ /**
+ * Default and required supported SCXML Processor Invoker service URI
+ */
+ public static final String SCXML_INVOKER_TYPE_URI = "http://www.w3.org/TR/scxml/";
+ /**
+ * Alias for {@link #SCXML_INVOKER_TYPE_URI}
+ */
+ public static final String SCXML_INVOKER_TYPE = "scxml";
/**
* SCXML Execution Logger for the application.
@@ -50,6 +60,11 @@ public class SCXMLExecutionContext imple
private final ActionExecutionContext actionExecutionContext;
/**
+ * The SCXMLExecutor of this SCXMLExecutionContext
+ */
+ private final SCXMLExecutor scxmlExecutor;
+
+ /**
* The SCInstance.
*/
private SCInstance scInstance;
@@ -112,14 +127,15 @@ public class SCXMLExecutionContext imple
/**
* Constructor
*
- * @param externalIOProcessor The external IO Processor
+ * @param scxmlExecutor The SCXMLExecutor of this SCXMLExecutionContext
* @param evaluator The evaluator
* @param eventDispatcher The event dispatcher, if null a SimpleDispatcher instance will be used
* @param errorReporter The error reporter, if null a SimpleErrorReporter instance will be used
*/
- protected SCXMLExecutionContext(SCXMLIOProcessor externalIOProcessor, Evaluator evaluator,
+ protected SCXMLExecutionContext(SCXMLExecutor scxmlExecutor, Evaluator evaluator,
EventDispatcher eventDispatcher, ErrorReporter errorReporter) {
- this.externalIOProcessor = externalIOProcessor;
+ this.scxmlExecutor = scxmlExecutor;
+ this.externalIOProcessor = scxmlExecutor;
this.evaluator = evaluator;
this.eventdispatcher = eventDispatcher != null ? eventDispatcher : new SimpleDispatcher();
this.errorReporter = errorReporter != null ? errorReporter : new SimpleErrorReporter();
@@ -131,7 +147,16 @@ public class SCXMLExecutionContext imple
ioProcessors.put(SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR, getExternalIOProcessor());
ioProcessors.put(SCXMLIOProcessor.SCXML_EVENT_PROCESSOR, getExternalIOProcessor());
ioProcessors.put(SCXMLIOProcessor.INTERNAL_EVENT_PROCESSOR, getInternalIOProcessor());
+ if (scxmlExecutor.getParentSCXMLExecutor() != null) {
+ ioProcessors.put(SCXMLIOProcessor.PARENT_EVENT_PROCESSOR, scxmlExecutor.getParentSCXMLExecutor());
+ }
initializeIOProcessors();
+ registerInvokerClass(SCXML_INVOKER_TYPE_URI, SimpleSCXMLInvoker.class);
+ registerInvokerClass(SCXML_INVOKER_TYPE, SimpleSCXMLInvoker.class);
+ }
+
+ public SCXMLExecutor getSCXMLExecutor() {
+ return scxmlExecutor;
}
public SCXMLIOProcessor getExternalIOProcessor() {
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java Wed Feb 11 23:49:35 2015
@@ -52,6 +52,11 @@ public class SCXMLExecutor implements SC
private Log log = LogFactory.getLog(SCXMLExecutor.class);
/**
+ * Parent SCXMLExecutor
+ */
+ private SCXMLExecutor parentSCXMLExecutor;
+
+ /**
* Interpretation semantics.
*/
private SCXMLSemantics semantics;
@@ -101,6 +106,25 @@ public class SCXMLExecutor implements SC
}
/**
+ * Constructor using a parent SCXMLExecutor
+ *
+ * @param parentSCXMLExecutor the parent SCXMLExecutor
+ */
+ public SCXMLExecutor(final SCXMLExecutor parentSCXMLExecutor) {
+ this.parentSCXMLExecutor = parentSCXMLExecutor;
+ this.semantics = parentSCXMLExecutor.semantics;
+ this.exctx = new SCXMLExecutionContext(this, parentSCXMLExecutor.getEvaluator(),
+ parentSCXMLExecutor.getEventdispatcher(), parentSCXMLExecutor.getErrorReporter());
+ }
+
+ /**
+ * @return the parent SCXMLExecutor (if any)
+ */
+ protected SCXMLExecutor getParentSCXMLExecutor() {
+ return parentSCXMLExecutor;
+ }
+
+ /**
* Get the current state machine instance status.
*
* @return The current Status
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLIOProcessor.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLIOProcessor.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLIOProcessor.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLIOProcessor.java Wed Feb 11 23:49:35 2015
@@ -38,6 +38,11 @@ public interface SCXMLIOProcessor {
String INTERNAL_EVENT_PROCESSOR = "#_internal";
/**
+ * The name of the parent Event Processor
+ */
+ String PARENT_EVENT_PROCESSOR = "#_parent";
+
+ /**
* Send an event into the SCXML processor queue
* <p>
* @param event the event to send
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java Wed Feb 11 23:49:35 2015
@@ -189,6 +189,10 @@ public class SimpleDispatcher implements
if (target == null) {
ioProcessor = ioProcessors.get(SCXMLIOProcessor.SCXML_EVENT_PROCESSOR);
}
+ else if (ioProcessors.containsKey(target)) {
+ ioProcessor = ioProcessors.get(target);
+ internal = SCXMLIOProcessor.INTERNAL_EVENT_PROCESSOR.equals(target);
+ }
else if (SCXMLIOProcessor.INTERNAL_EVENT_PROCESSOR.equals(target)) {
ioProcessor = ioProcessors.get(SCXMLIOProcessor.INTERNAL_EVENT_PROCESSOR);
internal = true;
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/Invoker.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/Invoker.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/Invoker.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/Invoker.java Wed Feb 11 23:49:35 2015
@@ -18,8 +18,7 @@ package org.apache.commons.scxml2.invoke
import java.util.Map;
-import org.apache.commons.scxml2.Evaluator;
-import org.apache.commons.scxml2.SCXMLIOProcessor;
+import org.apache.commons.scxml2.SCXMLExecutor;
import org.apache.commons.scxml2.TriggerEvent;
/**
@@ -51,7 +50,7 @@ import org.apache.commons.scxml2.Trigger
* <li>Instantiation via {@link Class#newInstance()}
* (Invoker implementation requires accessible constructor).</li>
* <li>Configuration (setters for invoke ID and
- * {@link org.apache.commons.scxml2.SCXMLIOProcessor}).</li>
+ * {@link org.apache.commons.scxml2.SCXMLExecutor}).</li>
* <li>Initiation of invoked activity via invoke() method, passing
* the source URI and the map of params.</li>
* <li>Zero or more bi-directional event triggering.</li>
@@ -83,18 +82,10 @@ public interface Invoker {
void setInvokeId(String invokeId);
/**
- * Set I/O Processor of the parent state machine, which provides the
- * channel.
- *
- * @param parentIOProcessor The I/O Processor of the parent state machine.
- */
- void setParentIOProcessor(SCXMLIOProcessor parentIOProcessor);
-
- /**
- * Set the Evaluator to be used by the child state machine (to ensure/enforce a compatible data model)
- * @param evaluator the Evaluator to be used
+ * Sets the parent SCXMLExecutor through which this Invoker is initiated
+ * @param scxmlExecutor the parent SCXMLExecutor
*/
- void setEvaluator(Evaluator evaluator);
+ void setParentSCXMLExecutor(SCXMLExecutor scxmlExecutor);
/**
* Begin this invocation.
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java Wed Feb 11 23:49:35 2015
@@ -24,12 +24,8 @@ import java.util.Map;
import javax.xml.stream.XMLStreamException;
import org.apache.commons.scxml2.Context;
-import org.apache.commons.scxml2.Evaluator;
import org.apache.commons.scxml2.SCXMLExecutor;
-import org.apache.commons.scxml2.SCXMLIOProcessor;
import org.apache.commons.scxml2.TriggerEvent;
-import org.apache.commons.scxml2.env.SimpleDispatcher;
-import org.apache.commons.scxml2.env.SimpleErrorReporter;
import org.apache.commons.scxml2.env.SimpleSCXMLListener;
import org.apache.commons.scxml2.io.SCXMLReader;
import org.apache.commons.scxml2.model.ModelException;
@@ -45,10 +41,8 @@ public class SimpleSCXMLInvoker implemen
private static final long serialVersionUID = 1L;
/** Parent state ID. */
private String parentStateId;
- /** Invoking document's external I/O Processor */
- private SCXMLIOProcessor parentIOProcessor;
- /** The Evaluator provided by the parent executor */
- private Evaluator evaluator;
+ /** Invoking parent SCXMLExecutor */
+ private SCXMLExecutor parentSCXMLExecutor;
/** The invoked state machine executor. */
private SCXMLExecutor executor;
/** Cancellation status. */
@@ -73,15 +67,8 @@ public class SimpleSCXMLInvoker implemen
/**
* {@inheritDoc}.
*/
- public void setParentIOProcessor(SCXMLIOProcessor parentIOProcessor) {
- this.parentIOProcessor = parentIOProcessor;
- }
-
- /**
- * {@inheritDoc}.
- */
- public void setEvaluator(final Evaluator evaluator) {
- this.evaluator = evaluator;
+ public void setParentSCXMLExecutor(SCXMLExecutor parentSCXMLExecutor) {
+ this.parentSCXMLExecutor = parentSCXMLExecutor;
}
/**
@@ -99,20 +86,18 @@ public class SimpleSCXMLInvoker implemen
} catch (XMLStreamException xse) {
throw new InvokerException(xse.getMessage(), xse.getCause());
}
- executor = new SCXMLExecutor(evaluator, new SimpleDispatcher(), new SimpleErrorReporter());
- Context rootCtx = evaluator.newContext(null);
- for (Map.Entry<String, Object> entry : params.entrySet()) {
- rootCtx.setLocal(entry.getKey(), entry.getValue());
- }
- executor.setRootContext(rootCtx);
+ executor = new SCXMLExecutor(parentSCXMLExecutor);
try {
executor.setStateMachine(scxml);
}
catch (ModelException me) {
throw new InvokerException(me);
}
+ Context rootCtx = executor.getRootContext();
+ for (Map.Entry<String, Object> entry : params.entrySet()) {
+ rootCtx.setLocal(entry.getKey(), entry.getValue());
+ }
executor.addListener(scxml, new SimpleSCXMLListener());
- executor.registerInvokerClass("scxml", this.getClass());
try {
executor.go();
} catch (ModelException me) {
@@ -120,7 +105,7 @@ public class SimpleSCXMLInvoker implemen
}
if (executor.getStatus().isFinal()) {
TriggerEvent te = new TriggerEvent("done.invoke."+parentStateId, TriggerEvent.SIGNAL_EVENT);
- new AsyncTrigger(parentIOProcessor, te).start();
+ new AsyncTrigger(parentSCXMLExecutor, te).start();
}
}
@@ -136,7 +121,7 @@ public class SimpleSCXMLInvoker implemen
executor.addEvent(evt);
if (!doneBefore && executor.getStatus().isFinal()) {
TriggerEvent te = new TriggerEvent("done.invoke."+parentStateId,TriggerEvent.SIGNAL_EVENT);
- new AsyncTrigger(parentIOProcessor, te).start();
+ new AsyncTrigger(parentSCXMLExecutor, te).start();
}
}
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Invoke.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Invoke.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Invoke.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Invoke.java Wed Feb 11 23:49:35 2015
@@ -22,10 +22,9 @@ import java.util.Map;
import org.apache.commons.scxml2.ActionExecutionContext;
import org.apache.commons.scxml2.Context;
import org.apache.commons.scxml2.Evaluator;
-import org.apache.commons.scxml2.InvokerManager;
import org.apache.commons.scxml2.PathResolver;
+import org.apache.commons.scxml2.SCXMLExecutionContext;
import org.apache.commons.scxml2.SCXMLExpressionException;
-import org.apache.commons.scxml2.SCXMLIOProcessor;
import org.apache.commons.scxml2.SCXMLSystemContext;
import org.apache.commons.scxml2.TriggerEvent;
import org.apache.commons.scxml2.invoke.Invoker;
@@ -46,14 +45,9 @@ public class Invoke extends NamelistHold
private static final long serialVersionUID = 1L;
/**
- * The default context variable key under which the InvokerManager is provided
+ * The default context variable key under which the current SCXMLExecutionContext is provided
*/
- private static final String INVOKER_MANAGER_KEY = "_INVOKER_MANAGER";
-
- /**
- * The default target type.
- */
- private static final String TYPE_SCXML = "scxml";
+ private static final String CURRENT_EXECUTION_CONTEXT_KEY = "_CURRENT_EXECUTION_CONTEXT";
/**
* Identifier for this Invoke.
@@ -300,10 +294,10 @@ public class Invoke extends NamelistHold
}
/**
- * @return The local context variable name under which the InvokerManager is provided to the Invoke
+ * @return The local context variable name under which the current SCXMLExecutionContext is provided to the Invoke
*/
- public String getInvokerManagerKey() {
- return INVOKER_MANAGER_KEY;
+ public String getCurrentSCXMLExecutionContextKey() {
+ return CURRENT_EXECUTION_CONTEXT_KEY;
}
/**
@@ -337,16 +331,16 @@ public class Invoke extends NamelistHold
@SuppressWarnings("unchecked")
@Override
- public void execute(final ActionExecutionContext exctx) throws ModelException {
+ public void execute(final ActionExecutionContext axctx) throws ModelException {
EnterableState parentState = getParentEnterableState();
- Context ctx = exctx.getContext(parentState);
- InvokerManager invokerManager = (InvokerManager)ctx.getVars().get(getInvokerManagerKey());
- if (invokerManager == null) {
- throw new ModelException("Missing InvokerManager instance in context under key: "+getInvokerManagerKey());
+ Context ctx = axctx.getContext(parentState);
+ SCXMLExecutionContext exctx = (SCXMLExecutionContext)ctx.getVars().get(getCurrentSCXMLExecutionContextKey());
+ if (exctx == null) {
+ throw new ModelException("Missing current SCXMLExecutionContext instance in context under key: "+ getCurrentSCXMLExecutionContextKey());
}
try {
ctx.setLocal(getNamespacesKey(), getNamespaces());
- Evaluator eval = exctx.getEvaluator();
+ Evaluator eval = axctx.getEvaluator();
String typeValue = type;
if (typeValue == null && typeexpr != null) {
@@ -357,9 +351,9 @@ public class Invoke extends NamelistHold
}
}
if (typeValue == null) {
- typeValue = TYPE_SCXML;
+ typeValue = SCXMLExecutionContext.SCXML_INVOKER_TYPE;
}
- Invoker invoker = invokerManager.newInvoker(typeValue);
+ Invoker invoker = exctx.newInvoker(typeValue);
String invokeId = getId();
if (invokeId == null) {
@@ -400,25 +394,22 @@ public class Invoke extends NamelistHold
": no src and no content defined");
}
Map<String, Object> payloadDataMap = new HashMap<String, Object>();
- addNamelistDataToPayload(exctx, payloadDataMap);
- addParamsToPayload(exctx, payloadDataMap);
- SCXMLIOProcessor ioProcessor = ((Map<String,SCXMLIOProcessor>)ctx.get(SCXMLSystemContext.IOPROCESSORS_KEY)).
- get(SCXMLIOProcessor.SCXML_EVENT_PROCESSOR);
- invoker.setParentIOProcessor(ioProcessor);
- invoker.setEvaluator(exctx.getEvaluator());
+ addNamelistDataToPayload(axctx, payloadDataMap);
+ addParamsToPayload(axctx, payloadDataMap);
+ invoker.setParentSCXMLExecutor(exctx.getSCXMLExecutor());
if (src != null) {
invoker.invoke(src, payloadDataMap);
}
// TODO: } else { invoker.invoke(srcNode, payloadDataMap); }
- invokerManager.registerInvoker(this, invoker);
+ exctx.registerInvoker(this, invoker);
}
catch (InvokerException e) {
- exctx.getErrorReporter().onError(ErrorConstants.EXECUTION_ERROR, e.getMessage(), this);
- exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
+ axctx.getErrorReporter().onError(ErrorConstants.EXECUTION_ERROR, e.getMessage(), this);
+ axctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
}
catch (SCXMLExpressionException e) {
- exctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
- exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), this);
+ axctx.getInternalIOProcessor().addEvent(new TriggerEvent(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT));
+ axctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), this);
}
finally {
ctx.setLocal(getNamespacesKey(), null);
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Send.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Send.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Send.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/model/Send.java Wed Feb 11 23:49:35 2015
@@ -40,11 +40,6 @@ public class Send extends NamelistHolder
private static final long serialVersionUID = 1L;
/**
- * The default target type.
- */
- private static final String TYPE_SCXML = "scxml";
-
- /**
* The suffix in the delay string for milliseconds.
*/
private static final String MILLIS = "ms";
@@ -386,9 +381,9 @@ public class Send extends NamelistHolder
}
if (typeValue == null) {
// must default to 'scxml' when unspecified
- typeValue = TYPE_SCXML;
- } else if (!TYPE_SCXML.equals(typeValue) && typeValue.trim().equalsIgnoreCase(TYPE_SCXML)) {
- typeValue = TYPE_SCXML;
+ typeValue = SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR;
+ } else if (!SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR.equals(typeValue) && typeValue.trim().equalsIgnoreCase(SCXMLIOProcessor.SCXML_EVENT_PROCESSOR)) {
+ typeValue = SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR;
}
Object payload = null;
Map<String, Object> payloadDataMap = new HashMap<String, Object>();
@@ -418,9 +413,9 @@ public class Send extends NamelistHolder
String eventValue = event;
if (eventValue == null && eventexpr != null) {
eventValue = (String) getTextContentIfNodeResult(eval.eval(ctx, eventexpr));
- if ((eventValue == null || eventValue.trim().length() == 0) && exctx.getAppLog().isWarnEnabled()) {
+ if ((eventValue == null)) {
throw new SCXMLExpressionException("<send>: event expression \"" + eventexpr
- + "\" evaluated to null or empty String");
+ + "\" evaluated to null");
}
}
Map<String, SCXMLIOProcessor> ioProcessors = (Map<String, SCXMLIOProcessor>) ctx.get(SCXMLSystemContext.IOPROCESSORS_KEY);
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java Wed Feb 11 23:49:35 2015
@@ -1054,10 +1054,10 @@ public class SCXMLSemanticsImpl implemen
for (TransitionalState ts : statesToInvoke) {
for (Invoke invoke : ts.getInvokes()) {
Context ctx = aexctx.getContext(invoke.getParentEnterableState());
- String invokerManagerKey = invoke.getInvokerManagerKey();
- ctx.setLocal(invokerManagerKey, exctx);
+ String exctxKey = invoke.getCurrentSCXMLExecutionContextKey();
+ ctx.setLocal(exctxKey, exctx);
invoke.execute(aexctx);
- ctx.setLocal(invokerManagerKey, null);
+ ctx.setLocal(exctxKey, null);
}
}
}
Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java (original)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java Wed Feb 11 23:49:35 2015
@@ -18,9 +18,7 @@ package org.apache.commons.scxml2.invoke
import java.util.Map;
-import org.apache.commons.scxml2.Evaluator;
import org.apache.commons.scxml2.SCXMLExecutor;
-import org.apache.commons.scxml2.SCXMLIOProcessor;
import org.apache.commons.scxml2.SCXMLTestHelper;
import org.apache.commons.scxml2.TriggerEvent;
import org.apache.commons.scxml2.model.ModelException;
@@ -114,13 +112,9 @@ public class InvokeParamNameTest {
this.invokeId = invokeId;
}
- public void setEvaluator(Evaluator evaluator) {
+ public void setParentSCXMLExecutor(SCXMLExecutor parentSCXMLExecutor) {
// Not needed
}
-
- public void setParentIOProcessor(SCXMLIOProcessor parentIOProcessor) {
- // Not needed
- }
}
}
Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java (original)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java Wed Feb 11 23:49:35 2015
@@ -40,8 +40,10 @@ import javax.xml.transform.stream.Stream
import javax.xml.transform.stream.StreamSource;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.scxml2.PathResolver;
import org.apache.commons.scxml2.SCXMLExecutor;
import org.apache.commons.scxml2.env.Tracer;
+import org.apache.commons.scxml2.env.URLResolver;
import org.apache.commons.scxml2.invoke.SimpleSCXMLInvoker;
import org.apache.commons.scxml2.io.SCXMLReader;
import org.apache.commons.scxml2.model.Final;
@@ -721,7 +723,9 @@ public class W3CTests {
try {
System.out.println("Executing test: "+scxmlFile.getParentFile().getName()+"/"+scxmlFile.getName());
final Tracer trc = new Tracer();
- final SCXML doc = SCXMLReader.read(new FileReader(scxmlFile));
+ final PathResolver pathResolver = new URLResolver(scxmlFile.getParentFile().toURI().toURL());
+ final SCXMLReader.Configuration configuration = new SCXMLReader.Configuration(null, pathResolver);
+ final SCXML doc = SCXMLReader.read(new FileReader(scxmlFile), configuration);
if (doc == null) {
System.out.println(" FAIL: the SCXML file " +
scxmlFile.getCanonicalPath() + " can not be parsed!");
Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml?rev=1659109&r1=1659108&r2=1659109&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml (original)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml Wed Feb 11 23:49:35 2015
@@ -51,7 +51,7 @@
<test id="525" mandatory="true" manual="false" enabled="false" ecma="fail" xpath="pass"/>
<test id="158" mandatory="true" manual="false" enabled="true" ecma="pass" xpath="pass"/>
<test id="159" mandatory="true" manual="false" enabled="false" ecma="fail" xpath="fail"/>
- <test id="276" mandatory="true" manual="false" enabled="false" ecma="" xpath="">Fails to complete</test>
+ <test id="276" mandatory="true" manual="false" enabled="true" ecma="pass" xpath="fail"/>
<test id="277" mandatory="true" manual="false" enabled="false" ecma="fail" xpath="fail"/>
<test id="279" mandatory="true" manual="false" enabled="false" ecma="fail" xpath="fail"/>
<test id="280" mandatory="true" manual="false" enabled="false" ecma="pass" xpath="fail"/>