{"record":{"id":"ea594e88e3412e18","repo":"flowable/flowable-engine","slug":"no-deployment-id-provided-ea594e","errorCode":null,"errorMessage":"No deployment id provided","messagePattern":"No deployment 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":72,"sourceCode":"     */\n    protected DmnDecision getDecisionFromRequest(String decisionId) {\n        DmnDecision decision = dmnRepositoryService.getDecision(decisionId);\n\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);","sourceCodeStart":54,"sourceCodeEnd":90,"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#L54-L90","documentation":"Thrown by getDeploymentResourceData when deploymentId is null while fetching a deployment resource's bytes. A companion check enforces a non-null resourceId too. This validation prevents ambiguous resource lookups; callers get a clear 400-level error.","triggerScenarios":"GET /dmn-repository/deployments/{deploymentId}/resources/{resourceId} where the deployment id path segment resolves to null (missing/empty placeholder).","commonSituations":"URL template not fully interpolated before the request; client passes only resourceId assuming it is globally unique; programmatic helper invoked with null deploymentId.","solutions":["Include a valid deployment id in the URL path (obtain from GET /dmn-repository/deployments)","Fix URL/placeholder construction so the deploymentId segment is never empty","Validate both deploymentId and resourceId client-side before calling"],"exampleFix":"// before\nGET /dmn-repository/deployments//resources/model.dmn\n// after\nGET /dmn-repository/deployments/4f3a.../resources/model.dmn","handlingStrategy":"validation","validationCode":"if (deploymentId == null || deploymentId.isEmpty() || resourceId == null || resourceId.isEmpty()) {\n    throw new IllegalArgumentException(\"deploymentId and resourceId are required\");\n}","typeGuard":"boolean ready = did != null && !did.isEmpty() && rid != null && !rid.isEmpty();","tryCatchPattern":"try {\n    byte[] data = client.getDeploymentResource(deploymentId, resourceId);\n} catch (HttpClientErrorException e) {\n    if (e.getResponseBodyAsString().contains(\"No deployment id provided\")) {\n        throw new IllegalArgumentException(\"deploymentId missing in URL\", e);\n    }\n    throw e;\n}","preventionTips":["Build resource URLs from both a deployment id and a resource id","Fetch deployment ids from the deployments list endpoint","Validate URL templates are fully interpolated before sending"],"tags":["rest-api","dmn","repository","missing-field","validation"],"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"}