{"record":{"id":"184d4c64ed04e292","repo":"flowable/flowable-engine","slug":"operator-operator-is-not-supported-for-the-vari","errorCode":null,"errorMessage":"Operator ${operator} is not supported for the variable value","messagePattern":"Operator (.+?) is not supported for the variable value","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java","lineNumber":372,"sourceCode":"                        break;\n                    case LIKE_IGNORE_CASE:\n                        query.variableValueLikeIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        break;\n                    case EQUALS_IGNORE_CASE:\n                        query.variableValueEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        break;\n                    case EXISTS:\n                        query.variableExists(variableName);\n                        break;\n                    case NOT_EXISTS:\n                        query.variableNotExists(variableName);\n                        break;\n                    case NOT_EQUALS_IGNORE_CASE:\n                        //Not exposed on the public API\n                        //query.variableValueNotEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        //break;\n                    default:\n                        throw new FlowableIllegalArgumentException(\"Operator \" + operator + \" is not supported for the variable value\");\n                }\n            }\n\n        }\n\n    }\n\n    protected static Object extractVariableValue(JsonNode variableValueNode, CmmnEngineConfiguration engineConfiguration) {\n        String type = variableValueNode.path(\"type\").stringValue(null);\n        if (type == null) {\n            throw new FlowableIllegalArgumentException(\"The variable value does not have a type\");\n        }\n\n        VariableType variableType = engineConfiguration.getVariableTypes()\n                .getVariableType(type);\n        return variableType.getValue(new VariableValueJsonNodeValueFields(variableValueNode));\n    }\n","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java#L354-L390","documentation":"Thrown by populateQueryVariableValues() when the operator parsed from the JSON falls into the switch's default branch, i.e. it is a valid QueryOperator enum value that the HistoricCaseInstanceQuery variable-value API does not expose (e.g. EQUALS_IGNORE_CASE / NOT_EQUALS_IGNORE_CASE). Notably NOT_EQUALS_IGNORE_CASE is deliberately commented out as not exposed on the public API.","triggerScenarios":"A variable value node in the batch configuration JSON uses operator EQUALS_IGNORE_CASE, NOT_EQUALS_IGNORE_CASE, or another QueryOperator not handled in the switch.","commonSituations":"Copy-pasting operator names from the QueryOperator enum without checking public API support; batch JSON authored for a runtime query that supports more operators; version drift adding enum values not yet handled.","solutions":["Use a supported operator such as EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, LIKE","Replace unsupported ignore-case operators with EQUALS plus normalized (lowercased) values in the data/query","Update Flowable to a version whose switch handles the operator, if available"],"exampleFix":"// before\n{\"name\":\"status\",\"operator\":\"NOT_EQUALS_IGNORE_CASE\",\"value\":\"closed\"}\n// after\n{\"name\":\"status\",\"operator\":\"NOT_EQUALS\",\"value\":\"closed\"}","handlingStrategy":"validation","validationCode":"EnumSet<QueryOperator> allowed = EnumSet.of(EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, LIKE);\nif (!allowed.contains(operator)) throw new IllegalArgumentException(\"operator not supported for historic case query: \" + operator);","typeGuard":"boolean isSupportedOperator(String op) { try { return allowedSet().contains(QueryOperator.valueOf(op)); } catch (Exception e) { return false; } }","tryCatchPattern":"try { createBatch(cmd); } catch (FlowableIllegalArgumentException e) { if (e.getMessage().contains(\"not supported for the variable value\")) { log.error(\"Unsupported operator; use EQUALS/NOT_EQUALS/LIKE etc.\", e); } throw e; }","preventionTips":["Restrict user-facing filter builders to operators the historic query API exposes","Do not use *IGNORE_CASE operators in batch query JSON","Recheck supported operators when upgrading Flowable"],"tags":["flowable","cmmn","query","operator","unsupported-enum"],"backgroundTag":"unsupported-enum-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}