{"record":{"id":"db15f5798d7c1a9f","repo":"flowable/flowable-engine","slug":"no-resource-id-provided","errorCode":null,"errorMessage":"No resource id provided","messagePattern":"No resource id provided","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/BaseDecisionResource.java","lineNumber":75,"sourceCode":"\n        if (decision == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find a decision with id '\" + decisionId + \"'.\");\n        }\n        \n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessDecisionTableInfoById(decision);\n        }\n        \n        return decision;\n    }\n\n    protected byte[] getDeploymentResourceData(String deploymentId, String resourceId, HttpServletResponse response) {\n\n        if (deploymentId == null) {\n            throw new FlowableIllegalArgumentException(\"No deployment id provided\");\n        }\n        if (resourceId == null) {\n            throw new FlowableIllegalArgumentException(\"No resource id provided\");\n        }\n\n        // Check if deployment exists\n        DmnDeploymentQuery deploymentQuery = dmnRepositoryService.createDeploymentQuery().deploymentId(deploymentId);\n        \n        DmnDeployment deployment = deploymentQuery.singleResult();\n        if (deployment == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find a deployment with id '\" + deploymentId);\n        }\n        \n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessDeploymentById(deployment);\n        }\n\n        List<String> resourceList = dmnRepositoryService.getDeploymentResourceNames(deploymentId);\n\n        if (resourceList.contains(resourceId)) {\n            String contentType = contentTypeResolver.resolveContentType(resourceId);","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/BaseDecisionResource.java#L57-L93","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nString url = base + \"/dmn-repository/deployments/\" + deploymentId + \"/resources/\" + resourceId; // resourceId is null\n// after\nif (resourceId == null || resourceId.isEmpty()) {\n    resourceId = listResourceIds(deploymentId).get(0); // fetch a valid id first\n}\nString url = base + \"/dmn-repository/deployments/\" + deploymentId + \"/resources/\" + resourceId;","handlingStrategy":"validation","validationCode":"if (resourceId == null || resourceId.isEmpty()) throw new IllegalArgumentException(\"resourceId is required\");\n// then call the endpoint","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["rest","validation","missing-parameter"],"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-18T11:17:12.947Z"}