flowable/flowable-engine · error · FlowableException

Error converting decision reference expression

Error message

Error converting decision reference expression

What it means

Thrown by DecisionRefExpressionXmlConverter.convert when an XMLStreamException occurs while reading the decisionRefExpression text of a DecisionTask. It signals low-level XML stream failure while parsing the <decisionRefExpression> element.

Source

Thrown at modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/DecisionRefExpressionXmlConverter.java:46

    @Override
    public String getXMLElementName() {
        return CmmnXmlConstants.ELEMENT_DECISION_REF_EXPRESSION;
    }

    @Override
    public boolean hasChildElements() {
        return false;
    }

    @Override
    protected CmmnElement convert(XMLStreamReader xtr, ConversionHelper conversionHelper) {
        try {
            String expression = xtr.getElementText();
            if (StringUtils.isNotEmpty(expression) && conversionHelper.getCurrentCmmnElement() instanceof DecisionTask decisionTask) {
                decisionTask.setDecisionRefExpression(expression);
            }
        } catch (XMLStreamException e) {
            throw new FlowableException("Error converting decision reference expression", e);
        }
        return null;
    }

}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Validate the XML and fix malformed markup around the decisionRefExpression element.
  2. Escape XML-special characters in the expression value.
  3. Re-export or re-download the CMMN file to rule out truncation/corruption.

Example fix

<!-- before -->
<decisionTask id="dt1">
  <decisionRefExpression>${decision & 'key'}</decisionRefExpression>
</decisionTask>
<!-- after -->
<decisionTask id="dt1">
  <decisionRefExpression>${decision &amp; 'key'}</decisionRefExpression>
</decisionTask>
Defensive patterns

Strategy: validation

Validate before calling

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(cmmnFile); // strict pre-parse catches malformed decisionRefExpression markup

Try / catch

try {
    cmmnModel = converter.convertToCmmnModel(stream, encoding);
} catch (FlowableException e) {
    if ("Error converting decision reference expression".equals(e.getMessage())) {
        // inspect cause XMLStreamException, repair the decisionRefExpression element
    }
    throw e;
}

Prevention

When it happens

Trigger: getElementText() throws XMLStreamException due to malformed or truncated XML within the <decisionRefExpression> element, unclosed tags, or invalid characters in the expression.

Common situations: Truncated CMMN files during transfer; unescaped expression characters; files generated by faulty exporters; encoding mismatches.

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/4582c264a8feedfb. Report an issue: GitHub.