{"record":{"id":"19132f7ce3fe6392","repo":"flowable/flowable-engine","slug":"unsupported-variable-query-operation-19132f","errorCode":null,"errorMessage":"Unsupported variable query operation: ","messagePattern":"Unsupported variable query operation: ","errorType":"http","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskBaseResource.java","lineNumber":548,"sourceCode":"\n            case LIKE_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    taskQuery.processVariableValueLikeIgnoreCase(variable.getName(), (String) actualValue);\n                } else {\n                    throw new FlowableIllegalArgumentException(\"Only string variable values are supported using like, but was: \" + actualValue.getClass().getName());\n                }\n                break;\n\n            case EXISTS:\n                taskQuery.processVariableExists(variable.getName());\n                break;\n\n            case NOT_EXISTS:\n                taskQuery.processVariableNotExists(variable.getName());\n                break;\n\n            default:\n                throw new FlowableIllegalArgumentException(\"Unsupported variable query operation: \" + variable.getVariableOperation());\n            }\n        }\n    }\n\n    /**\n     * Returns the {@link Task} that is requested and calls the access interceptor.\n     * Throws the right exceptions when bad request was made or instance was not found.\n     */\n    protected Task getTaskFromRequest(String taskId) {\n        Task task = getTaskFromRequestWithoutAccessCheck(taskId);\n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessTaskInfoById(task);\n        }\n\n        return task;\n    }\n\n    protected Task getTaskFromRequestWithoutAccessCheck(String taskId) {","sourceCodeStart":530,"sourceCodeEnd":566,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskBaseResource.java#L530-L566","documentation":"The variable query operation sent in the request is not one of the operations the CMMN REST task query supports (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). addProcessvariables' default branch throws FlowableIllegalArgumentException naming the operation.","triggerScenarios":"POST /cmmn-query/tasks with a processVariables entry whose variableOperation is misspelled, unknown (e.g. \"notEqualsIgnoreCase\" wrong casing on an unparseable enum) or otherwise not in the QueryVariable.QueryVariableOperation enum.","commonSituations":"Typos in variableOperation; clients copied from process-engine REST API versions with different operation names; frameworks sending uppercase/lowercase variants the enum cannot resolve.","solutions":["Use one of the supported operation names exactly: 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","Fix the spelling/casing of variableOperation in the request body","Compare against the org.flowable.cmmn.rest.service.api.runtime.task.QueryVariable.QueryVariableOperation enum for valid values","Log the request body next to the exception message which echoes the invalid operation"],"exampleFix":"// before\n{\"processVariables\":[{\"name\":\"status\",\"value\":\"open\",\"variableOperation\":\"EQUALS_ICASE\"}]}\n// after\n{\"processVariables\":[{\"name\":\"status\",\"value\":\"open\",\"variableOperation\":\"EQUALS_IGNORE_CASE\"}]}","handlingStrategy":"validation","validationCode":"const OPS = ['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'];\nfor (const v of req.processVariables) if (!OPS.includes(v.variableOperation)) throw new Error('Unsupported variableOperation: ' + v.variableOperation);","typeGuard":null,"tryCatchPattern":"try { await queryTasks(req); } catch (e) { if (e.message.startsWith('Unsupported variable query operation')) { const bad = e.message.split(': ')[1]; /* fix or drop that filter */ } throw e; }","preventionTips":["Keep a whitelist of supported variableOperation values in the client","Copy operation names from QueryVariable.QueryVariableOperation enum","Validate request bodies against the REST API contract before sending"],"tags":["rest","query","invalid-enum","validation"],"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"}