{"record":{"id":"55baaa48540dabb8","repo":"flowable/flowable-engine","slug":"only-string-variable-values-are-supported-when-ign-55baaa","errorCode":null,"errorMessage":"Only string variable values are supported when ignoring casing, but was: ${valueType}","messagePattern":"Only string variable values are supported when ignoring casing, but was: (.+?)","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionBaseResource.java","lineNumber":169,"sourceCode":"                    }\n                } else {\n                    if (process) {\n                        processInstanceQuery.processVariableValueEquals(variable.getName(), actualValue);\n                    } else {\n                        processInstanceQuery.variableValueEquals(variable.getName(), actualValue);\n                    }\n                }\n                break;\n\n            case EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    if (process) {\n                        processInstanceQuery.processVariableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    } else {\n                        processInstanceQuery.variableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    }\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                if (process) {\n                    processInstanceQuery.processVariableValueNotEquals(variable.getName(), actualValue);\n                } else {\n                    processInstanceQuery.variableValueNotEquals(variable.getName(), actualValue);\n                }\n                break;\n\n            case NOT_EQUALS_IGNORE_CASE:\n                if (actualValue instanceof String) {\n                    if (process) {\n                        processInstanceQuery.processVariableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    } else {\n                        processInstanceQuery.variableValueNotEqualsIgnoreCase(variable.getName(), (String) actualValue);\n                    }","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionBaseResource.java#L151-L187","documentation":"FlowableIllegalArgumentException thrown when variableValueEqualsIgnoreCase (or processVariableValueEqualsIgnoreCase) is requested but the provided value is not a String. Case-insensitive comparison is only defined for string values, so the endpoint casts to String and rejects any other type.","triggerScenarios":"POST /query/process-instances or /query/executions with variables:[{\"name\":\"amount\",\"value\":100,\"operation\":\"equalsIgnoreCase\"}] where value deserializes to a non-String type (Integer, Boolean, etc.).","commonSituations":"Client sends numbers/booleans with an ignoreCase operation; JSON numbers deserialized to Integer; user assumes ignoreCase is a generic case-insensitive equality for any type.","solutions":["Send the value as a JSON string, e.g. \"value\":\"100\" with operation equalsIgnoreCase.","For non-string values use the plain equals operation instead of the ignore-case variant.","Coerce values to String client-side before choosing the ignoreCase operation.","Catch FlowableIllegalArgumentException (HTTP 400) and retry with equals when the value is not a string."],"exampleFix":"// before\n{\"variables\":[{\"name\":\"status\",\"value\":100,\"operation\":\"equalsIgnoreCase\"}]}\n// after\n{\"variables\":[{\"name\":\"status\",\"value\":\"active\",\"operation\":\"equalsIgnoreCase\"}]}","handlingStrategy":"validation","validationCode":"for (const v of query.variables) {\n  if (v.operation === 'equalsIgnoreCase' && typeof v.value !== 'string')\n    throw new Error(`equalsIgnoreCase requires a string value, got ${typeof v.value}`);\n}","typeGuard":"const isIgnoreCaseSafe = (v) => !/IgnoreCase$/i.test(v.operation || '') || typeof v.value === 'string';","tryCatchPattern":"try { /* query */ } catch (e) {\n  if (e.status === 400 && /Only string variable values are supported when ignoring casing/.test(e.message)) {\n    // retry with plain equals\n  } else throw e;\n}","preventionTips":["Coerce numbers/booleans to strings before using ignoreCase operations","Use plain equals/notEquals for non-string values","Type your query builder so IgnoreCase operations only accept string values"],"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"}