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

  1. List deployments (GET /dmn-repository/deployments) to confirm the id exists.
  2. Fix the deployment id (check for typos or using a decision/definition id instead).
  3. Verify you are querying the correct Flowable DMN service instance and database.
  4. 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

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


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)