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
- Fix the XML around the caseRefExpression element so it is well-formed
- Validate the document against the CMMN 1.1 XSD before deployment
- Re-export the model from the modeler instead of hand-editing the XML
- Check the wrapped XMLStreamException (cause) for the exact parse position
Example fix
// before
<caseRefExpression>Watch out & </caseRefExpression>
// after
<caseRefExpression>${caseRefParam > 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
- Never hand-edit XML around expression elements; use the modeler
- Escape &, <, > inside expression text
- Validate against the XSD before deployment
- Check the wrapped XMLStreamException for the exact position
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
- There can only be one reactivation listener on a case model,
- ${this.getClass()} error: element is not a CaseElement : ${b
- Error processing CMMN document
- Setting variable is not supported for read only delegate exe
- Setting transient variable is not supported for read only de
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/8713ae85a173cea2.
Report an issue: GitHub.