flowable/flowable-engine · error · FlowableIllegalArgumentException

Provided job id list is null

Error message

Provided job id list is null

What it means

DeadLetterJobQueryImpl.jobIds(Collection<String>) validates the collection argument; a null list is rejected with FlowableIllegalArgumentException("Provided job id list is null"). Note the method is also invoked internally from execute() when expanding query filters, so a null list stored earlier surfaces at execution time.

Solutions

  1. Pass an empty collection instead of null if no ids should be filtered
  2. Null-check the collection before calling jobIds()
  3. Fix upstream data sources to return empty collections rather than null
  4. If triggered from execute(), ensure no code path assigns null to the query's jobIds field

Example fix

// before
query.jobIds(idsFromSomewhere); // may be null
// after
query.jobIds(idsFromSomewhere == null ? Collections.emptyList() : idsFromSomewhere);
Defensive patterns

Strategy: validation

Validate before calling

query.jobIds(jobIds == null ? Collections.emptyList() : jobIds);

Type guard

boolean hasJobIds(Collection<String> ids) { return ids != null; }

Try / catch

try {
    query.jobIds(jobIds);
} catch (FlowableIllegalArgumentException e) {
    query.jobIds(Collections.emptyList());
}

Prevention

When it happens

Trigger: Calling jobIds(null) directly; or a null jobIds collection having been set and then consumed by execute() (which calls this method) during query execution.

Common situations: Collecting job ids from an upstream call that returned null instead of an empty list; passing an uninitialized collection field; ORM/JSON deserialization producing null for an absent list.

Related errors


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

Appendix: source

Thrown at modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/DeadLetterJobQueryImpl.java:112

    }

    @Override
    public DeadLetterJobQueryImpl jobId(String jobId) {
        if (jobId == null) {
            throw new FlowableIllegalArgumentException("Provided job id is null");
        }
        if (inOrStatement) {
            this.currentOrQueryObject.id = jobId;
        } else {
            this.id = jobId;
        }
        return this;
    }

    @Override
    public DeadLetterJobQuery jobIds(Collection<String> jobIds) {
        if (jobIds == null) {
            throw new FlowableIllegalArgumentException("Provided job id list is null");
        }
        if (inOrStatement) {
            this.currentOrQueryObject.jobIds = jobIds;
        } else {
            this.jobIds = jobIds;
        }
        return this;
    }

    @Override
    public DeadLetterJobQueryImpl processInstanceId(String processInstanceId) {
        if (processInstanceId == null) {
            throw new FlowableIllegalArgumentException("Provided process instance id is null");
        }
        if (inOrStatement) {
            this.currentOrQueryObject.processInstanceId = processInstanceId;
        } else {
            this.processInstanceId = processInstanceId;

View on GitHub (pinned to d6d39ce1c6)