flowable/flowable-engine · warning
Following warnings encountered during case validation
Error message
Following warnings encountered during case validation: {} What it means
After the CaseValidator runs, validateCmmnModel collects ValidationEntry results; errors cause a FlowableException, but warnings are aggregated and logged with this message. It means the CMMN model passed with no hard errors, yet the validator flagged issues (e.g. questionable references, non-fatal modeling problems) that were attached to the deployment.
Solutions
- Read the logged warning list and fix each flagged item in the CMMN XML or modeler source
- Re-validate locally by running the same CaseValidator against the model in a test before deploying
- Treat warnings as review items: they do not block deployment but often indicate the case will misbehave at runtime
- Keep modeler and engine versions aligned so validation rules match what the designer emits
Example fix
// before: deploy despite warnings
repositoryService.createDeployment().addClasspathResource("case.cmmn").deploy();
// after: validate in a test first
List<ValidationEntry> entries = new CmmnCaseValidatorFactory().createValidator().validate(cmmnModel);
if (!entries.isEmpty()) { throw new IllegalStateException("Fix validation entries before deploy"); } Defensive patterns
Strategy: validation
Validate before calling
List<ValidationEntry> entries = caseValidator.validate(cmmnModel);
List<ValidationEntry> warnings = entries.stream()
.filter(e -> e.getSeverity() == Severity.WARNING).collect(Collectors.toList());
if (!warnings.isEmpty()) log.warn("Fix before deploy: {}", warnings); Try / catch
try {
repositoryService.createDeployment().addClasspathResource("case.cmmn").deploy();
} catch (FlowableException e) {
if (e.getMessage().startsWith("Errors while parsing")) {
// fix model validation errors reported in the message
}
} Prevention
- Run the CaseValidator against models in unit tests before deployment
- Review logged warnings on every deploy rather than ignoring them
- Keep the validator's rules and the modeling tool version consistent
When it happens
Trigger: Deploying a CMMN case whose validation returns non-empty warning entries — the validator's validate(cmmnModel) returned ValidationEntry objects of warning severity — and no error-severity entries.
Common situations: Models exported from external tools with minor deviations from Flowable expectations (e.g. dangling criteria, unusual plan item definitions); warnings after upgrading the validator with new checks; partially broken DI/reference information in the XML.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- A 'maxInstanceCount' on a repetition rule with value '0' is…
- An assignee is required when delegating a task.
- At least one correlation parameter value must be provided…
- Business status is null
- callback type is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/38e04c8e3e8bf5ae.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/parser/CmmnParserImpl.java:113
StringBuilder warningBuilder = new StringBuilder();
StringBuilder errorBuilder = new StringBuilder();
for (ValidationEntry entry : validationEntries) {
if (entry.getLevel() == ValidationEntry.Level.Warning) {
warningBuilder.append(entry).append("\n");
} else {
errorBuilder.append(entry).append("\n");
}
}
// Throw exception if there is any error
if (errorBuilder.length() > 0) {
throw new FlowableException("Errors while parsing:\n" + errorBuilder);
}
// Write out warnings (if any)
if (warningBuilder.length() > 0) {
logger.warn("Following warnings encountered during case validation: {}", warningBuilder);
}
}
}
}
public void processCmmnElements(CmmnModel cmmnModel, CmmnParseResult parseResult) {
for (Case caze : cmmnModel.getCases()) {
cmmnParseHandlers.parseElement(this, parseResult, caze);
}
}
public void processDI(CmmnModel cmmnModel, List<CaseDefinitionEntity> caseDefinitions) {
if (caseDefinitions.isEmpty()) {
return;
}
View on GitHub (pinned to d6d39ce1c6)