{"record":{"id":"b2eeb1e54b4b3725","repo":"flowable/flowable-engine","slug":"provided-case-definition-id-is-null-b2eeb1","errorCode":null,"errorMessage":"Provided case definition id is null","messagePattern":"Provided case definition id is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java","lineNumber":337,"sourceCode":"            this.scopeDefinitionId = scopeDefinitionId;\n        }\n        return this;\n    }\n    \n    @Override\n    public SuspendedJobQueryImpl caseInstanceId(String caseInstanceId) {\n        if (caseInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"Provided case instance id is null\");\n        }\n        scopeId(caseInstanceId);\n        scopeType(ScopeTypes.CMMN);\n        return this;\n    }\n    \n    @Override\n    public SuspendedJobQueryImpl caseDefinitionId(String caseDefinitionId) {\n        if (caseDefinitionId == null) {\n            throw new FlowableIllegalArgumentException(\"Provided case definition id is null\");\n        }\n        scopeDefinitionId(caseDefinitionId);\n        scopeType(ScopeTypes.CMMN);\n        return this;\n    }\n\n    @Override\n    public SuspendedJobQueryImpl caseDefinitionKey(String caseDefinitionKey) {\n        if (caseDefinitionKey == null) {\n            throw new FlowableIllegalArgumentException(\"Provided case definition key is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.caseDefinitionKey = caseDefinitionKey;\n        } else {\n            this.caseDefinitionKey = caseDefinitionKey;\n        }\n        return this;\n    }","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java#L319-L355","documentation":"This FlowableIllegalArgumentException is thrown by SuspendedJobQueryImpl.caseDefinitionId() when the caller passes a null case definition id. The method delegates to scopeDefinitionId() and sets scope type to CMMN; the id null-check fires first. Flowable rejects null here so the query is never built with an invalid definition filter.","triggerScenarios":"Calling suspendedJobQuery().caseDefinitionId(null), commonly when the definition was not resolved from the repository service, a deployment lookup failed, or an optional parameter was null.","commonSituations":"RepositoryService lookup by key returned no definition and the code proceeded; configuration specifying a definition id that does not exist in the DB; refactor left a nullable variable in place.","solutions":["Resolve the definition via repositoryService.createCaseDefinitionQuery() and null-check before querying jobs","Only call caseDefinitionId() with a verified non-null id; use caseDefinitionKey() if you only have a key","Handle 'definition not found' explicitly instead of passing null","Validate configuration/deployment state before query construction"],"exampleFix":"// before\nCaseDefinition cd = repositoryService.createCaseDefinitionQuery().caseDefinitionKey(key).singleResult();\nquery.caseDefinitionId(cd.getId()); // cd may be null\n// after\nCaseDefinition cd = repositoryService.createCaseDefinitionQuery().caseDefinitionKey(key).singleResult();\nif (cd != null) {\n    query.caseDefinitionId(cd.getId());\n}","handlingStrategy":"validation","validationCode":"CaseDefinition cd = repositoryService.createCaseDefinitionQuery().caseDefinitionId(definitionId).singleResult();\nif (cd != null) {\n    query.caseDefinitionId(definitionId);\n}","typeGuard":"boolean hasCaseDefinitionId = caseDefinitionId != null && !caseDefinitionId.isBlank();","tryCatchPattern":"try {\n    query.caseDefinitionId(caseDefinitionId);\n} catch (FlowableIllegalArgumentException e) {\n    if (e.getMessage().contains(\"case definition id is null\")) {\n        // fall back to caseDefinitionKey-based lookup or fail with a clear message\n    } else {\n        throw e;\n    }\n}","preventionTips":["Resolve definitions via repositoryService.createCaseDefinitionQuery() and null-check before use","Prefer caseDefinitionKey() when only a key is known and validated","Fail deployment/config validation early if a referenced definition is missing","Centralize definition resolution in a helper that throws a domain-specific not-found error"],"tags":["java","flowable","query","null-check","cmmn"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}