flowable/flowable-engine · error · FlowableIllegalArgumentException
No decision execution id provided
Error message
No decision execution id provided
What it means
Thrown by getExecutionAuditData when the decisionExecutionId path/parameter supplied to the audit-data endpoint is null. The endpoint needs an id to look up and stream the stored execution JSON. It is rejected before any database access.
Solutions
- Provide a non-null decisionExecutionId in the URL path before calling the endpoint
- Build the URL from a validated variable rather than string concatenation that can yield an empty segment
- Fetch a valid id from the historic-decision-executions list endpoint if unknown
Example fix
// before String url = "/dmn-history/historic-decision-executions/" + id; // id == null // after Objects.requireNonNull(id, "decisionExecutionId must be set"); String url = "/dmn-history/historic-decision-executions/" + id;
Defensive patterns
Strategy: validation
Validate before calling
if (decisionExecutionId == null || decisionExecutionId.isEmpty()) {
throw new IllegalArgumentException("decisionExecutionId must be provided");
} Type guard
boolean hasId = id != null && !id.trim().isEmpty();
Try / catch
try {
audit = client.getExecutionAuditData(id);
} catch (HttpClientErrorException e) {
if (e.getResponseBodyAsString().contains("No decision execution id provided")) {
throw new IllegalArgumentException("audit-data call requires an id", e);
}
throw e;
} Prevention
- Interpolate the id into the URL before requesting
- Never build URLs from possibly-null variables without a null check
- Prefer typed client methods over manual URL strings
When it happens
Trigger: GET /dmn-history/historic-decision-executions/{decisionExecutionId}/audit-data (or similar) where the id path variable is empty/null after routing.
Common situations: Client building the URL without substituting the id placeholder; a proxy/gateway stripping an empty path segment; programmatic invocation passing null into the helper.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- No deployment id provided
- File must be of type .dmn
- Id cannot be null.
- Invalid reschedule timer action. Reschedule timer actions…
- No variable name was found in request body.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/e1550b9ef156cbb2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/history/BaseHistoricDecisionExecutionResource.java:68
DmnHistoricDecisionExecutionQuery historicDecisionExecutionQuery = dmnHistoryService.createHistoricDecisionExecutionQuery().id(decisionExecutionId);
DmnHistoricDecisionExecution decisionExecution = historicDecisionExecutionQuery.singleResult();
if (decisionExecution == null) {
throw new FlowableObjectNotFoundException("Could not find a decision execution with id '" + decisionExecutionId + "'");
}
if (restApiInterceptor != null) {
restApiInterceptor.accessDecisionHistoryInfoById(decisionExecution);
}
return decisionExecution;
}
protected String getExecutionAuditData(String decisionExecutionId, HttpServletResponse response) {
if (decisionExecutionId == null) {
throw new FlowableIllegalArgumentException("No decision execution id provided");
}
// Check if deployment exists
DmnHistoricDecisionExecution decisionExecution = getHistoricDecisionExecutionFromRequest(decisionExecutionId);
response.setContentType("application/json");
return decisionExecution.getExecutionJson();
}
}
View on GitHub (pinned to d6d39ce1c6)