flowable/flowable-engine · error · FlowableIllegalArgumentException
Provided exception message is null
Error message
Provided exception message is null
What it means
ExternalWorkerJobQueryImpl.exceptionMessage(String) rejects a null exception message because a null filter value would yield an invalid equality predicate on the EXCEPTION_MSG_ column. Flowable validates required query arguments eagerly and throws FlowableIllegalArgumentException. Note it filters by exact message, not substring.
Solutions
- Only call exceptionMessage(msg) when msg != null, otherwise skip the filter
- If searching failed jobs, combine jobWithException() with a non-null message
- Branch on message presence instead of passing the null value through
- Normalize/escape the message if matching recorded exception messages
Example fix
// before
query.jobWithException().exceptionMessage(failedJob.getExceptionMessage());
// after
query.jobWithException();
if (failedJob.getExceptionMessage() != null) {
query.exceptionMessage(failedJob.getExceptionMessage());
} Defensive patterns
Strategy: validation
Validate before calling
if (exceptionMessage != null) {
externalWorkerJobQuery.jobWithException().exceptionMessage(exceptionMessage);
} Type guard
boolean hasMessage(String m) { return m != null && !m.isEmpty(); } Prevention
- Remember Job.getExceptionMessage() returns null for jobs without exceptions
- Branch on message presence before filtering
- Combine with jobWithException() so the filter is meaningful
When it happens
Trigger: Calling exceptionMessage(null), e.g. when copying an exception message from a Job entity whose getExceptionMessage() returned null, or a search input that was never set.
Common situations: Admin consoles searching failed jobs by error text; retry tooling filtering on a job's stored exception message when no exception was recorded.
Related errors
- EntryCriterionId is null
- Involved user is null
- Plan item definition type is null
- Plan item definition types is null
- Provided date is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/81470ed9d65750e7.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/ExternalWorkerJobQueryImpl.java:456
this.duedateLowerThan = date;
}
return this;
}
@Override
public ExternalWorkerJobQuery withException() {
if (inOrStatement) {
this.currentOrQueryObject.withException = true;
} else {
this.withException = true;
}
return this;
}
@Override
public ExternalWorkerJobQuery 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 ExternalWorkerJobQuery 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)