{"record":{"id":"445ac6938eeef668","repo":"flowable/flowable-engine","slug":"the-case-definition-id-must-be-provided-for-the-pl","errorCode":null,"errorMessage":"The case definition id must be provided for the plan item instance","messagePattern":"The case definition id must be provided for the plan item instance","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/InjectedPlanItemInstanceBuilderImpl.java","lineNumber":74,"sourceCode":"    }\n\n    @Override\n    public PlanItemInstance createInStage(String stagePlanItemInstanceId) {\n        validateData();\n        this.stagePlanItemInstanceId = stagePlanItemInstanceId;\n        return commandExecutor.execute(new CreateInjectedPlanItemInstanceCmd(this));\n    }\n\n    @Override\n    public PlanItemInstance createInCase(String caseInstanceId) {\n        validateData();\n        this.caseInstanceId = caseInstanceId;\n        return commandExecutor.execute(new CreateInjectedPlanItemInstanceCmd(this));\n    }\n\n    protected void validateData() {\n        if (caseDefinitionId == null) {\n            throw new FlowableIllegalArgumentException(\"The case definition id must be provided for the plan item instance\");\n        }\n        if (elementId == null) {\n            throw new FlowableIllegalArgumentException(\"The element id must be provided for the plan item instance\");\n        }\n    }\n\n    public boolean injectInStage() {\n        return stagePlanItemInstanceId != null;\n    }\n    public boolean injectInCase() {\n        return caseInstanceId != null;\n    }\n    public String getStagePlanItemInstanceId() {\n        return stagePlanItemInstanceId;\n    }\n    public String getCaseInstanceId() {\n        return caseInstanceId;\n    }","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/InjectedPlanItemInstanceBuilderImpl.java#L56-L92","documentation":"InjectedPlanItemInstanceBuilderImpl.validateData() is called before creating a dynamically injected plan item instance (createInStage/createInCase). The caseDefinitionId identifies which CMMN model the injected element belongs to; if null, validation fails with FlowableIllegalArgumentException.","triggerScenarios":"Calling createInjectedPlanItemInstanceBuilder(...) then createInStage/createInCase without calling caseDefinitionId(String), or with a null id (e.g., lookup returned nothing).","commonSituations":"Definition id obtained from a query that returned null; confusing caseInstanceId with caseDefinitionId; dynamically injecting plan items in a runtime-generated model where the id was never resolved.","solutions":["Call caseDefinitionId(...) with the deployed definition id before createInStage/createInCase","Resolve the id via caseInstance.getCaseDefinitionId() of the target case instance","Null-check the id lookup result before building"],"exampleFix":"// before\nbuilder.elementId(\"task1\").createInStage(stageId); // caseDefinitionId never set\n// after\nString defId = runtimeService.createCaseInstanceQuery()\n    .caseInstanceId(caseInstanceId).singleResult().getCaseDefinitionId();\nbuilder.caseDefinitionId(defId).elementId(\"task1\").createInStage(stageId);","handlingStrategy":"validation","validationCode":"if (caseDefinitionId == null) { caseDefinitionId = caseInstance.getCaseDefinitionId(); }","typeGuard":"boolean hasText(String s) { return s != null && !s.trim().isEmpty(); }","tryCatchPattern":"try { builder.createInStage(stageId); } catch (FlowableIllegalArgumentException e) { log.error(\"Injection data invalid: {}\", e.getMessage()); }","preventionTips":["Derive caseDefinitionId from the target case instance rather than external input","Validate both caseDefinitionId and elementId before createInStage/createInCase","Null-check repository lookups that supply the id"],"tags":["flowable","cmmn","plan-item","injection","validation"],"backgroundTag":"missing-required-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"}