flowable/flowable-engine · error · FlowableIllegalArgumentException
No resource name provided
Error message
No resource name provided
What it means
FlowableIllegalArgumentException thrown by getDeploymentResourceData when the resourceName parameter is null. A deployment id alone is not enough; the API needs the exact resource name to fetch the bytes from the repository.
Solutions
- Pass the exact resource name returned by the deployment resources listing endpoint.
- URL-encode resource names that contain slashes or special characters so routing does not drop them.
- Confirm the resource exists with GET /event-registry-repository/deployments/{deploymentId}/resources before fetching its data.
Example fix
// before byte[] data = resource.getResourceData(); // name was null after bad URL parsing // after String resourceName = "event-definition.json"; byte[] data = resource.getResourceData(deploymentId, URLEncoder.encode(resourceName, StandardCharsets.UTF_8));
Defensive patterns
Strategy: validation
Validate before calling
if (resourceName == null || resourceName.isEmpty()) throw new IllegalArgumentException("resourceName required"); Type guard
boolean hasResourceName = n != null && !n.trim().isEmpty();
Try / catch
try { ... } catch (FlowableIllegalArgumentException e) { return ResponseEntity.badRequest().body(e.getMessage()); } Prevention
- Take resource names from the deployment resources listing, never hardcoded guesses
- URL-encode names with slashes or spaces
When it happens
Trigger: Calling the resource-data endpoint without the resource name segment, or invoking getDeploymentResourceData(deploymentId, null, response) directly.
Common situations: Resource names containing slashes being split incorrectly by URL routing, clients omitting the name after listing resources, or template variables left unsubstituted.
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 resource name provided
- Could not find a resource with name
- Could not find a resource with name
- Could not find a resource with name
- IdentityId is required.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/c741aa4cc777bbcc.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/BaseDeploymentResourceDataResource.java:51
*/
public class BaseDeploymentResourceDataResource {
@Autowired
protected ContentTypeResolver contentTypeResolver;
@Autowired
protected EventRepositoryService repositoryService;
@Autowired(required=false)
protected EventRegistryRestApiInterceptor restApiInterceptor;
protected byte[] getDeploymentResourceData(String deploymentId, String resourceName, HttpServletResponse response) {
if (deploymentId == null) {
throw new FlowableIllegalArgumentException("No deployment id provided");
}
if (resourceName == null) {
throw new FlowableIllegalArgumentException("No resource name provided");
}
// Check if deployment exists
EventDeployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
if (deployment == null) {
throw new FlowableObjectNotFoundException("Could not find a deployment with id '" + deploymentId + "'.", EventDeployment.class);
}
if (restApiInterceptor != null) {
restApiInterceptor.accessDeploymentById(deployment);
}
List<String> resourceList = repositoryService.getDeploymentResourceNames(deploymentId);
if (resourceList.contains(resourceName)) {
String contentType = contentTypeResolver.resolveContentType(resourceName);
response.setContentType(contentType);
View on GitHub (pinned to d6d39ce1c6)