flowable/flowable-engine · error · FlowableException

${e.getMessage()}

Error message

${e.getMessage()}

What it means

This is the catch-all wrapper at the end of uploadDeployment: any exception during deployment creation that is not already a FlowableException is rethrown as FlowableException with the original exception's message. The message therefore reflects the underlying cause (I/O errors, XML parse failures, DB errors, etc.).

Source

Thrown at modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResource.java:246

            }

            if (tenantId != null) {
                deploymentBuilder.tenantId(tenantId);
            }

            if (restApiInterceptor != null) {
                restApiInterceptor.enhanceDeployment(deploymentBuilder);
            }

            CmmnDeployment deployment = deploymentBuilder.deploy();

            return restResponseFactory.createDeploymentResponse(deployment);

        } catch (Exception e) {
            if (e instanceof FlowableException) {
                throw (FlowableException) e;
            }
            throw new FlowableException(e.getMessage(), e);
        }
    }

    public Map<String, String> splitQueryString(String queryString) {
        if (StringUtils.isEmpty(queryString)) {
            return Collections.emptyMap();
        }
        Map<String, String> queryMap = new HashMap<>();
        for (String param : queryString.split("&")) {
            queryMap.put(StringUtils.substringBefore(param, "="), decode(StringUtils.substringAfter(param, "=")));
        }
        return queryMap;
    }

    protected String decode(String string) {
        if (string != null) {
            return URLDecoder.decode(string, StandardCharsets.UTF_8);
        }

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Read the wrapped cause message (the FlowableException message is e.getMessage() of the root cause) and fix the underlying issue — often an XML syntax/XSD error in the deployed file.
  2. Validate the CMMN XML locally (XSD validation / Flowable Modeler) before uploading.
  3. Check database connectivity and that the Flowable schema version matches the REST module version.
  4. Inspect server logs for the full stack trace to identify the root exception type.
Defensive patterns

Strategy: try-catch

Validate before calling

validate CMMN XML against the Flowable XSD before upload

Try / catch

try {
  uploadDeployment(file);
} catch (FlowableException e) {
  log.error("Deployment failed: " + e.getMessage(), e); // message wraps root cause
}

Prevention

When it happens

Trigger: uploadDeployment fails while reading the uploaded stream, parsing the CMMN XML, building the deployment, or persisting it — with a non-Flowable exception (IOException, SAXParseException, SQLIntegrityConstraintViolationException, etc.).

Common situations: Malformed CMMN XML failing XSD validation, corrupted .zip archives, network interruption during upload, database constraint violations or connection loss, and file streams already consumed by earlier filters.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/fcf5b558927ddf92. Report an issue: GitHub.