{"record":{"id":"bfcbd76fe44603e6","repo":"flowable/flowable-engine","slug":"parentdeploymentids-is-null","errorCode":null,"errorMessage":"parentDeploymentIds is null","messagePattern":"parentDeploymentIds is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CmmnDeploymentQueryImpl.java","lineNumber":168,"sourceCode":"            throw new FlowableIllegalArgumentException(\"parentDeploymentId is null\");\n        }\n        this.parentDeploymentId = parentDeploymentId;\n        return this;\n    }\n\n    @Override\n    public CmmnDeploymentQueryImpl parentDeploymentIdLike(String parentDeploymentIdLike) {\n        if (parentDeploymentIdLike == null) {\n            throw new FlowableIllegalArgumentException(\"parentDeploymentIdLike is null\");\n        }\n        this.parentDeploymentIdLike = parentDeploymentIdLike;\n        return this;\n    }\n    \n    @Override\n    public CmmnDeploymentQueryImpl parentDeploymentIds(List<String> parentDeploymentIds) {\n        if (parentDeploymentIds == null) {\n            throw new FlowableIllegalArgumentException(\"parentDeploymentIds is null\");\n        }\n        this.parentDeploymentIds = parentDeploymentIds;\n        return this;\n    }\n    \n    @Override\n    public CmmnDeploymentQueryImpl latest() {\n        if (key == null) {\n            throw new FlowableIllegalArgumentException(\"latest can only be used together with a deployment key\");\n        }\n\n        this.latest = true;\n        return this;\n    }\n\n    // sorting ////////////////////////////////////////////////////////\n\n    @Override","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CmmnDeploymentQueryImpl.java#L150-L186","documentation":"Query-builder validation in CmmnDeploymentQueryImpl.parentDeploymentIds: a null List was supplied for the parent-deployment id filter; the builder rejects it because null is reserved for 'no filter' and an IN clause cannot be built from null.","triggerScenarios":"Calling parentDeploymentIds(null), usually when the id list comes from an empty/failed prior lookup or an unpopulated collection variable.","commonSituations":"Batch filtering of child deployments where the parent id collection failed to load; deserialized request payloads missing the id array.","solutions":["Pass a non-null List<String> of parent deployment ids","If the list is empty and that means 'no filter', skip calling the setter instead of passing null","Verify the code producing the collection actually populated it"],"exampleFix":"// before\nquery.parentDeploymentIds(parentIds); // may be null\n// after\nif (parentIds != null && !parentIds.isEmpty()) {\n    query.parentDeploymentIds(parentIds);\n}","handlingStrategy":"validation","validationCode":"if (parentDeploymentIds != null && !parentDeploymentIds.isEmpty()) {\n    query.parentDeploymentIds(parentDeploymentIds);\n}","typeGuard":"boolean hasIdList = parentDeploymentIds != null && !parentDeploymentIds.isEmpty();","tryCatchPattern":"try {\n    query.parentDeploymentIds(parentDeploymentIds);\n} catch (FlowableIllegalArgumentException e) {\n    // treat as 'no parent filter' or fail the request\n}","preventionTips":["Initialize id collections eagerly (empty list instead of null)","Skip the IN filter when the collection is empty","Validate the upstream lookup that produces the id list"],"tags":["java","flowable","null-check","query"],"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"}