flowable/flowable-engine · error · XMLException

Error processing CMMN document

Error message

Error processing CMMN document

What it means

Thrown by ExtensionElementsXMLConverter.convert when any exception occurs while processing a CMMN element's <extensionElements>. Any failure parsing nested extension content (listeners, fields, custom rules) is logged and rethrown as an XMLException with this generic message.

Solutions

  1. Read the chained 'caused by' exception and LOGGER output to find the exact extension element that failed.
  2. Fix or remove the malformed element inside <extensionElements> in the CMMN XML.
  3. Ensure extension elements conform to the Flowable CMMN extension schema for your Flowable version.
Defensive patterns

Strategy: validation

Validate before calling

// Check that every extensionElements child is in the flowable namespace and schema-valid
// before handing the document to the converter (XSD validation step)

Try / catch

try {
    cmmnModel = converter.convertToCmmnModel(stream, encoding);
} catch (XMLException e) {
    if ("Error processing CMMN document".equals(e.getMessage())) {
        LOGGER.error("Conversion failed; cause:", e.getCause()); // the cause pinpoints the faulty extension element
    }
    throw e;
}

Prevention

When it happens

Trigger: Any exception inside convert while reading extension element children: malformed XML stream reads, unrecognized converter errors while handling flowable extension elements, unexpected element structure.

Common situations: CMMN files containing flowable-namespaced extensions produced by other tools or older Flowable versions with changed extension schemas; hand-written extension XML with typos.

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/917d3bb134be1b83. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/ExtensionElementsXMLConverter.java:155

                    }

                } else if (xtr.isEndElement()) {
                    if (CmmnXmlConstants.ELEMENT_TASK_LISTENER.equalsIgnoreCase(xtr.getLocalName())
                                    || CmmnXmlConstants.ELEMENT_PLAN_ITEM_LIFECYCLE_LISTENER.equalsIgnoreCase(xtr.getLocalName())
                                    || CmmnXmlConstants.ELEMENT_CASE_LIFECYCLE_LISTENER.equalsIgnoreCase(xtr.getLocalName())) {
                        
                        conversionHelper.removeCurrentCmmnElement();
                        
                    } else if (CmmnXmlConstants.ELEMENT_EXTENSION_ELEMENTS.equalsIgnoreCase(xtr.getLocalName())) {
                        readyWithChildElements = true;
                    }
                }

            }
        } catch (Exception ex) {
            LOGGER.error("Error processing CMMN document", ex);
            throw new XMLException("Error processing CMMN document", ex);
        }

        return null;
    }

    protected void readCompletionNeutralRule(XMLStreamReader xtr, ConversionHelper conversionHelper) {
        if (conversionHelper.getCurrentCmmnElement() instanceof PlanItemControl planItemControl) {
            CompletionNeutralRule completionNeutralRule = new CompletionNeutralRule();
            completionNeutralRule.setName(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_NAME));

            planItemControl.setCompletionNeutralRule(completionNeutralRule);

            readCommonXmlInfo(completionNeutralRule, xtr);

            boolean readyWithChildElements = false;
            try {

                while (!readyWithChildElements && xtr.hasNext()) {

View on GitHub (pinned to d6d39ce1c6)