flowable/flowable-engine · error · FlowableIllegalArgumentException
Unsupported variable query operation: ${variable.getVariable
Error message
Unsupported variable query operation: ${variable.getVariableOperation()} What it means
addVariables maps each query variable's VariableQueryOperation enum to a CaseInstanceQuery method; an unrecognized operation falls into the default branch and throws FlowableIllegalArgumentException. This means the client supplied a variable operation the CMMN REST layer does not support.
Source
Thrown at modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseCaseInstanceResource.java:392
case LESS_THAN:
caseInstanceQuery.variableValueLessThan(variable.getName(), actualValue);
break;
case LESS_THAN_OR_EQUALS:
caseInstanceQuery.variableValueLessThanOrEqual(variable.getName(), actualValue);
break;
case EXISTS:
caseInstanceQuery.variableExists(variable.getName());
break;
case NOT_EXISTS:
caseInstanceQuery.variableNotExists(variable.getName());
break;
default:
throw new FlowableIllegalArgumentException("Unsupported variable query operation: " + variable.getVariableOperation());
}
}
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Use only supported operations listed in VariableQueryProperty/enum (EQUALS, LIKE, GREATER_THAN, EXISTS, etc.)
- Check the request JSON for typos in the variableOperation field
- Upgrade/downgrade the client library so its enum matches the server version
Example fix
// before
{"name":"state","value":"active","operation":"STARTS_WITH"}
// after
{"name":"state","value":"active%","operation":"LIKE"} Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED = ['EQUALS','NOT_EQUALS','EQUALS_IGNORE_CASE','NOT_EQUALS_IGNORE_CASE','LIKE','LIKE_IGNORE_CASE','GREATER_THAN','GREATER_THAN_OR_EQUALS','LESS_THAN','LESS_THAN_OR_EQUALS','EXISTS','NOT_EXISTS'];
if (!SUPPORTED.includes(variable.operation)) throw new Error('Unsupported operation: ' + variable.operation); Try / catch
catch (e) { if (e instanceof FlowableIllegalArgumentException) { /* fix operation enum */ } } Prevention
- Keep the client's operation enum in sync with the server version
- Validate operation names against the API docs before sending
- Avoid hand-writing query JSON; use a typed client
When it happens
Trigger: POST case-instance query with a variable whose variableOperation is not one of EQUALS, NOT_EQUALS, EQUALS_IGNORE_CASE, NOT_EQUALS_IGNORE_CASE, LIKE, LIKE_IGNORE_CASE, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, EXISTS, NOT_EXISTS — e.g. a misspelled operation name or an operation from a different API.
Common situations: Typo in operation string; passing process-engine-only operations; client library out of sync with server's supported enum; hand-written query JSON.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Only string variable values are supported for like, but was:
- Illegal action: '${request.getAction()}'.
- Could not find a plan item instance with id '${planItemInsta
- Unknown variable type ${variableType}
- Could not find a event subscription with id '${eventSubscrip
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/97dfa8401d6cd242.
Report an issue: GitHub.