{"record":{"id":"07a8d13f9916b98f","repo":"flowable/flowable-engine","slug":"only-string-variable-values-are-supported-when-ign-07a8d1","errorCode":null,"errorMessage":"Only string variable values are supported when ignoring casing, but was: ${actualValue.getClass().getName()}","messagePattern":"Only string variable values are supported when ignoring casing, but was: (.+?)","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseCaseInstanceResource.java","lineNumber":335,"sourceCode":"            if (nameLess && variable.getVariableOperation() != QueryVariableOperation.EQUALS) {\n                throw new FlowableIllegalArgumentException(\"Value-only query (without a variable-name) is only supported when using 'equals' operation.\");\n            }\n\n            switch (variable.getVariableOperation()) {\n\n            case EQUALS:\n                if (nameLess) {\n                    caseInstanceQuery.variableValueEquals(actualValue);\n                } else {\n                    caseInstanceQuery.variableValueEquals(variable.getName(), actualValue);\n                }\n                break;\n\n            case EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    caseInstanceQuery.variableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                } else {\n                    throw new FlowableIllegalArgumentException(\"Only string variable values are supported when ignoring casing, but was: \" + actualValue.getClass().getName());\n                }\n                break;\n\n            case NOT_EQUALS:\n                caseInstanceQuery.variableValueNotEquals(variable.getName(), actualValue);\n                break;\n\n            case NOT_EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    caseInstanceQuery.variableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                } else {\n                    throw new FlowableIllegalArgumentException(\"Only string variable values are supported when ignoring casing, but was: \" + actualValue.getClass().getName());\n                }\n                break;\n\n            case LIKE:\n                if (actualValue instanceof String) {\n                    caseInstanceQuery.variableValueLike(variable.getName(), (String) actualValue);","sourceCodeStart":317,"sourceCodeEnd":353,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseCaseInstanceResource.java#L317-L353","documentation":"EQUALS_IGNORE_CASE case-insensitive comparison is only implemented for string variables in the query engine. If the resolved value object is not a java.lang.String (e.g. Integer, Boolean, Date), addVariables throws FlowableIllegalArgumentException reporting the value's actual class.","triggerScenarios":"Case-instance query with a variables entry using operation EQUALS_IGNORE_CASE whose value parses to a non-string, e.g. {\"name\":\"count\",\"value\":\"5\",\"operation\":\"EQUALS_IGNORE_CASE\"} resolved to Integer, or a JSON number/boolean value.","commonSituations":"Generic query builders that apply ignore-case to every text-typed input, numeric ids sent as numbers, dates formatted as strings intended for ignore-case match, or Booleans queried case-insensitively.","solutions":["Use EQUALS instead of EQUALS_IGNORE_CASE for non-string values.","Ensure the value is sent as a JSON string for case-insensitive matching: {\"name\":\"status\",\"value\":\"ACTIVE\",\"operation\":\"EQUALS_IGNORE_CASE\"}.","If the variable truly stores a number/boolean, normalize case sensitivity at the application level and query with EQUALS.","Client-side: only apply ignoreCase operations to filters whose values are strings."],"exampleFix":"// before\n{\"name\":\"count\",\"value\":5,\"operation\":\"EQUALS_IGNORE_CASE\"}\n\n// after\n{\"name\":\"count\",\"value\":5,\"operation\":\"EQUALS\"}","handlingStrategy":"type-guard","validationCode":"if (v.operation === 'EQUALS_IGNORE_CASE' && typeof v.value !== 'string')\n  throw new Error('EQUALS_IGNORE_CASE supports string values only');","typeGuard":"function isStringFilter(v) { return v.operation === 'EQUALS_IGNORE_CASE' && typeof v.value === 'string'; }","tryCatchPattern":null,"preventionTips":["Only use ignore-case operations for string variables.","Send numbers/booleans/dates with EQUALS and appropriate typed values.","Send text values as JSON strings, not bare numbers."],"tags":["rest-api","query","type-mismatch","flowable"],"backgroundTag":"type-mismatch","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"}