flowable/flowable-engine · warning · FlowableObjectNotFoundException
Could not find a DMN deployment with id
Error message
Could not find a DMN deployment with id '<deploymentId>
What it means
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.
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.
Example fix
// before
const dep = await get('/dmn-repository/deployments/' + decisionTableId);
// after
const table = await get('/dmn-repository/decision-tables/' + decisionTableId);
const dep = await get('/dmn-repository/deployments/' + table.deploymentId); Defensive patterns
Strategy: try-catch
Validate before calling
const list = await get('/dmn-repository/deployments');
if (!list.data.some(d => d.id === deploymentId)) throw new Error('unknown deployment id: ' + deploymentId); Type guard
function isKnownDeployment(dep) { return typeof dep === 'object' && dep !== null && typeof dep.id === 'string'; } Try / catch
try { return await getDeployment(id); }
catch (e) { if (e.status === 404) return null; throw e; } Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- ${aonfe.getMessage()}
- Batch part with id ' ' does not have a batch part document.
- Batch with id ' ' does not have a batch document.
- Cannot find case definition for id:
- Cannot find process definition for id
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/f2eb642532a3e80e.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResource.java:61
protected DmnRestResponseFactory dmnRestResponseFactory;
@Autowired
protected DmnRepositoryService dmnRepositoryService;
@Autowired(required=false)
protected DmnRestApiInterceptor restApiInterceptor;
@ApiOperation(value = "Get a decision deployment", tags = { "Deployment" }, nickname = "getDecisionDeployment")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Indicates the deployment was found and returned."),
@ApiResponse(code = 404, message = "Indicates the requested deployment was not found.")
})
@GetMapping(value = "/dmn-repository/deployments/{deploymentId}", produces = "application/json")
public DmnDeploymentResponse getDmnDeployment(@ApiParam(name = "deploymentId") @PathVariable String deploymentId) {
DmnDeployment deployment = dmnRepositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
if (deployment == null) {
throw new FlowableObjectNotFoundException("Could not find a DMN deployment with id '" + deploymentId);
}
if (restApiInterceptor != null) {
restApiInterceptor.accessDeploymentById(deployment);
}
return dmnRestResponseFactory.createDmnDeploymentResponse(deployment);
}
@ApiOperation(value = "Delete a decision deployment", tags = { "Deployment" }, nickname = "deleteDecisionDeployment", code = 204)
@ApiResponses(value = {
@ApiResponse(code = 204, message = "Indicates the deployment was found and has been deleted. Response-body is intentionally empty."),
@ApiResponse(code = 404, message = "Indicates the requested deployment was not found.")
})
@DeleteMapping(value = "/dmn-repository/deployments/{deploymentId}", produces = "application/json")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteDmnDeployment(@ApiParam(name = "deploymentId") @PathVariable String deploymentId) {
View on GitHub (pinned to d6d39ce1c6)