{"record":{"id":"0bb868ab2aeb460d","repo":"flowable/flowable-engine","slug":"case-definition-id-is-null-0bb868","errorCode":null,"errorMessage":"Case definition id is null","messagePattern":"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":124,"sourceCode":"\n    public PlanItemInstanceQueryImpl() {\n        \n    }\n    \n    public PlanItemInstanceQueryImpl(CommandContext commandContext, CmmnEngineConfiguration cmmnEngineConfiguration) {\n        super(commandContext, cmmnEngineConfiguration.getVariableServiceConfiguration());\n        this.cmmnEngineConfiguration = cmmnEngineConfiguration;\n    }\n\n    public PlanItemInstanceQueryImpl(CommandExecutor commandExecutor, CmmnEngineConfiguration cmmnEngineConfiguration) {\n        super(commandExecutor, cmmnEngineConfiguration.getVariableServiceConfiguration());\n        this.cmmnEngineConfiguration = cmmnEngineConfiguration;\n    }\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;","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java#L106-L142","documentation":"Flowable's PlanItemInstanceQuery.caseDefinitionId() throws FlowableIllegalArgumentException when caseDefinitionId is null. Query setters validate arguments eagerly so bad queries fail at construction rather than deep inside the query executor. A case-definition filter requires a concrete id string.","triggerScenarios":"Calling planItemInstanceQuery.caseDefinitionId(null), typically when the case definition id variable comes from an unresolved lookup, a REST path variable, or process context that was never populated.","commonSituations":"Dashboard/report code building queries from optional request parameters; a case definition deployed under a different key so the lookup for its id returns null; tests where deployment setup was skipped.","solutions":["Pass a valid case definition id (e.g. from CmmnRepositoryService.createCaseDefinitionQuery() results)","Skip the caseDefinitionId filter when the id is null rather than passing null","Verify the case definition is deployed and its id is resolved before querying"],"exampleFix":"// before\nquery.caseDefinitionId(caseDefinitionId); // throws when null\n\n// after\nif (caseDefinitionId != null) {\n    query.caseDefinitionId(caseDefinitionId);\n}","handlingStrategy":"validation","validationCode":"if (caseDefinitionId != null && !caseDefinitionId.isBlank()) {\n    query.caseDefinitionId(caseDefinitionId);\n}","typeGuard":"boolean isPresent(String id) { return id != null && !id.isBlank(); }","tryCatchPattern":"try {\n    query.caseDefinitionId(caseDefinitionId);\n} catch (FlowableIllegalArgumentException e) {\n    throw new BadRequestException(\"caseDefinitionId is required\", e);\n}","preventionTips":["Null-check ids resolved from lookups before feeding them into queries","Validate REST path/body parameters at the endpoint boundary (e.g. @NotNull / Bean Validation)","Log the source variable when building queries to catch null-propagation early"],"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"}