flowable/flowable-engine · error · FlowableIllegalArgumentException
Provided exception message is null
Error message
Provided exception message is null
What it means
DeadLetterJobQueryImpl.exceptionMessage(String) requires a non-null exception message since it is used as an exact-match filter in the query. Passing null cannot be distinguished from 'no filter', so FlowableIllegalArgumentException is thrown. Callers that do not want this filter should simply not call the method.
Source
Thrown at modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/DeadLetterJobQueryImpl.java:519
this.duedateLowerThan = date;
}
return this;
}
@Override
public DeadLetterJobQueryImpl withException() {
if (inOrStatement) {
this.currentOrQueryObject.withException = true;
} else {
this.withException = true;
}
return this;
}
@Override
public DeadLetterJobQueryImpl exceptionMessage(String exceptionMessage) {
if (exceptionMessage == null) {
throw new FlowableIllegalArgumentException("Provided exception message is null");
}
if (inOrStatement) {
this.currentOrQueryObject.exceptionMessage = exceptionMessage;
} else {
this.exceptionMessage = exceptionMessage;
}
return this;
}
@Override
public DeadLetterJobQueryImpl jobTenantId(String tenantId) {
if (tenantId == null) {
throw new FlowableIllegalArgumentException("Provided tenant id is null");
}
if (inOrStatement) {
this.currentOrQueryObject.tenantId = tenantId;
} else {
this.tenantId = tenantId;View on GitHub (pinned to d6d39ce1c6)
Solutions
- Guard with a null check and skip the filter when the message is absent
- Use empty-string handling deliberately if 'match everything' semantics are desired (note: null is rejected)
- Handle FlowableIllegalArgumentException and surface a user-friendly 'specify an exception message' message
Example fix
// before
query.exceptionMessage(failedJob.getExceptionMessage()); // may be null
// after
if (failedJob.getExceptionMessage() != null) {
query.exceptionMessage(failedJob.getExceptionMessage());
} Defensive patterns
Strategy: validation
Validate before calling
if (exceptionMessage != null) { query.exceptionMessage(exceptionMessage); } Type guard
boolean hasExceptionMessage(String m) { return m != null; } Try / catch
try { query.exceptionMessage(msg); } catch (FlowableIllegalArgumentException e) { log.warn("No exception message to filter on", e); } Prevention
- Remember a job that never failed has a null exception message
- Guard values read from job entities before reusing them in queries
- Treat missing filter values as 'no filter', not null
When it happens
Trigger: Calling deadLetterJobQuery().exceptionMessage(msg) where msg is null, typically from a variable that failed to capture the job's exception message or from an unset request parameter.
Common situations: Reading the exception message from a job/variable that is null (job not yet failed); passing a search term from a REST query parameter that was omitted.
Related errors
- Provided date is null
- Provided tenant id is null
- Provided exception message is null
- Provided tenant id is null
- Provided process definition id is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/9e16508cb414cad7.
Report an issue: GitHub.