flowable/flowable-engine · error · FlowableIllegalArgumentException

No resource name provided

Error message

No resource name provided

What it means

FlowableIllegalArgumentException thrown by getAppDeploymentResource when the resource-name path variable is missing. The REST endpoint requires both a deployment id and a resource name; the library validates them upfront before querying the repository. It indicates a malformed request URL rather than a data problem.

Source

Thrown at modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResourceDataResource.java:68

    @Autowired(required=false)
    protected AppRestApiInterceptor restApiInterceptor;

    @ApiOperation(value = "Get an app deployment resource content", tags = {"App Deployments" }, nickname = "getAppDeploymentResource",
            notes = "The response body will contain the binary resource-content for the requested resource. The response content-type will be the same as the type returned in the resources mimeType property. Also, a content-disposition header is set, allowing browsers to download the file instead of displaying it.")
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Indicates both app deployment and resource have been found and the resource data has been returned."),
            @ApiResponse(code = 404, message = "Indicates the requested app deployment was not found or there is no resource with the given id present in the app deployment. The status-description contains additional information.") })
    @GetMapping(value = "/app-repository/deployments/{deploymentId}/resourcedata/{resourceName}")
    @ResponseBody
    public byte[] getAppDeploymentResource(@ApiParam(name = "deploymentId") @PathVariable("deploymentId") String deploymentId,
            @ApiParam(name = "resourceName") @PathVariable("resourceName") 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
        AppDeployment deployment = appRepositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
        if (deployment == null) {
            throw new FlowableObjectNotFoundException("Could not find an app deployment with id '" + deploymentId);
        }
        
        if (restApiInterceptor != null) {
            restApiInterceptor.accessDeploymentById(deployment);
        }

        List<String> resourceList = appRepositoryService.getDeploymentResourceNames(deploymentId);

        if (resourceList.contains(resourceName)) {
            response.setContentType("application/json");
            try (final InputStream resourceStream = appRepositoryService.getResourceAsStream(deploymentId, resourceName)) {
                return IOUtils.toByteArray(resourceStream);

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Include the resource name in the URL path after /resources/
  2. Verify the deployment actually contains the resource name (case-sensitive) via the deployments resources endpoint
  3. If calling the controller method directly, pass a non-null resourceName

Example fix

// before
GET /app-repository/app-deployments/12345/resources/
// after
GET /app-repository/app-deployments/12345/resources/my-app.app.zip
Defensive patterns

Strategy: validation

Validate before calling

if (deploymentId == null || deploymentId.isEmpty() || resourceName == null || resourceName.isEmpty()) {
    throw new IllegalArgumentException("deploymentId and resourceName are required");
}

Try / catch

try { byte[] data = /* REST call */; } catch (FlowableIllegalArgumentException e) { log.error("Missing path parameter: {}", e.getMessage()); }

Prevention

When it happens

Trigger: GET /app-repository/app-deployments/{deploymentId}/resources/ with an empty or absent resource name, or a programmatic call to AppDeploymentResourceDataResource.getAppDeploymentResource passing resourceName=null.

Common situations: Truncated URLs, MVC path-variable misconfiguration, template variables not expanded when building the request in code or tooling.

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/d995c2b18d349dda. Report an issue: GitHub.