flowable/flowable-engine · error · FlowableIllegalArgumentException
No deployment id provided
Error message
No deployment id provided
What it means
Thrown by getDeploymentResourceData when deploymentId is null while fetching a deployment resource's bytes. A companion check enforces a non-null resourceId too. This validation prevents ambiguous resource lookups; callers get a clear 400-level error.
Solutions
- Include a valid deployment id in the URL path (obtain from GET /dmn-repository/deployments)
- Fix URL/placeholder construction so the deploymentId segment is never empty
- Validate both deploymentId and resourceId client-side before calling
Example fix
// before GET /dmn-repository/deployments//resources/model.dmn // after GET /dmn-repository/deployments/4f3a.../resources/model.dmn
Defensive patterns
Strategy: validation
Validate before calling
if (deploymentId == null || deploymentId.isEmpty() || resourceId == null || resourceId.isEmpty()) {
throw new IllegalArgumentException("deploymentId and resourceId are required");
} Type guard
boolean ready = did != null && !did.isEmpty() && rid != null && !rid.isEmpty();
Try / catch
try {
byte[] data = client.getDeploymentResource(deploymentId, resourceId);
} catch (HttpClientErrorException e) {
if (e.getResponseBodyAsString().contains("No deployment id provided")) {
throw new IllegalArgumentException("deploymentId missing in URL", e);
}
throw e;
} Prevention
- Build resource URLs from both a deployment id and a resource id
- Fetch deployment ids from the deployments list endpoint
- Validate URL templates are fully interpolated before sending
When it happens
Trigger: GET /dmn-repository/deployments/{deploymentId}/resources/{resourceId} where the deployment id path segment resolves to null (missing/empty placeholder).
Common situations: URL template not fully interpolated before the request; client passes only resourceId assuming it is globally unique; programmatic helper invoked with null deploymentId.
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 decision execution 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/ea594e88e3412e18.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/BaseDecisionResource.java:72
*/
protected DmnDecision getDecisionFromRequest(String decisionId) {
DmnDecision decision = dmnRepositoryService.getDecision(decisionId);
if (decision == null) {
throw new FlowableObjectNotFoundException("Could not find a decision with id '" + decisionId + "'.");
}
if (restApiInterceptor != null) {
restApiInterceptor.accessDecisionTableInfoById(decision);
}
return decision;
}
protected byte[] getDeploymentResourceData(String deploymentId, String resourceId, HttpServletResponse response) {
if (deploymentId == null) {
throw new FlowableIllegalArgumentException("No deployment id provided");
}
if (resourceId == null) {
throw new FlowableIllegalArgumentException("No resource id provided");
}
// Check if deployment exists
DmnDeploymentQuery deploymentQuery = dmnRepositoryService.createDeploymentQuery().deploymentId(deploymentId);
DmnDeployment deployment = deploymentQuery.singleResult();
if (deployment == null) {
throw new FlowableObjectNotFoundException("Could not find a deployment with id '" + deploymentId);
}
if (restApiInterceptor != null) {
restApiInterceptor.accessDeploymentById(deployment);
}
List<String> resourceList = dmnRepositoryService.getDeploymentResourceNames(deploymentId);View on GitHub (pinned to d6d39ce1c6)