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
- 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.
- Validate the CMMN XML locally (XSD validation / Flowable Modeler) before uploading.
- Check database connectivity and that the Flowable schema version matches the REST module version.
- 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
- Validate CMMN XML (XSD) before upload.
- Keep Flowable REST module and engine on the same version and schema.
- Check DB connectivity for deployment persistence.
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
- Could not find a resource with id '${resourceName}' in deplo
- Error retrieving idm engine info
- Could not find a resource with id '<resourceName>' in deploy
- <e.getMessage()>
- Could not find an app deployment with id '<deploymentId>
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/fcf5b558927ddf92.
Report an issue: GitHub.