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

  1. Use only supported operations listed in VariableQueryProperty/enum (EQUALS, LIKE, GREATER_THAN, EXISTS, etc.)
  2. Check the request JSON for typos in the variableOperation field
  3. 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

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/97dfa8401d6cd242. Report an issue: GitHub.