{"record":{"id":"1384e9b962735a7a","repo":"flowable/flowable-engine","slug":"unsupported-variable-query-operation-operation-1384e9","errorCode":null,"errorMessage":"Unsupported variable query operation: ${operation}","messagePattern":"Unsupported variable query operation: (.+?)","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionBaseResource.java","lineNumber":193,"sourceCode":"                    processInstanceQuery.processVariableValueNotEquals(variable.getName(), actualValue);\n                } else {\n                    processInstanceQuery.variableValueNotEquals(variable.getName(), actualValue);\n                }\n                break;\n\n            case NOT_EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    if (process) {\n                        processInstanceQuery.processVariableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    } else {\n                        processInstanceQuery.variableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    }\n                } else {\n                    throw new FlowableIllegalArgumentException(\"Only string variable values are supported when ignoring casing, but was: \" + actualValue.getClass().getName());\n                }\n                break;\n            default:\n                throw new FlowableIllegalArgumentException(\"Unsupported variable query operation: \" + variable.getVariableOperation());\n            }\n        }\n    }\n\n    protected Execution getExecutionFromRequest(String executionId) {\n        Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult();\n        if (execution == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find an execution with id '\" + executionId + \"'.\", Execution.class);\n        }\n        \n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessExecutionInfoById(execution);\n        }\n        \n        return execution;\n    }\n\n    protected Map<String, Object> getVariablesToSet(List<RestVariable> restVariables) {","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionBaseResource.java#L175-L211","documentation":"FlowableIllegalArgumentException thrown when a query variable specifies a variableOperation that is not one of the QueryVariableOperation enum values handled by the switch (equals, notEquals, equalsIgnoreCase, notEqualsIgnoreCase, like, etc. depending on version). The operation string failed enum parsing into a supported case or fell through to default.","triggerScenarios":"POST /query/process-instances or /query/executions with variables:[{\"name\":\"orderId\",\"value\":\"42\",\"operation\":\"greaterThanOrEqual\"}] — an operation name that either failed to parse to the enum (then it cannot reach here) or is a valid enum not supported by this switch.","commonSituations":"Typos in the operation name; copying operation names from other engine versions (Flowable added/removed QueryVariableOperation members across versions); client enumerates operators not supported by this endpoint.","solutions":["Use one of the supported operation names for this endpoint: equals, notEquals, equalsIgnoreCase, notEqualsIgnoreCase, like (check your Flowable version's QueryVariableOperation).","Upgrade/downgrade the client so its operation vocabulary matches the server's QueryVariableOperation enum.","Log the exact operation string from the request and compare against the enum values in the server version.","Catch FlowableIllegalArgumentException (HTTP 400) and retry with equals."],"exampleFix":"// before\n{\"variables\":[{\"name\":\"orderId\",\"value\":\"42\",\"operation\":\"greaterThanOrEqual\"}]}\n// after\n{\"variables\":[{\"name\":\"orderId\",\"value\":\"42\",\"operation\":\"equals\"}]}","handlingStrategy":"validation","validationCode":"const SUPPORTED = ['equals','notEquals','equalsIgnoreCase','notEqualsIgnoreCase','like'];\nfor (const v of query.variables) {\n  if (!SUPPORTED.includes(v.operation)) throw new Error(`Unsupported variable operation: ${v.operation}`);\n}","typeGuard":"const isSupportedOp = (op) => ['equals','notEquals','equalsIgnoreCase','notEqualsIgnoreCase','like'].includes(op);","tryCatchPattern":"try { /* query */ } catch (e) {\n  if (e.status === 400 && /Unsupported variable query operation/.test(e.message)) {\n    // map or degrade the operation to a supported one\n  } else throw e;\n}","preventionTips":["Keep the client's operation enum in sync with your Flowable server version's QueryVariableOperation","Fail fast client-side on unknown operations instead of sending them","Pin client and server versions so vocabularies match"],"tags":["rest-api","query","invalid-enum","flowable"],"backgroundTag":"invalid-enum-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}