flowable/flowable-engine · error · FlowableIllegalArgumentException
Only string variable values are supported when ignoring…
Error message
Only string variable values are supported when ignoring casing, but was: ${valueType} What it means
FlowableIllegalArgumentException thrown when variableValueEqualsIgnoreCase (or processVariableValueEqualsIgnoreCase) is requested but the provided value is not a String. Case-insensitive comparison is only defined for string values, so the endpoint casts to String and rejects any other type.
Solutions
- Send the value as a JSON string, e.g. "value":"100" with operation equalsIgnoreCase.
- For non-string values use the plain equals operation instead of the ignore-case variant.
- Coerce values to String client-side before choosing the ignoreCase operation.
- Catch FlowableIllegalArgumentException (HTTP 400) and retry with equals when the value is not a string.
Example fix
// before
{"variables":[{"name":"status","value":100,"operation":"equalsIgnoreCase"}]}
// after
{"variables":[{"name":"status","value":"active","operation":"equalsIgnoreCase"}]} Defensive patterns
Strategy: validation
Validate before calling
for (const v of query.variables) {
if (v.operation === 'equalsIgnoreCase' && typeof v.value !== 'string')
throw new Error(`equalsIgnoreCase requires a string value, got ${typeof v.value}`);
} Type guard
const isIgnoreCaseSafe = (v) => !/IgnoreCase$/i.test(v.operation || '') || typeof v.value === 'string';
Try / catch
try { /* query */ } catch (e) {
if (e.status === 400 && /Only string variable values are supported when ignoring casing/.test(e.message)) {
// retry with plain equals
} else throw e;
} Prevention
- Coerce numbers/booleans to strings before using ignoreCase operations
- Use plain equals/notEquals for non-string values
- Type your query builder so IgnoreCase operations only accept string values
When it happens
Trigger: POST /query/process-instances or /query/executions with variables:[{"name":"amount","value":100,"operation":"equalsIgnoreCase"}] where value deserializes to a non-String type (Integer, Boolean, etc.).
Common situations: Client sends numbers/booleans with an ignoreCase operation; JSON numbers deserialized to Integer; user assumes ignoreCase is a generic case-insensitive equality for any type.
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- Only string variable values are supported for like, but…
- Only string variable values are supported using like, but…
- Only string variable values are supported when ignoring…
- Only string variable values are supported when ignoring…
- Only string variable values are supported when ignoring…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/55baaa48540dabb8.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionBaseResource.java:169
}
} else {
if (process) {
processInstanceQuery.processVariableValueEquals(variable.getName(), actualValue);
} else {
processInstanceQuery.variableValueEquals(variable.getName(), actualValue);
}
}
break;
case EQUALS_IGNORE_CASE:
if (actualValue instanceof String) {
if (process) {
processInstanceQuery.processVariableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);
} else {
processInstanceQuery.variableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);
}
} else {
throw new FlowableIllegalArgumentException("Only string variable values are supported when ignoring casing, but was: " + actualValue.getClass().getName());
}
break;
case NOT_EQUALS:
if (process) {
processInstanceQuery.processVariableValueNotEquals(variable.getName(), actualValue);
} else {
processInstanceQuery.variableValueNotEquals(variable.getName(), actualValue);
}
break;
case NOT_EQUALS_IGNORE_CASE:
if (actualValue instanceof String) {
if (process) {
processInstanceQuery.processVariableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);
} else {
processInstanceQuery.variableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);
}View on GitHub (pinned to d6d39ce1c6)