flowable/flowable-engine · error · FlowableIllegalArgumentException
No resource id provided
Error message
No resource id provided
What it means
BaseDecisionResource.getDeploymentResourceData throws FlowableIllegalArgumentException when the resourceId path variable is null. The DMN REST layer requires both a deployment id and a resource id to fetch a deployment resource's bytes, and it validates them up front before any query is executed. This is a caller-side bug: the request was dispatched without the required path segment.
Solutions
- Include the actual resource id in the request URL: first GET /dmn-repository/deployments/{deploymentId}/resources to list resource ids, then request one of them.
- Verify the resource is not being consumed with a variable that is null/empty in your client code before building the URL.
- Check your REST controller mapping/wiring to confirm the {resourceId} path variable is bound and forwarded to getDeploymentResourceData.
Example fix
// before
String url = base + "/dmn-repository/deployments/" + deploymentId + "/resources/" + resourceId; // resourceId is null
// after
if (resourceId == null || resourceId.isEmpty()) {
resourceId = listResourceIds(deploymentId).get(0); // fetch a valid id first
}
String url = base + "/dmn-repository/deployments/" + deploymentId + "/resources/" + resourceId; Defensive patterns
Strategy: validation
Validate before calling
if (resourceId == null || resourceId.isEmpty()) throw new IllegalArgumentException("resourceId is required");
// then call the endpoint Prevention
- Always list deployment resources first and use an id from the response
- Validate URL path segments are non-empty before sending requests
- Never build REST URLs by interpolating possibly-null variables without checks
When it happens
Trigger: GET on a DMN deployment-resource endpoint where the {resourceId} path variable resolves to null, i.e. the URL was built without the resource id segment (e.g. /dmn-repository/deployments/{deploymentId}/resources/ with a trailing slash) or a routing/mapping misconfiguration dropped the variable.
Common situations: Hand-constructed URLs in scripts or clients that omit the resource id; template strings with an empty interpolated variable; a proxy or gateway stripping the trailing path segment; copying an example URL and deleting the id by accident.
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
- No resource name provided
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/db15f5798d7c1a9f.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/BaseDecisionResource.java:75
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);
if (resourceList.contains(resourceId)) {
String contentType = contentTypeResolver.resolveContentType(resourceId);View on GitHub (pinned to d6d39ce1c6)