{"record":{"id":"f2eb642532a3e80e","repo":"flowable/flowable-engine","slug":"could-not-find-a-dmn-deployment-with-id-deployme-f2eb64","errorCode":null,"errorMessage":"Could not find a DMN deployment with id '<deploymentId>","messagePattern":"Could not find a DMN deployment with id '<deploymentId>","errorType":"http","errorClass":"FlowableObjectNotFoundException","httpStatus":404,"severity":"warning","filePath":"modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResource.java","lineNumber":61,"sourceCode":"    protected DmnRestResponseFactory dmnRestResponseFactory;\n\n    @Autowired\n    protected DmnRepositoryService dmnRepositoryService;\n    \n    @Autowired(required=false)\n    protected DmnRestApiInterceptor restApiInterceptor;\n\n    @ApiOperation(value = \"Get a decision deployment\", tags = { \"Deployment\" }, nickname = \"getDecisionDeployment\")\n    @ApiResponses(value = {\n            @ApiResponse(code = 200, message = \"Indicates the deployment was found and returned.\"),\n            @ApiResponse(code = 404, message = \"Indicates the requested deployment was not found.\")\n    })\n    @GetMapping(value = \"/dmn-repository/deployments/{deploymentId}\", produces = \"application/json\")\n    public DmnDeploymentResponse getDmnDeployment(@ApiParam(name = \"deploymentId\") @PathVariable String deploymentId) {\n        DmnDeployment deployment = dmnRepositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();\n\n        if (deployment == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find a DMN deployment with id '\" + deploymentId);\n        }\n        \n        if (restApiInterceptor != null) {\n            restApiInterceptor.accessDeploymentById(deployment);\n        }\n\n        return dmnRestResponseFactory.createDmnDeploymentResponse(deployment);\n    }\n\n    @ApiOperation(value = \"Delete a decision deployment\", tags = { \"Deployment\" }, nickname = \"deleteDecisionDeployment\", code = 204)\n    @ApiResponses(value = {\n            @ApiResponse(code = 204, message = \"Indicates the deployment was found and has been deleted. Response-body is intentionally empty.\"),\n            @ApiResponse(code = 404, message = \"Indicates the requested deployment was not found.\")\n    })\n    @DeleteMapping(value = \"/dmn-repository/deployments/{deploymentId}\", produces = \"application/json\")\n    @ResponseStatus(HttpStatus.NO_CONTENT)\n    public void deleteDmnDeployment(@ApiParam(name = \"deploymentId\") @PathVariable String deploymentId) {\n        ","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResource.java#L43-L79","documentation":"GET /dmn-repository/deployments/{deploymentId} queries DmnDeploymentQuery for the id; when no deployment matches, the handler throws FlowableObjectNotFoundException so the caller receives a 404 instead of an empty response. The message confirms the deployment id was not found in the DMN engine repository.","triggerScenarios":"Requesting a deployment id that was never created, was deleted via DELETE, belongs to a different Flowable app/service, or contains a typo/trailing whitespace.","commonSituations":"Stale ids cached in a client UI after redeployment cleanup, pointing a DMN client at the wrong service (process engine deployments vs DMN deployments), environments (test vs prod) with different databases, or id confusion between deployment and decision-table ids.","solutions":["List deployments (GET /dmn-repository/deployments) to confirm the id exists.","Fix the deployment id (check for typos or using a decision/definition id instead).","Verify you are querying the correct Flowable DMN service instance and database.","If it was deleted, redeploy the DMN model and use the new deployment id."],"exampleFix":"// before\nconst dep = await get('/dmn-repository/deployments/' + decisionTableId);\n// after\nconst table = await get('/dmn-repository/decision-tables/' + decisionTableId);\nconst dep = await get('/dmn-repository/deployments/' + table.deploymentId);","handlingStrategy":"try-catch","validationCode":"const list = await get('/dmn-repository/deployments');\nif (!list.data.some(d => d.id === deploymentId)) throw new Error('unknown deployment id: ' + deploymentId);","typeGuard":"function isKnownDeployment(dep) { return typeof dep === 'object' && dep !== null && typeof dep.id === 'string'; }","tryCatchPattern":"try { return await getDeployment(id); }\ncatch (e) { if (e.status === 404) return null; throw e; }","preventionTips":["Resolve ids via list/search endpoints, don't hardcode","Verify environment and database when ids 404","Refresh cached ids after redeploys","Don't confuse decision-table ids with deployment ids"],"tags":["rest-api","dmn","not-found","identifier"],"backgroundTag":"resource-not-found","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"}