{"record":{"id":"61e6918f6188e1cc","repo":"flowable/flowable-engine","slug":"only-string-variable-values-are-supported-when-ign-61e691","errorCode":null,"errorMessage":"Only string variable values are supported when ignoring casing, but was: ","messagePattern":"Only string variable values are supported when ignoring casing, but was: ","errorType":"http","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceBaseResource.java","lineNumber":364,"sourceCode":"                break;\n\n            case EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    taskInstanceQuery.taskVariableValueEqualsIgnoreCase(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                taskInstanceQuery.taskVariableValueNotEquals(variable.getName(), actualValue);\n                break;\n\n            case NOT_EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    taskInstanceQuery.taskVariableValueNotEqualsIgnoreCase(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 GREATER_THAN:\n                taskInstanceQuery.taskVariableValueGreaterThan(variable.getName(), actualValue);\n                break;\n\n            case GREATER_THAN_OR_EQUALS:\n                taskInstanceQuery.taskVariableValueGreaterThanOrEqual(variable.getName(), actualValue);\n                break;\n\n            case LESS_THAN:\n                taskInstanceQuery.taskVariableValueLessThan(variable.getName(), actualValue);\n                break;\n\n            case LESS_THAN_OR_EQUALS:\n                taskInstanceQuery.taskVariableValueLessThanOrEqual(variable.getName(), actualValue);\n                break;","sourceCodeStart":346,"sourceCodeEnd":382,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceBaseResource.java#L346-L382","documentation":"FlowableIllegalArgumentException thrown when NOT_EQUALS_IGNORE_CASE is used with a non-String variable value. As with EQUALS_IGNORE_CASE, case-insensitive comparison is only supported for strings; any other type (Integer, Boolean, Date, etc.) triggers this 400 error with the actual value's class name in the message.","triggerScenarios":"POST /cmmn-history/historic-task-instances/query with {\"name\":\"status\",\"operation\":\"NOT_EQUALS_IGNORE_CASE\",\"value\":true} - any non-string value under NOT_EQUALS_IGNORE_CASE.","commonSituations":"Same as EQUALS_IGNORE_CASE: dynamic query builders applying ignore-case to every filter; booleans/numbers/dates passed where strings are required; schema changes turning former string variables into typed values.","solutions":["Use NOT_EQUALS for non-string values: {\"name\":\"flag\",\"operation\":\"NOT_EQUALS\",\"value\":true}.","Send the value as a string if ignore-case comparison is intended: {\"value\":\"closed\",\"operation\":\"NOT_EQUALS_IGNORE_CASE\"}.","Guard client-side so ignore-case operations are only selectable for string values.","Cast/convert the variable data to String in the engine data model if case-insensitive exclusion is a hard requirement."],"exampleFix":"// before\n{\"name\":\"flag\",\"operation\":\"NOT_EQUALS_IGNORE_CASE\",\"value\":true}\n// after\n{\"name\":\"flag\",\"operation\":\"NOT_EQUALS\",\"value\":true}","handlingStrategy":"validation","validationCode":"function validateIgnoreCase(v) {\n  if ((v.operation === \"NOT_EQUALS_IGNORE_CASE\") && typeof v.value !== \"string\") {\n    throw new Error(\"NOT_EQUALS_IGNORE_CASE requires a string value\");\n  }\n}","typeGuard":"const canIgnoreCase = (v) => typeof v.value === 'string';","tryCatchPattern":null,"preventionTips":["Only expose *_IGNORE_CASE operations for string-typed variables.","Use NOT_EQUALS for numbers, booleans, and dates.","Add client-side operation/type compatibility checks before request dispatch."],"tags":["flowable","rest","validation","type-mismatch"],"backgroundTag":"type-mismatch","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"}