flowable/flowable-engine · warning

Error determine output clause for position: {}

Error message

Error determine output clause for position: {}

What it means

Warning logged by OutputEntryParser.parseChildElement when the output clause (column) for the just-parsed output entry cannot be determined. The parser maps the entry to decisionTable.getOutputs().get(rule.getOutputEntries().size()); if outputs is null or the index is beyond the column count, outputClause remains null and this warning is emitted, but parsing proceeds with a null clause — the model's rule cells no longer line up with its output columns.

Source

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

                } 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);

        rule.addOutputEntry(outputContainer);
    }
}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Open the .dmn file and make each <rule> contain exactly as many <outputEntry> elements as <output> clauses.
  2. Validate the DMN XML against the DMN XSD to catch header/rule mismatch.
  3. Re-export the table from the DMN modeling tool to regenerate a consistent structure.
  4. Add pre-deployment model validation so the broken table is rejected instead of silently mis-mapped.

Example fix

<!-- before: 1 output column, rule has 2 outputEntries -->
<rule><outputEntry>a</outputEntry><outputEntry>b</outputEntry></rule>
<!-- after -->
<rule><outputEntry>a</outputEntry></rule>
Defensive patterns

Strategy: validation

Validate before calling

// pre-deploy: outputEntries per rule must equal output columns
long outputs = xml.count("<dmn:output ");
for (Element rule : rules) {
  int out = rule.getElementsByTag("outputEntry").size();
  if (out != outputs) throw new IllegalArgumentException(
    "Rule has " + out + " outputEntries but table has " + outputs + " outputs");
}

Prevention

When it happens

Trigger: A <rule> in a <decisionTable> has more <outputEntry> elements than the table has <output> clauses, or getOutputs() is null because the output clauses failed to parse — a structural mismatch in the DMN XML.

Common situations: Hand-edited .dmn where an output column was deleted but rule cells kept; merge conflicts dropping an <output> element; corrupted tool export.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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