diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java index 36eeed2658..d94cfa9c4a 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java @@ -41,7 +41,7 @@ public void writeExternal(ObjectOutput out) throws IOException { @Override public boolean verifyDataType(final Object value) { - if ( value instanceof Boolean ) { + if (value instanceof Boolean || "true".equalsIgnoreCase(value.toString()) || "false".equalsIgnoreCase(value.toString())) { return true; } return false; diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java index e3fa20d017..29ebdc9e89 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java @@ -20,6 +20,7 @@ import java.io.ObjectInput; import java.io.ObjectOutput; +import org.apache.commons.lang3.StringUtils; import org.jbpm.process.core.datatype.DataType; /** @@ -41,9 +42,9 @@ public void writeExternal(ObjectOutput out) throws IOException { @Override public boolean verifyDataType(final Object value) { - if ( value instanceof Float ) { + if (value instanceof Float || StringUtils.isNumeric(value.toString())) { return true; - } else if ( value == null ) { + } else if (value == null) { return true; } else { return false; diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java index a0a2194e06..802ab8474c 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java @@ -21,6 +21,7 @@ import java.io.ObjectOutput; import org.jbpm.process.core.datatype.DataType; +import org.apache.commons.lang3.StringUtils; /** * Representation of an integer datatype. @@ -41,9 +42,9 @@ public void writeExternal(ObjectOutput out) throws IOException { @Override public boolean verifyDataType(final Object value) { - if ( value instanceof Integer ) { + if (value instanceof Integer || StringUtils.isNumeric(value.toString())) { return true; - } else if ( value == null ) { + } else if (value == null) { return true; } else { return false; diff --git a/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java b/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java index ef744868be..1ca7774e5d 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java @@ -104,6 +104,7 @@ public void setVariable(String name, Object value) { return; } } + // check if variable that is being set is readonly and has already been set if (oldValue != null && !oldValue.equals(value) && getVariableScope().isReadOnly(name)) { throw new VariableViolationException(getProcessInstance().getId(), name, "Variable '" + name + "' is already set and is marked as read only");