flowable/flowable-engine · error · FlowableIllegalArgumentException

parentDeploymentIds is null

Error message

parentDeploymentIds is null

What it means

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.

Solutions

  1. Pass a non-null List<String> of parent deployment ids
  2. If the list is empty and that means 'no filter', skip calling the setter instead of passing null
  3. Verify the code producing the collection actually populated it

Example fix

// before
query.parentDeploymentIds(parentIds); // may be null
// after
if (parentIds != null && !parentIds.isEmpty()) {
    query.parentDeploymentIds(parentIds);
}
Defensive patterns

Strategy: validation

Validate before calling

if (parentDeploymentIds != null && !parentDeploymentIds.isEmpty()) {
    query.parentDeploymentIds(parentDeploymentIds);
}

Type guard

boolean hasIdList = parentDeploymentIds != null && !parentDeploymentIds.isEmpty();

Try / catch

try {
    query.parentDeploymentIds(parentDeploymentIds);
} catch (FlowableIllegalArgumentException e) {
    // treat as 'no parent filter' or fail the request
}

Prevention

When it happens

Trigger: Calling parentDeploymentIds(null), usually when the id list comes from an empty/failed prior lookup or an unpopulated collection variable.

Common situations: Batch filtering of child deployments where the parent id collection failed to load; deserialized request payloads missing the id array.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/bfcbd76fe44603e6. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CmmnDeploymentQueryImpl.java:168

            throw new FlowableIllegalArgumentException("parentDeploymentId is null");
        }
        this.parentDeploymentId = parentDeploymentId;
        return this;
    }

    @Override
    public CmmnDeploymentQueryImpl parentDeploymentIdLike(String parentDeploymentIdLike) {
        if (parentDeploymentIdLike == null) {
            throw new FlowableIllegalArgumentException("parentDeploymentIdLike is null");
        }
        this.parentDeploymentIdLike = parentDeploymentIdLike;
        return this;
    }
    
    @Override
    public CmmnDeploymentQueryImpl parentDeploymentIds(List<String> parentDeploymentIds) {
        if (parentDeploymentIds == null) {
            throw new FlowableIllegalArgumentException("parentDeploymentIds is null");
        }
        this.parentDeploymentIds = parentDeploymentIds;
        return this;
    }
    
    @Override
    public CmmnDeploymentQueryImpl latest() {
        if (key == null) {
            throw new FlowableIllegalArgumentException("latest can only be used together with a deployment key");
        }

        this.latest = true;
        return this;
    }

    // sorting ////////////////////////////////////////////////////////

    @Override

View on GitHub (pinned to d6d39ce1c6)