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 2017/12/10 00:44:57 UTC
[1/2] commons-scxml git commit: SCXML-254 replace deprecated
IOUtils.closeQuietly(InputStream) with try-with-resources block
Repository: commons-scxml
Updated Branches:
refs/heads/master 35e75829e -> a61c3c544
SCXML-254 replace deprecated IOUtils.closeQuietly(InputStream) with try-with-resources block
Project: http://git-wip-us.apache.org/repos/asf/commons-scxml/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-scxml/commit/08233bfb
Tree: http://git-wip-us.apache.org/repos/asf/commons-scxml/tree/08233bfb
Diff: http://git-wip-us.apache.org/repos/asf/commons-scxml/diff/08233bfb
Branch: refs/heads/master
Commit: 08233bfb9c8f554fa7b236d3dc7bd622d0ce154e
Parents: 35e7582
Author: Ate Douma <at...@apache.org>
Authored: Sun Dec 10 01:23:36 2017 +0100
Committer: Ate Douma <at...@apache.org>
Committed: Sun Dec 10 01:23:36 2017 +0100
----------------------------------------------------------------------
src/main/java/org/apache/commons/scxml2/io/ContentParser.java | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/08233bfb/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
index eb044eb..e3ae09d 100644
--- a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
+++ b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
@@ -204,14 +204,9 @@ public class ContentParser {
* @throws IOException In case of loading or parsing exceptions
*/
public Object parseResource(final String resourceURL) throws IOException {
- InputStream in = null;
- try {
- in = new URL(resourceURL).openStream();
+ try (InputStream in = new URL(resourceURL).openStream()) {
String content = IOUtils.toString(in, "UTF-8");
return parseContent(content);
}
- finally {
- IOUtils.closeQuietly(in);
- }
}
}
[2/2] commons-scxml git commit: SCXML-258 Add Evaluator strict mode
(boolean) needed for Jexl to properly fail on incorrect expressions
Posted by at...@apache.org.
SCXML-258 Add Evaluator strict mode (boolean) needed for Jexl to properly fail on incorrect expressions
Also removed obsolete Evaluator.AssignType enum and parameters of the #evalAssign method, which no longer
are used/needed since dropping XPath support (SCXML-242)
Project: http://git-wip-us.apache.org/repos/asf/commons-scxml/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-scxml/commit/a61c3c54
Tree: http://git-wip-us.apache.org/repos/asf/commons-scxml/tree/a61c3c54
Diff: http://git-wip-us.apache.org/repos/asf/commons-scxml/diff/a61c3c54
Branch: refs/heads/master
Commit: a61c3c544a5d116f1a6503af08f010f33ead500b
Parents: 08233bf
Author: Ate Douma <at...@apache.org>
Authored: Sun Dec 10 01:44:50 2017 +0100
Committer: Ate Douma <at...@apache.org>
Committed: Sun Dec 10 01:44:50 2017 +0100
----------------------------------------------------------------------
src/changes/changes.xml | 4 +++
.../org/apache/commons/scxml2/Evaluator.java | 37 ++------------------
.../apache/commons/scxml2/EvaluatorFactory.java | 5 +--
.../commons/scxml2/EvaluatorProvider.java | 19 ++++++++++
.../org/apache/commons/scxml2/SCInstance.java | 20 +++++++++--
.../apache/commons/scxml2/SCXMLExecutor.java | 18 +++++++---
.../scxml2/env/groovy/GroovyEvaluator.java | 24 +++++++++++--
.../scxml2/env/javascript/JSEvaluator.java | 19 ++++++++--
.../commons/scxml2/env/jexl/JexlEvaluator.java | 27 +++++++++-----
.../scxml2/env/minimal/MinimalEvaluator.java | 17 ++++++++-
.../scxml2/invoke/SimpleSCXMLInvoker.java | 2 +-
.../apache/commons/scxml2/io/SCXMLReader.java | 18 ----------
.../apache/commons/scxml2/io/SCXMLWriter.java | 5 ---
.../org/apache/commons/scxml2/model/Assign.java | 28 +--------------
.../org/apache/commons/scxml2/model/Invoke.java | 2 +-
.../org/apache/commons/scxml2/model/Send.java | 3 +-
.../apache/commons/scxml2/model/SendTest.java | 1 +
.../org/apache/commons/scxml2/w3c/W3CTests.java | 1 +
.../org/apache/commons/scxml2/w3c/tests.xml | 10 +++---
19 files changed, 144 insertions(+), 116 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 30111b6..ab95786 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -35,6 +35,10 @@
<release version="2.0" date="In Git master"
description="Latest unreleased code">
+ <action dev="ate" type="update" issue="SCXML-258">
+ [12-10-2017] Add Evaluator strict mode (boolean) needed for Jexl to properly fail on incorrect expressions
+ </action>
+
<action dev="ate" type="update" issue="SCXML-257">
[12-10-2017] <send> delay must support decimal values
</action>
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/Evaluator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/Evaluator.java b/src/main/java/org/apache/commons/scxml2/Evaluator.java
index d6ddd77..15f64ec 100644
--- a/src/main/java/org/apache/commons/scxml2/Evaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/Evaluator.java
@@ -33,38 +33,9 @@ public interface Evaluator {
String DEFAULT_DATA_MODEL = "";
/**
- * The allowable types of <assign/> including and in particular when using XPath
+ * @return indicates if using strict / specification compliant behavior
*/
- enum AssignType {
-
- REPLACE_CHILDREN("replacechildren"),
- FIRST_CHILD("firstchild"),
- LAST_CHILD("lastchild"),
- PREVIOUS_SIBLING("previoussibling"),
- NEXT_SIBLING("nextsibling"),
- REPLACE("replace"),
- DELETE("delete"),
- ADD_ATTRIBUTE("addattribute");
-
- private final String value;
-
- private AssignType(String value) {
- this.value = value;
- }
-
- public String value() {
- return value;
- }
-
- public static AssignType fromValue(String value) {
- for (AssignType type : AssignType.values()) {
- if (type.value().equals(value)) {
- return type;
- }
- }
- return null;
- }
- }
+ boolean isStrict();
/**
* Get the datamodel type supported by this Evaluator
@@ -114,11 +85,9 @@ public interface Evaluator {
* @param ctx variable context
* @param location location expression
* @param data the data to assign.
- * @param type the type of assignment to perform, null assumes {@link AssignType#REPLACE_CHILDREN}
- * @param attr the name of the attribute to add when using type {@link AssignType#ADD_ATTRIBUTE}
* @throws SCXMLExpressionException A malformed expression exception
*/
- void evalAssign(Context ctx, String location, Object data, AssignType type, String attr)
+ void evalAssign(Context ctx, String location, Object data)
throws SCXMLExpressionException;
/**
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
index bb2074b..784affa 100644
--- a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
+++ b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
@@ -93,16 +93,17 @@ public class EvaluatorFactory {
/**
* Returns a dedicated Evaluator instance for a specific SCXML document its documentmodel.
* <p>If no SCXML document is provided a default Evaluator will be returned.</p>
+ * @param strict flag if an evaluator with strict / specification compliant behavior should be provided
* @param document The document to return a dedicated Evaluator for. May be null to retrieve the default Evaluator.
* @return a new and not sharable Evaluator instance for the provided document, or a default Evaluator otherwise
* @throws ModelException If the SCXML document datamodel is not supported.
*/
- public static Evaluator getEvaluator(SCXML document) throws ModelException {
+ public static Evaluator getEvaluator(final boolean strict, final SCXML document) throws ModelException {
String datamodelName = document != null ? document.getDatamodelName() : null;
EvaluatorProvider provider = INSTANCE.providers.get(datamodelName == null ? DEFAULT_DATA_MODEL : datamodelName);
if (provider == null) {
throw new ModelException("Unsupported SCXML document datamodel \""+(datamodelName)+"\"");
}
- return document != null ? provider.getEvaluator(document) : provider.getEvaluator();
+ return document != null ? provider.getEvaluator(strict, document) : provider.getEvaluator(strict);
}
}
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/EvaluatorProvider.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/EvaluatorProvider.java b/src/main/java/org/apache/commons/scxml2/EvaluatorProvider.java
index b7b7e67..157f65d 100644
--- a/src/main/java/org/apache/commons/scxml2/EvaluatorProvider.java
+++ b/src/main/java/org/apache/commons/scxml2/EvaluatorProvider.java
@@ -34,6 +34,13 @@ public interface EvaluatorProvider {
Evaluator getEvaluator();
/**
+ * @param strict flag if an evaluator with strict / specification compliant behavior should be provided
+ * @return a default or generic {@link Evaluator} supporting the {@link #getSupportedDatamodel()}
+ * with strict / specification compliant behavior, if specified
+ */
+ Evaluator getEvaluator(final boolean strict);
+
+ /**
* Factory method to return a dedicated and optimized {@link Evaluator} instance for a specific SCXML document.
* <p>
* As the returned Evaluator <em>might</em> be optimized and dedicated for the SCXML document instance, the
@@ -43,4 +50,16 @@ public interface EvaluatorProvider {
* @return a new and not sharable Evaluator instance
*/
Evaluator getEvaluator(SCXML document);
+
+ /**
+ * Factory method to return a dedicated and optimized {@link Evaluator} instance for a specific SCXML document.
+ * <p>
+ * As the returned Evaluator <em>might</em> be optimized and dedicated for the SCXML document instance, the
+ * Evaluator may not be shareable and reusable for other SCXML documents.
+ * </p>
+ * @param strict flag if an evaluator with strict / specification compliant behavior should be provided
+ * @param document the SCXML document
+ * @return a new and not sharable Evaluator instance
+ */
+ Evaluator getEvaluator(final boolean strict, final SCXML document);
}
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/SCInstance.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/SCInstance.java b/src/main/java/org/apache/commons/scxml2/SCInstance.java
index 18a9757..299df9c 100644
--- a/src/main/java/org/apache/commons/scxml2/SCInstance.java
+++ b/src/main/java/org/apache/commons/scxml2/SCInstance.java
@@ -128,6 +128,11 @@ public class SCInstance implements Serializable {
private boolean singleContext;
/**
+ * Flag indicating if strict / specification compliant behavior is required
+ */
+ private boolean strict;
+
+ /**
* Constructor
* @param internalIOProcessor The I/O Processor for the internal event queue
* @param evaluator The evaluator
@@ -153,7 +158,7 @@ public class SCInstance implements Serializable {
throw new ModelException(ERR_NO_STATE_MACHINE);
}
if (evaluator == null) {
- evaluator = EvaluatorFactory.getEvaluator(stateMachine);
+ evaluator = EvaluatorFactory.getEvaluator(isStrict(), stateMachine);
}
if (evaluator.requiresGlobalContext()) {
singleContext = true;
@@ -188,7 +193,7 @@ public class SCInstance implements Serializable {
}
}
}
- if (stateMachine.isLateBinding() == null || Boolean.FALSE.equals(stateMachine.isLateBinding())) {
+ if ((stateMachine.isLateBinding() == null && isStrict()) || Boolean.FALSE.equals(stateMachine.isLateBinding())) {
// early binding
for (EnterableState es : stateMachine.getChildren()) {
getContext(es);
@@ -294,6 +299,17 @@ public class SCInstance implements Serializable {
return singleContext;
}
+ public void setStrict(final boolean strict) throws ModelException {
+ if (initialized) {
+ throw new ModelException("SCInstance: already initialized");
+ }
+ this.strict = strict;
+ }
+
+ public boolean isStrict() {
+ return strict;
+ }
+
/**
* Clone data model.
*
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
index 465ff35..d22fe1d 100644
--- a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
+++ b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
@@ -112,11 +112,13 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
*
* @param parentSCXMLExecutor the parent SCXMLExecutor
*/
- public SCXMLExecutor(final SCXMLExecutor parentSCXMLExecutor) {
+ public SCXMLExecutor(final SCXMLExecutor parentSCXMLExecutor) throws ModelException {
this.parentSCXMLExecutor = parentSCXMLExecutor;
this.semantics = parentSCXMLExecutor.semantics;
this.exctx = new SCXMLExecutionContext(this, parentSCXMLExecutor.getEvaluator(),
parentSCXMLExecutor.getEventdispatcher(), parentSCXMLExecutor.getErrorReporter());
+ getSCInstance().setSingleContext(parentSCXMLExecutor.isSingleContext());
+ getSCInstance().setStrict(parentSCXMLExecutor.isStrict());
}
/**
@@ -148,7 +150,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
* @see SCXMLSemantics#isLegalConfiguration(java.util.Set, ErrorReporter)
*/
public synchronized void setConfiguration(Set<String> atomicStateIds) throws ModelException {
- semantics.initialize(exctx, Collections.EMPTY_MAP);
+ semantics.initialize(exctx, Collections.emptyMap());
Set<EnterableState> states = new HashSet<>();
for (String stateId : atomicStateIds) {
TransitionTarget tt = getStateMachine().getTargets().get(stateId);
@@ -241,6 +243,14 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
return getSCInstance().isSingleContext();
}
+ public void setStrict(final boolean strict) throws ModelException {
+ getSCInstance().setStrict(strict);
+ }
+
+ public boolean isStrict() {
+ return getSCInstance().isStrict();
+ }
+
/**
* Get the state machine that is being executed.
* <b>NOTE:</b> This is the state machine definition or model used by this
@@ -409,7 +419,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
}
public void go() throws ModelException {
- go(Collections.EMPTY_MAP);
+ go(Collections.emptyMap());
}
/**
@@ -440,7 +450,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
}
public Thread run() throws ModelException {
- return run(Collections.EMPTY_MAP);
+ return run(Collections.emptyMap());
}
public Thread run(final Map<String, Object> data) throws ModelException {
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
index 4f2a8af..111ce0c 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
@@ -65,9 +65,18 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
}
@Override
+ public Evaluator getEvaluator(final boolean strict) {
+ return new GroovyEvaluator();
+ }
+
+ @Override
public Evaluator getEvaluator(final SCXML document) {
return new GroovyEvaluator();
}
+ @Override
+ public Evaluator getEvaluator(final boolean strict, final SCXML document) {
+ return new GroovyEvaluator();
+ }
}
/** Error message if evaluation context is not a GroovyContext. */
@@ -123,6 +132,11 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
this.scriptCache = newScriptCache();
}
+ @Override
+ public boolean isStrict() {
+ return false;
+ }
+
/**
* Overridable factory method to create the GroovyExtendableScriptCache for this GroovyEvaluator.
* <p>
@@ -227,14 +241,18 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
}
/**
- * @see Evaluator#evalAssign(Context, String, Object, AssignType, String)
+ * @see Evaluator#evalAssign(Context, String, Object)
*/
- public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type,
- final String attr) throws SCXMLExpressionException {
+ public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException {
final StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME);
try {
ctx.getVars().put(ASSIGN_VARIABLE_NAME, data);
eval(ctx, sb.toString());
+ } catch (SCXMLExpressionException e) {
+ if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) {
+ throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage());
+ }
+ throw e;
}
finally {
ctx.getVars().remove(ASSIGN_VARIABLE_NAME);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
index d71933e..6686b19 100644
--- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
@@ -74,9 +74,18 @@ public class JSEvaluator extends AbstractBaseEvaluator {
}
@Override
+ public Evaluator getEvaluator(final boolean strict) {
+ return new JSEvaluator();
+ }
+
+ @Override
public Evaluator getEvaluator(final SCXML document) {
return new JSEvaluator();
}
+ @Override
+ public Evaluator getEvaluator(final boolean strict, final SCXML document) {
+ return new JSEvaluator();
+ }
}
private static final String SCXML_SYSTEM_CONTEXT = "_scxmlSystemContext";
@@ -174,6 +183,11 @@ public class JSEvaluator extends AbstractBaseEvaluator {
}
@Override
+ public boolean isStrict() {
+ return false;
+ }
+
+ @Override
public String getSupportedDatamodel() {
return SUPPORTED_DATA_MODEL;
}
@@ -247,10 +261,9 @@ public class JSEvaluator extends AbstractBaseEvaluator {
}
/**
- * @see Evaluator#evalAssign(Context, String, Object, AssignType, String)
+ * @see Evaluator#evalAssign(Context, String, Object)
*/
- public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type,
- final String attr) throws SCXMLExpressionException {
+ public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException {
StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME);
try {
ctx.getVars().put(ASSIGN_VARIABLE_NAME, data);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
index bf7cbca..139446a 100644
--- a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
@@ -65,9 +65,19 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
}
@Override
+ public Evaluator getEvaluator(final boolean strict) {
+ return new JexlEvaluator(strict);
+ }
+
+ @Override
public Evaluator getEvaluator(final SCXML document) {
return new JexlEvaluator();
}
+
+ @Override
+ public Evaluator getEvaluator(final boolean strict, final SCXML document) {
+ return new JexlEvaluator(strict);
+ }
}
/** Error message if evaluation context is not a JexlContext. */
@@ -86,7 +96,12 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
/** Constructor. */
public JexlEvaluator() {
+ this(false);
+ }
+
+ public JexlEvaluator(final boolean strict) {
super();
+ jexlEngineStrict = strict;
// create the internal JexlEngine initially
jexlEngine = getJexlEngine();
jexlEngineSilent = jexlEngine.isSilent();
@@ -101,11 +116,8 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
return jexlEngineSilent;
}
- /**
- * Checks whether the internal Jexl engine behaves in strict or lenient mode.
- * @return true for strict, false for lenient
- */
- public boolean isJexlEngineStrict() {
+ @Override
+ public boolean isStrict() {
return jexlEngineStrict;
}
@@ -169,10 +181,9 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
}
/**
- * @see Evaluator#evalAssign(Context, String, Object, AssignType, String)
+ * @see Evaluator#evalAssign(Context, String, Object)
*/
- public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type,
- final String attr) throws SCXMLExpressionException {
+ public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException {
StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME);
try {
ctx.getVars().put(ASSIGN_VARIABLE_NAME, data);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
index 0bad641..32a8ed7 100644
--- a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
@@ -51,9 +51,24 @@ public class MinimalEvaluator implements Evaluator, Serializable {
}
@Override
+ public Evaluator getEvaluator(final boolean strict) {
+ return new MinimalEvaluator();
+ }
+
+ @Override
public Evaluator getEvaluator(final SCXML document) {
return new MinimalEvaluator();
}
+
+ @Override
+ public Evaluator getEvaluator(final boolean strict, final SCXML document) {
+ return new MinimalEvaluator();
+ }
+ }
+
+ @Override
+ public boolean isStrict() {
+ return true;
}
@Override
@@ -88,7 +103,7 @@ public class MinimalEvaluator implements Evaluator, Serializable {
}
@Override
- public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type, final String attr) throws SCXMLExpressionException {
+ public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException {
throw new UnsupportedOperationException("Assign expressions are not supported by the \"null\" datamodel");
}
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
index a83420c..44084a3 100644
--- a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
+++ b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
@@ -100,8 +100,8 @@ public class SimpleSCXMLInvoker implements Invoker, Serializable {
} catch (XMLStreamException xse) {
throw new InvokerException(xse.getMessage(), xse.getCause());
}
- executor = new SCXMLExecutor(parentSCXMLExecutor);
try {
+ executor = new SCXMLExecutor(parentSCXMLExecutor);
executor.setStateMachine(scxml);
}
catch (ModelException me) {
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
index f2f4ff5..9f2adfa 100644
--- a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
+++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
@@ -47,7 +47,6 @@ import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.apache.commons.logging.LogFactory;
-import org.apache.commons.scxml2.Evaluator;
import org.apache.commons.scxml2.PathResolver;
import org.apache.commons.scxml2.env.SimpleErrorHandler;
import org.apache.commons.scxml2.env.URLResolver;
@@ -272,7 +271,6 @@ public final class SCXMLReader {
//---- ATTRIBUTE NAMES ----//
private static final String ATTR_ARRAY = "array";
- private static final String ATTR_ATTR = "attr";
private static final String ATTR_AUTOFORWARD = "autoforward";
static final String ATTR_BINDING = "binding";
private static final String ATTR_COND = "cond";
@@ -1767,22 +1765,6 @@ public final class SCXMLReader {
Assign assign = new Assign();
assign.setExpr(readAV(reader, ATTR_EXPR));
assign.setLocation(readRequiredAV(reader, ELEM_ASSIGN, ATTR_LOCATION));
- String attrValue = readAV(reader, ATTR_TYPE);
- if (attrValue != null) {
- assign.setType(Evaluator.AssignType.fromValue(attrValue));
- if (assign.getType() == null) {
- reportIgnoredAttribute(reader, configuration, ELEM_ASSIGN, ATTR_TYPE, attrValue);
- }
- }
- attrValue = readAV(reader, ATTR_ATTR);
- if (attrValue != null) {
- if (Evaluator.AssignType.ADD_ATTRIBUTE.equals(assign.getType())) {
- assign.setAttr(attrValue);
- }
- else {
- reportIgnoredAttribute(reader, configuration, ELEM_ASSIGN, ATTR_ATTR, attrValue);
- }
- }
assign.setSrc(readAV(reader, ATTR_SRC));
assign.setPathResolver(configuration.pathResolver);
readNamespaces(configuration, assign);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
index 11842c6..b9036ad 100644
--- a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
+++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
@@ -157,7 +157,6 @@ public class SCXMLWriter {
//---- ATTRIBUTE NAMES ----//
private static final String ATTR_ARRAY = "array";
- private static final String ATTR_ATTR = "attr";
private static final String ATTR_AUTOFORWARD = "autoforward";
private static final String ATTR_COND = "cond";
private static final String ATTR_DATAMODEL = "datamodel";
@@ -868,10 +867,6 @@ public class SCXMLWriter {
Assign asn = (Assign) a;
writer.writeStartElement(XMLNS_SCXML, ELEM_ASSIGN);
writeAV(writer, ATTR_LOCATION, asn.getLocation());
- if (asn.getType() != null) {
- writeAV(writer, ATTR_TYPE, asn.getType().value());
- }
- writeAV(writer, ATTR_ATTR, asn.getAttr());
writeAV(writer, ATTR_SRC, asn.getSrc());
writeAV(writer, ATTR_EXPR, escapeXML(asn.getExpr()));
writer.writeEndElement();
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/model/Assign.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/model/Assign.java b/src/main/java/org/apache/commons/scxml2/model/Assign.java
index 6d07b3e..6677520 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Assign.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Assign.java
@@ -54,16 +54,6 @@ public class Assign extends Action implements PathResolverHolder {
private String expr;
/**
- * Defines the nature of the insertion to be performed, default {@link Evaluator.AssignType#REPLACE_CHILDREN}
- */
- private Evaluator.AssignType type;
-
- /**
- * The attribute name to add at the specified location when using {@link Evaluator.AssignType#ADD_ATTRIBUTE}
- */
- private String attr;
-
- /**
* {@link PathResolver} for resolving the "src" result.
*/
private PathResolver pathResolver;
@@ -147,22 +137,6 @@ public class Assign extends Action implements PathResolverHolder {
this.pathResolver = pathResolver;
}
- public Evaluator.AssignType getType() {
- return type;
- }
-
- public void setType(final Evaluator.AssignType type) {
- this.type = type;
- }
-
- public String getAttr() {
- return attr;
- }
-
- public void setAttr(final String attr) {
- this.attr = attr;
- }
-
/**
* {@inheritDoc}
*/
@@ -179,7 +153,7 @@ public class Assign extends Action implements PathResolverHolder {
data = evaluator.eval(ctx, expr);
}
- evaluator.evalAssign(ctx, location, data, type, attr);
+ evaluator.evalAssign(ctx, location, data);
if (exctx.getAppLog().isDebugEnabled()) {
exctx.getAppLog().debug("<assign>: '" + location + "' updated");
}
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/model/Invoke.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/model/Invoke.java b/src/main/java/org/apache/commons/scxml2/model/Invoke.java
index 34cc22c..4885cc7 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Invoke.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Invoke.java
@@ -360,7 +360,7 @@ public class Invoke extends NamelistHolder implements PathResolverHolder, Conten
invokeId = parentState.getId() + "." + ctx.get(SCXMLSystemContext.SESSIONID_KEY);
}
if (getId() == null && getIdlocation() != null) {
- eval.evalAssign(ctx, idlocation, invokeId, Evaluator.AssignType.REPLACE_CHILDREN, null);
+ eval.evalAssign(ctx, idlocation, invokeId);
}
invoker.setInvokeId(invokeId);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/main/java/org/apache/commons/scxml2/model/Send.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/scxml2/model/Send.java b/src/main/java/org/apache/commons/scxml2/model/Send.java
index bae395a..3352056 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Send.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Send.java
@@ -19,7 +19,6 @@ package org.apache.commons.scxml2.model;
import java.util.LinkedHashMap;
import java.util.Map;
-import org.apache.commons.logging.Log;
import org.apache.commons.scxml2.ActionExecutionContext;
import org.apache.commons.scxml2.Context;
import org.apache.commons.scxml2.Evaluator;
@@ -358,7 +357,7 @@ public class Send extends NamelistHolder implements ContentContainer {
if (id == null) {
id = ctx.getSystemContext().generateSessionId();
if (idlocation != null) {
- eval.evalAssign(ctx, idlocation, id, Evaluator.AssignType.REPLACE_CHILDREN, null);
+ eval.evalAssign(ctx, idlocation, id);
}
}
String targetValue = target;
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/test/java/org/apache/commons/scxml2/model/SendTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/scxml2/model/SendTest.java b/src/test/java/org/apache/commons/scxml2/model/SendTest.java
index 7424fe8..e5ca7a6 100644
--- a/src/test/java/org/apache/commons/scxml2/model/SendTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/SendTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
public class SendTest {
@Test
+ @SuppressWarnings("unchecked")
public void testNamelistOrderPreserved() throws Exception {
final List<Object> payloads = new ArrayList<Object>();
final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/model/send-test-01.xml");
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java b/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
index f86f22a..06731ab 100644
--- a/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
+++ b/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
@@ -658,6 +658,7 @@ public class W3CTests {
}
final SCXMLExecutor exec = new SCXMLExecutor(null, null, trc);
exec.setSingleContext(true);
+ exec.setStrict(true);
exec.setStateMachine(doc);
exec.addListener(doc, trc);
exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/a61c3c54/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/scxml2/w3c/tests.xml b/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
index ad41e3f..035e998 100644
--- a/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
+++ b/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
@@ -15,8 +15,8 @@
<test id="388" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="396" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="399" mandatory="true" manual="false" jexl="true" ecma="true"/>
- <test id="401" mandatory="true" manual="false" jexl="false" ecma="true"/>
- <test id="402" mandatory="true" manual="false" jexl="false" ecma="true"/>
+ <test id="401" mandatory="true" manual="false" jexl="true" ecma="true"/>
+ <test id="402" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="403" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="404" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="405" mandatory="true" manual="false" jexl="true" ecma="true"/>
@@ -56,9 +56,9 @@
<test id="279" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="280" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="550" mandatory="true" manual="false" jexl="true" ecma="true"/>
- <test id="551" mandatory="true" manual="false" jexl="true" ecma="true"/>
+ <test id="551" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="552" mandatory="true" manual="false" jexl="false" ecma="false"/>
- <test id="286" mandatory="true" manual="false" jexl="false" ecma="true"/>
+ <test id="286" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="287" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="487" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="294" mandatory="true" manual="false" jexl="false" ecma="false"/>
@@ -186,7 +186,7 @@
<test id="495" mandatory="true" manual="false" jexl="true" ecma="true"/>
<test id="496" mandatory="true" manual="false" jexl="false" ecma="false"/>
<test id="500" mandatory="true" manual="false" jexl="false" ecma="false"/>
- <test id="501" mandatory="true" manual="false" jexl="true" ecma="false"/>
+ <test id="501" mandatory="true" manual="false" jexl="false" ecma="false"/>
<test id="201" mandatory="false" profile="http io" manual="false" implemented="false"/>
<test id="509" mandatory="false" profile="http io" manual="false" implemented="false"/>