{"record":{"id":"992a13fad4abe32b","repo":"flowable/flowable-engine","slug":"only-string-variable-values-are-supported-when-ign-992a13","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: \" \\+ actualValue\\.getClass\\(\\)\\.getName\\(\\)","errorType":"http","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseProcessInstanceResource.java","lineNumber":312,"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                    processInstanceQuery.variableValueEquals(actualValue);\n                } else {\n                    processInstanceQuery.variableValueEquals(variable.getName(), actualValue);\n                }\n                break;\n\n            case EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    processInstanceQuery.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                processInstanceQuery.variableValueNotEquals(variable.getName(), actualValue);\n                break;\n\n            case NOT_EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    processInstanceQuery.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                    processInstanceQuery.variableValueLike(variable.getName(), (String) actualValue);","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseProcessInstanceResource.java#L294-L330","documentation":"Flowable's REST process-instance query API throws this FlowableIllegalArgumentException when a variable filter uses the EQUALS_IGNORE_CASE operation but the supplied variable value is not a String. Case-insensitive equality is only defined for text values, so any other type (Integer, Boolean, Date, serialized object) is rejected before the query is built.","triggerScenarios":"Calling GET/POST on the process-instance query endpoint (e.g. /runtime/process-instances) with a variableQuery where variableOperation=EQUALS_IGNORE_CASE and the variable value is a non-string JSON value such as a number or boolean.","commonSituations":"Sending {\"name\":\"amount\",\"value\":100,\"operation\":\"equalsIgnoreCase\"} instead of a quoted string; client generators that auto-serialize numbers; copying a query that used 'equals' (any type allowed) and switching the operation without changing the value type.","solutions":["Pass the variable value as a JSON string (e.g. \"100\" not 100) when using EQUALS_IGNORE_CASE","Use the plain EQUALS operation if the value is not a string; it accepts any variable type","Do the case-insensitive comparison client-side by querying with EQUALS on a known type and filtering results in your own code"],"exampleFix":"// before\n{\"name\":\"status\",\"value\":2,\"operation\":\"equalsIgnoreCase\"}\n// after\n{\"name\":\"status\",\"value\":\"2\",\"operation\":\"equalsIgnoreCase\"}","handlingStrategy":"validation","validationCode":"if (typeof value !== 'string') throw new Error('equalsIgnoreCase requires a string variable value, got: ' + typeof value);","typeGuard":"function isString(v) { return typeof v === 'string'; }","tryCatchPattern":"try { await flowable.queryProcessInstances(query); } catch (e) { if (e.constructor.name === 'FlowableIllegalArgumentException' && e.message.includes('ignoring casing')) { /* coerce value to string or switch to EQUALS */ } else { throw e; } }","preventionTips":["Only use *_IGNORE_CASE operations for text variables","Keep a mapping of operation -> allowed value types in your client","Quote numeric values as strings when pattern/ignore-case matching"],"tags":["flowable","rest-api","query","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-18T11:17:12.947Z"}