flowable/flowable-engine · error · FlowableIllegalArgumentException
failed is null
Error message
failed is null
What it means
FlowableIllegalArgumentException thrown by DmnHistoricDecisionExecutionQuery.failed(Boolean) when the failed flag is passed as null. Since the filter is a Boolean tri-state, the library forces callers to explicitly choose true, false, or to not call the method at all, rather than silently treating null as 'no filter'.
Solutions
- Pass Boolean.TRUE or Boolean.FALSE explicitly to filter for failed or successful executions.
- If both failed and successful executions should be returned, omit the failed() call.
- Add a null check or default (e.g. Boolean.TRUE.equals(flag)) before calling failed().
Example fix
// before
query.failed(Boolean.parseBoolean(cfg.get("failed")) ? Boolean.TRUE : null);
// after
if (cfg.containsKey("failed")) {
query.failed(Boolean.parseBoolean(cfg.get("failed")));
} Defensive patterns
Strategy: validation
Validate before calling
if (failed != null) { query.failed(failed); } // or require an explicit true/false up front Type guard
boolean isExplicitBoolean(Boolean b) { return b != null; } Try / catch
try {
query.failed(failed);
} catch (FlowableIllegalArgumentException e) {
log.warn("failed filter skipped: {}", e.getMessage());
} Prevention
- Use primitive boolean or default to Boolean.FALSE when the intent is known.
- Treat failed() as opt-in: only call it when filtering by outcome.
- Null-check wrapper Booleans sourced from maps/config before use.
When it happens
Trigger: Calling .failed(null) on a DmnHistoricDecisionExecutionQuery, often when the flag is sourced from an unset Boolean variable, an absent map/config entry, or a wrapper Boolean that failed autoboxing initialization.
Common situations: Passing a java.lang.Boolean field that was never assigned (defaults to null); binding the flag from an optional request parameter without a default; generic builder-helper code that forwards a possibly-null Boolean unconditionally.
Related errors
- activityId is null
- decisionDefinitionId is null
- decisionKey is null
- deploymentId is null
- executionId is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/dd6de8dcdaafefc4.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/HistoricDecisionExecutionQueryImpl.java:162
return this;
}
@Override
public DmnHistoricDecisionExecutionQuery processInstanceIdWithChildren(String processInstanceId) {
this.processInstanceIdWithChildren = processInstanceId;
return this;
}
@Override
public DmnHistoricDecisionExecutionQuery caseInstanceIdWithChildren(String caseInstanceId) {
this.caseInstanceIdWithChildren = caseInstanceId;
return this;
}
@Override
public DmnHistoricDecisionExecutionQuery failed(Boolean failed) {
if (failed == null) {
throw new FlowableIllegalArgumentException("failed is null");
}
this.failed = failed;
return this;
}
@Override
public DmnHistoricDecisionExecutionQuery tenantId(String tenantId) {
if (tenantId == null) {
throw new FlowableIllegalArgumentException("tenantId is null");
}
this.tenantId = tenantId;
return this;
}
@Override
public DmnHistoricDecisionExecutionQuery tenantIdLike(String tenantIdLike) {
if (tenantIdLike == null) {
throw new FlowableIllegalArgumentException("tenantId is null");View on GitHub (pinned to d6d39ce1c6)