flowable/flowable-engine · error · FlowableIllegalArgumentException

No deployment id provided

Error message

No deployment id provided

What it means

BaseDmnDeploymentResourceDataResource.getDmnDeploymentResourceData throws FlowableIllegalArgumentException("No deployment id provided") when the deploymentId parameter is null. This endpoint fetches a deployment resource by NAME, and both deploymentId and resourceName are mandatory; validation happens before any repository query.

Solutions

  1. Supply the deployment id in the URL path; obtain it via GET /dmn-repository/deployments if unknown.
  2. Fix URL building code so null/empty ids are caught before the request is sent.
  3. Check controller mappings to ensure the deploymentId path variable is correctly bound.

Example fix

// before
String url = base + "/dmn-repository/deployments/" + deploymentId + "/resource-data/" + name; // deploymentId null
// after
Objects.requireNonNull(deploymentId, "deploymentId required");
String url = base + "/dmn-repository/deployments/" + deploymentId + "/resource-data/" + name;
Defensive patterns

Strategy: validation

Validate before calling

if (deploymentId == null || deploymentId.isEmpty()) throw new IllegalArgumentException("deploymentId is required");

Prevention

When it happens

Trigger: GET /dmn-repository/deployments/{deploymentId}/resource-data/{resourceName} with the {deploymentId} path variable null/empty, e.g. an empty interpolated variable in a generated URL or a misbound controller path variable.

Common situations: Template-generated URLs where the deploymentId variable was empty; framework routing that matched a shorter path pattern; client code passing null because a previous lookup failed silently.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — 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/83d785692ba36c6d. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/BaseDmnDeploymentResourceDataResource.java:48

/**
 * @author Yvo Swillens
 */
public class BaseDmnDeploymentResourceDataResource {

    @Autowired
    protected ContentTypeResolver contentTypeResolver;

    @Autowired
    protected DmnRepositoryService dmnRepositoryService;
    
    @Autowired(required=false)
    protected DmnRestApiInterceptor restApiInterceptor;

    protected byte[] getDmnDeploymentResourceData(String deploymentId, String resourceName, HttpServletResponse response) {

        if (deploymentId == null) {
            throw new FlowableIllegalArgumentException("No deployment id provided");
        }
        if (resourceName == null) {
            throw new FlowableIllegalArgumentException("No resource name provided");
        }

        // Check if deployment exists
        DmnDeploymentQuery deploymentQuery = dmnRepositoryService.createDeploymentQuery().deploymentId(deploymentId);
        
        DmnDeployment deployment = deploymentQuery.singleResult();
        if (deployment == null) {
            throw new FlowableObjectNotFoundException("Could not find a DMN deployment with id '" + deploymentId);
        }
        
        if (restApiInterceptor != null) {
            restApiInterceptor.accessDeploymentById(deployment);
        }

        List<String> resourceList = dmnRepositoryService.getDeploymentResourceNames(deploymentId);

View on GitHub (pinned to d6d39ce1c6)