{"record":{"id":"d995c2b18d349dda","repo":"flowable/flowable-engine","slug":"no-resource-name-provided","errorCode":null,"errorMessage":"No resource name provided","messagePattern":"No resource name provided","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResourceDataResource.java","lineNumber":68,"sourceCode":"    @Autowired(required=false)\n    protected AppRestApiInterceptor restApiInterceptor;\n\n    @ApiOperation(value = \"Get an app deployment resource content\", tags = {\"App Deployments\" }, nickname = \"getAppDeploymentResource\",\n            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.\")\n    @ApiResponses(value = {\n            @ApiResponse(code = 200, message = \"Indicates both app deployment and resource have been found and the resource data has been returned.\"),\n            @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.\") })\n    @GetMapping(value = \"/app-repository/deployments/{deploymentId}/resourcedata/{resourceName}\")\n    @ResponseBody\n    public byte[] getAppDeploymentResource(@ApiParam(name = \"deploymentId\") @PathVariable(\"deploymentId\") String deploymentId,\n            @ApiParam(name = \"resourceName\") @PathVariable(\"resourceName\") String resourceName,\n            HttpServletResponse response) {\n        \n        if (deploymentId == null) {\n            throw new FlowableIllegalArgumentException(\"No deployment id provided\");\n        }\n        if (resourceName == null) {\n            throw new FlowableIllegalArgumentException(\"No resource name provided\");\n        }\n\n        // Check if deployment exists\n        AppDeployment deployment = appRepositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();\n        if (deployment == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find an app deployment with id '\" + deploymentId);\n        }\n        \n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessDeploymentById(deployment);\n        }\n\n        List<String> resourceList = appRepositoryService.getDeploymentResourceNames(deploymentId);\n\n        if (resourceList.contains(resourceName)) {\n            response.setContentType(\"application/json\");\n            try (final InputStream resourceStream = appRepositoryService.getResourceAsStream(deploymentId, resourceName)) {\n                return IOUtils.toByteArray(resourceStream);","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResourceDataResource.java#L50-L86","documentation":"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.","triggerScenarios":"GET /app-repository/app-deployments/{deploymentId}/resources/ with an empty or absent resource name, or a programmatic call to AppDeploymentResourceDataResource.getAppDeploymentResource passing resourceName=null.","commonSituations":"Truncated URLs, MVC path-variable misconfiguration, template variables not expanded when building the request in code or tooling.","solutions":["Include the resource name in the URL path after /resources/","Verify the deployment actually contains the resource name (case-sensitive) via the deployments resources endpoint","If calling the controller method directly, pass a non-null resourceName"],"exampleFix":"// before\nGET /app-repository/app-deployments/12345/resources/\n// after\nGET /app-repository/app-deployments/12345/resources/my-app.app.zip","handlingStrategy":"validation","validationCode":"if (deploymentId == null || deploymentId.isEmpty() || resourceName == null || resourceName.isEmpty()) {\n    throw new IllegalArgumentException(\"deploymentId and resourceName are required\");\n}","typeGuard":null,"tryCatchPattern":"try { byte[] data = /* REST call */; } catch (FlowableIllegalArgumentException e) { log.error(\"Missing path parameter: {}\", e.getMessage()); }","preventionTips":["Always build URLs from templates so path variables cannot be empty","Validate path variables before issuing the request","Log the full request URL when debugging REST calls"],"tags":["rest","flowable","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}