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

  1. Read the logged warning list and fix each flagged item in the CMMN XML or modeler source
  2. Re-validate locally by running the same CaseValidator against the model in a test before deploying
  3. Treat warnings as review items: they do not block deployment but often indicate the case will misbehave at runtime
  4. 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

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


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)