flowable/flowable-engine · warning

Error parsing output entry

Error message

Error parsing output entry

What it means

Warning logged by OutputEntryParser.parseChildElement when an exception is thrown while parsing a rule's <outputEntry> element from the DMN XML stream. Like the other child parsers, it logs and continues, leaving the entry null/partial so the rule cell is effectively empty in the deployed model instead of the deployment failing.

Source

Thrown at modules/flowable-dmn-xml-converter/src/main/java/org/flowable/dmn/converter/child/OutputEntryParser.java:57

            return;
        }

        LiteralExpression outputEntry = new LiteralExpression();
        outputEntry.setId(xtr.getAttributeValue(null, ATTRIBUTE_ID));

        boolean readyWithOutputEntry = false;
        try {
            while (!readyWithOutputEntry && xtr.hasNext()) {
                xtr.next();
                if (xtr.isStartElement() && ELEMENT_TEXT.equalsIgnoreCase(xtr.getLocalName())) {
                    outputEntry.setText(xtr.getElementText());

                } else if (xtr.isEndElement() && getElementName().equalsIgnoreCase(xtr.getLocalName())) {
                    readyWithOutputEntry = true;
                }
            }
        } catch (Exception e) {
            LOGGER.warn("Error parsing output entry", e);
        }

        // determine corresponding output clause based on position
        OutputClause outputClause = null;
        DecisionTable decisionTable = (DecisionTable) decision.getExpression();
        if (decisionTable.getOutputs() != null) {
            if (decisionTable.getOutputs().get(rule.getOutputEntries().size()) != null) {
                outputClause = decisionTable.getOutputs().get(rule.getOutputEntries().size());
            }
        }

        if (outputClause == null) {
            LOGGER.warn("Error determine output clause for position: {}", decisionTable.getOutputs());
        }

        RuleOutputClauseContainer outputContainer = new RuleOutputClauseContainer();
        outputContainer.setOutputClause(outputClause);
        outputContainer.setOutputEntry(outputEntry);

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Locate the error via the attached stack trace (line/column of the XMLStreamException).
  2. Escape XML special characters in the expression or wrap it in CDATA.
  3. Validate the .dmn against the DMN XSD.
  4. Re-export the decision table from the DMN editor.

Example fix

<!-- before -->
<outputEntry><text>riskLevel = "high" && amount > 1000</text></outputEntry>
<!-- after -->
<outputEntry><text>riskLevel = "high" &amp;&amp; amount &gt; 1000</text></outputEntry>
Defensive patterns

Strategy: validation

Validate before calling

// XML-escape output expressions before writing .dmn
String safe = expr.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");

Prevention

When it happens

Trigger: While consuming XMLStreamReader events until the </outputEntry> end element, the reader throws (malformed XML, unexpected EOF, invalid characters in the expression text).

Common situations: Unescaped <, >, & characters inside FEEL output expressions; truncated .dmn files; XML produced by a non-conformant exporter.

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/294d530f78e060ff. Report an issue: GitHub.