flowable/flowable-engine · error · FlowableIllegalArgumentException

No deployment id provided

Error message

No deployment id provided

What it means

BaseDeploymentResourceDataResource.getDeploymentResourceData first validates that a deploymentId was supplied before looking up the deployment resource content. A null deploymentId yields FlowableIllegalArgumentException. In the REST layer this surfaces as HTTP 400 because the path variable resolved to nothing usable.

Solutions

  1. Ensure the URL includes a valid deployment id: GET /repository/deployments/{deploymentId}/resourcedata/{resourceName}.
  2. Validate deploymentId is non-null/non-empty in the client before calling.
  3. Fix URL-templating code that leaves the placeholder unsubstituted.

Example fix

// before
client.get("/repository/deployments//resourcedata/process.bpmn");
// after
client.get("/repository/deployments/2501/resourcedata/process.bpmn");
Defensive patterns

Strategy: validation

Validate before calling

if (!deploymentId) throw new Error('deploymentId is required');

Try / catch

try { ... } catch (e) { if (e.status === 400) log.error('Missing deployment id in request'); throw e; }

Prevention

When it happens

Trigger: Requesting deployment resource data with a null/empty deploymentId (e.g. malformed URL path where {deploymentId} is empty or a misconfigured client sends no id).

Common situations: Template variable not substituted in generated URLs; client framework strips empty path segments; calling the protected helper method directly from custom code with a null argument.

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/067fb8e09adddadb. Report an issue: GitHub.

Appendix: source

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

/**
 * @author Frederik Heremans
 */
public class BaseDeploymentResourceDataResource {

    @Autowired
    protected ContentTypeResolver contentTypeResolver;

    @Autowired
    protected RepositoryService repositoryService;
    
    @Autowired(required=false)
    protected BpmnRestApiInterceptor restApiInterceptor;

    protected byte[] getDeploymentResourceData(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
        Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
        if (deployment == null) {
            throw new FlowableObjectNotFoundException("Could not find a deployment with id '" + deploymentId + "'.", Deployment.class);
        }
        
        if (restApiInterceptor != null) {
            restApiInterceptor.accessDeploymentById(deployment);
        }

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

        if (resourceList.contains(resourceName)) {

View on GitHub (pinned to d6d39ce1c6)