{"record":{"id":"9c5745e9413b09fe","repo":"flowable/flowable-engine","slug":"case-definition-version-is-null","errorCode":null,"errorMessage":"Case definition version is null","messagePattern":"Case definition version is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/history/HistoricCaseInstanceQueryImpl.java","lineNumber":301,"sourceCode":"    }\n    \n    @Override\n    public HistoricCaseInstanceQueryImpl caseDefinitionNameLikeIgnoreCase(String caseDefinitionNameLikeIgnoreCase) {\n        if (caseDefinitionNameLikeIgnoreCase == null) {\n            throw new FlowableIllegalArgumentException(\"Case definition name is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.caseDefinitionNameLikeIgnoreCase = caseDefinitionNameLikeIgnoreCase;\n        } else {\n            this.caseDefinitionNameLikeIgnoreCase = caseDefinitionNameLikeIgnoreCase;\n        }\n        return this;\n    }\n\n    @Override\n    public HistoricCaseInstanceQueryImpl caseDefinitionVersion(Integer caseDefinitionVersion) {\n        if (caseDefinitionVersion == null) {\n            throw new FlowableIllegalArgumentException(\"Case definition version is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.caseDefinitionVersion = caseDefinitionVersion;\n        } else {\n            this.caseDefinitionVersion = caseDefinitionVersion;\n        }\n        return this;\n    }\n\n    @Override\n    public HistoricCaseInstanceQueryImpl caseInstanceId(String caseInstanceId) {\n        if (caseInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"Case instance id is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.caseInstanceId = caseInstanceId;\n        } else {\n            this.caseInstanceId = caseInstanceId;","sourceCodeStart":283,"sourceCodeEnd":319,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/history/HistoricCaseInstanceQueryImpl.java#L283-L319","documentation":"caseDefinitionVersion(Integer) rejects a null version argument with FlowableIllegalArgumentException. The query implementation stores the version for SQL filtering and cannot represent 'unset' as null once the setter is invoked.","triggerScenarios":"Calling caseDefinitionVersion(null) directly, or passing an Integer variable that was never initialized or failed to parse from a string.","commonSituations":"Parsing request parameters with Integer.valueOf on missing/empty input; mapping JSON bodies where the version field is optional.","solutions":["Pass a valid version integer (e.g. 1).","Only invoke the setter when the Integer is non-null.","Catch FlowableIllegalArgumentException to convert it into a client-facing validation error."],"exampleFix":"// before\nquery.caseDefinitionVersion(versionMap.get(\"version\")); // may be null\n// after\nInteger version = versionMap.get(\"version\");\nif (version != null) {\n    query.caseDefinitionVersion(version);\n}","handlingStrategy":"validation","validationCode":"if (caseDefinitionVersion == null) { throw new IllegalArgumentException(\"caseDefinitionVersion must not be null\"); }\nhistoricCaseInstanceQuery.caseDefinitionVersion(caseDefinitionVersion);","typeGuard":"boolean isValidVersion(Integer v) { return v != null && v > 0; }","tryCatchPattern":"try {\n    query.caseDefinitionVersion(version);\n} catch (FlowableIllegalArgumentException e) {\n    throw new BadRequestException(\"Invalid case definition version\", e);\n}","preventionTips":["Use Optional<Integer> for optional version filters and only unwrap when present","Guard parsing of numeric request parameters before passing to the query","Default to a specific version when input is missing","Test queries with absent version fields"],"tags":["java","flowable","cmmn","null-argument","query-validation"],"backgroundTag":"null-argument","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"}