{"record":{"id":"f2b2f3fe40e027d6","repo":"flowable/flowable-engine","slug":"derived-case-definition-id-is-null","errorCode":null,"errorMessage":"Derived case definition id is null","messagePattern":"Derived case definition id is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java","lineNumber":137,"sourceCode":"    }\n\n    @Override\n    public PlanItemInstanceQuery caseDefinitionId(String caseDefinitionId) {\n        if (caseDefinitionId == null) {\n            throw new FlowableIllegalArgumentException(\"Case definition id is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.caseDefinitionId = caseDefinitionId;\n        } else {\n            this.caseDefinitionId = caseDefinitionId;\n        }\n        return this;\n    }\n\n    @Override\n    public PlanItemInstanceQuery derivedCaseDefinitionId(String derivedCaseDefinitionId) {\n        if (derivedCaseDefinitionId == null) {\n            throw new FlowableIllegalArgumentException(\"Derived case definition id is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.derivedCaseDefinitionId = derivedCaseDefinitionId;\n        } else {\n            this.derivedCaseDefinitionId = derivedCaseDefinitionId;\n        }\n        return this;\n    }\n\n    @Override\n    public PlanItemInstanceQuery 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":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java#L119-L155","documentation":"Flowable's PlanItemInstanceQuery.derivedCaseDefinitionId() throws FlowableIllegalArgumentException when derivedCaseDefinitionId is null. Derived case definitions are dynamically instantiated variants of a case definition; filtering by one requires a non-null id. The check happens immediately in the setter, before query execution.","triggerScenarios":"Calling derivedCaseDefinitionId(null), usually because the derived-definition id was taken from a variable, form field, or API payload that was empty or absent.","commonSituations":"Applications using CMMN dynamic case variants where the derived definition hasn't been created/resolved yet; clients omitting the parameter in REST calls; copying code from caseDefinitionId into derivedCaseDefinitionId without wiring the new source.","solutions":["Pass the actual derived case definition id (resolve it from the case instance or runtime service before querying)","Make the filter conditional: only call derivedCaseDefinitionId when the id is non-null","If you meant the static definition, use caseDefinitionId(...) with a resolved id instead"],"exampleFix":"// before\nquery.derivedCaseDefinitionId(derivedId); // throws when derivedId == null\n\n// after\nif (derivedId != null) {\n    query.derivedCaseDefinitionId(derivedId);\n}","handlingStrategy":"validation","validationCode":"if (derivedCaseDefinitionId != null && !derivedCaseDefinitionId.isBlank()) {\n    query.derivedCaseDefinitionId(derivedCaseDefinitionId);\n}","typeGuard":"boolean isPresent(String id) { return id != null && !id.isBlank(); }","tryCatchPattern":"try {\n    query.derivedCaseDefinitionId(derivedCaseDefinitionId);\n} catch (FlowableIllegalArgumentException e) {\n    log.warn(\"Derived case definition filter skipped: {}\", e.getMessage());\n}","preventionTips":["Resolve derived case definition ids before query construction, not inline","Distinguish 'not applicable' (skip filter) from 'unknown id' (error) in calling code","Add integration tests covering queries with absent derived-definition context"],"tags":["flowable","cmmn","query","null-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"}