{"record":{"id":"ec1bb76a9c80a54e","repo":"flowable/flowable-engine","slug":"value-is-null","errorCode":null,"errorMessage":"value is null","messagePattern":"value is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/AbstractVariableQueryImpl.java","lineNumber":108,"sourceCode":"    protected T variableValueEquals(Object value, boolean localScope) {\n        queryVariableValues.add(new QueryVariableValue(null, value, QueryOperator.EQUALS, localScope));\n        return (T) this;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    protected T scopedVariableValueEquals(Object value, String scopeType) {\n        queryVariableValues.add(new QueryVariableValue(null, value, QueryOperator.EQUALS, false, scopeType));\n        return (T) this;\n    }\n\n    public T variableValueEqualsIgnoreCase(String name, String value) {\n        return variableValueEqualsIgnoreCase(name, value, true);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    protected T variableValueEqualsIgnoreCase(String name, String value, boolean localScope) {\n        if (value == null) {\n            throw new FlowableIllegalArgumentException(\"value is null\");\n        }\n        addVariable(name, value.toLowerCase(), QueryOperator.EQUALS_IGNORE_CASE, localScope);\n        return (T) this;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    protected T scopedVariableValueEqualsIgnoreCase(String name, String value, String scopeType) {\n        if (value == null) {\n            throw new FlowableIllegalArgumentException(\"value is null\");\n        }\n        addVariable(name, value.toLowerCase(), QueryOperator.EQUALS_IGNORE_CASE, scopeType, false);\n        return (T) this;\n    }\n\n    public T variableValueNotEqualsIgnoreCase(String name, String value) {\n        return variableValueNotEqualsIgnoreCase(name, value, true);\n    }\n","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/AbstractVariableQueryImpl.java#L90-L126","documentation":"AbstractVariableQueryImpl.variableValueEqualsIgnoreCase validates its String value argument and throws FlowableIllegalArgumentException(\"value is null\") when null is passed. Case-insensitive equality needs a concrete string to lowercase and compare, so null is rejected up front. The exception is thrown immediately at query-construction time, before the query is executed.","triggerScenarios":"Calling variableValueEqualsIgnoreCase(name, null) (or the localScope variant) on a task/historic/process variable query object.","commonSituations":"Building queries from user input or optional request parameters where the filter value was never populated; mapping a DTO with a null field directly into the query builder.","solutions":["Check the value for null before calling variableValueEqualsIgnoreCase","If an absent value means 'no filter', skip adding the criterion instead of passing null","If you truly need null matching, use variableValueEquals/variableValueNotEquals (which support null) rather than the IgnoreCase variant","Default the value to a non-null sentinel string if appropriate"],"exampleFix":"// before\nquery.variableValueEqualsIgnoreCase(\"name\", filter.getName()); // NPE-ish if null\n// after\nif (filter.getName() != null) {\n    query.variableValueEqualsIgnoreCase(\"name\", filter.getName());\n}","handlingStrategy":"validation","validationCode":"if (name == null || value == null) { throw new IllegalArgumentException(\"name and value must be non-null\"); } query.variableValueEqualsIgnoreCase(name, value);","typeGuard":"boolean isNonEmptyString(String s) { return s != null && !s.isEmpty(); }","tryCatchPattern":"try { query.variableValueEqualsIgnoreCase(name, value); } catch (FlowableIllegalArgumentException e) { throw new BadRequestException(e.getMessage()); }","preventionTips":["Always null-check optional filter values before query building","Remember IgnoreCase operators do not accept null; use variableValueEquals for null matching","Validate DTO fields at the API boundary before mapping to queries"],"tags":["null-argument","query","illegal-argument"],"backgroundTag":"null-argument","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"}