flowable/flowable-engine · error · FlowableException

Error converting case reference expression

Error message

Error converting case reference expression

What it means

CaseRefExpressionXmlConverter reads the text content of the case reference expression element to set it on a CaseTask. If reading the element text throws XMLStreamException, it is wrapped in a FlowableException 'Error converting case reference expression'.

Source

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

    @Override
    public String getXMLElementName() {
        return CmmnXmlConstants.ELEMENT_CASE_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 CaseTask caseTask) {
                caseTask.setCaseRefExpression(expression);
            }
        } catch (XMLStreamException e) {
            throw new FlowableException("Error converting case reference expression", e);
        }
        return null;
    }
    
}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Fix the XML around the caseRefExpression element so it is well-formed
  2. Validate the document against the CMMN 1.1 XSD before deployment
  3. Re-export the model from the modeler instead of hand-editing the XML
  4. Check the wrapped XMLStreamException (cause) for the exact parse position

Example fix

// before
<caseRefExpression>Watch out & </caseRefExpression>
// after
<caseRefExpression>${caseRefParam &gt; 0}</caseRefExpression>
Defensive patterns

Strategy: validation

Validate before calling

// ensure expression element text is well-formed before conversion
Document doc = parseXml(cmmnBytes); // throws if malformed
NodeList refs = doc.getElementsByTagNameNS("*", "caseRefExpression");
for (int i = 0; i < refs.getLength(); i++) {
    if (refs.item(i).getTextContent().trim().isEmpty()) throw new IllegalArgumentException("Empty caseRefExpression");
}

Try / catch

try { converter.convertToCmmnModel(provider); } catch (FlowableException e) { throw new DeploymentException("Bad caseRefExpression XML: " + e.getCause().getMessage(), e); }

Prevention

When it happens

Trigger: Converting a CMMN document whose <caseRefExpression> element has malformed/invalid XML content (unclosed tags, illegal characters) causing XMLStreamReader.getElementText() to fail.

Common situations: Hand-edited XML with broken entities or encoding inside the expression element; truncated files; XML produced by tools writing invalid characters into expression text.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/8713ae85a173cea2. Report an issue: GitHub.