flowable/flowable-engine · warning

Error determine output clause for position: {}

Error message

Error determine output clause for position: {}

What it means

Warning logged by InputEntryParser.parseChildElement when it cannot resolve the input clause (column) that a rule's input entry belongs to. It looks up decisionTable.getInputs() at the position given by the rule's current input-entry count; if inputs is null or the position is out of range, inputClause stays null and this warning is logged, yet parsing continues and the resulting RuleInputClauseContainer has a null input clause. The DMN table's rule cells and headers are then out of sync.

Source

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

        if (!(parentElement instanceof DecisionRule rule)) {
            return;
        }

        UnaryTests inputEntry = new UnaryTests();

        inputEntry.setId(xtr.getAttributeValue(null, ATTRIBUTE_ID));

        // determine corresponding input clause based on position
        InputClause inputClause = null;
        DecisionTable decisionTable = (DecisionTable) decision.getExpression();
        if (decisionTable.getInputs() != null) {
            if (decisionTable.getInputs().get(rule.getInputEntries().size()) != null) {
                inputClause = decisionTable.getInputs().get(rule.getInputEntries().size());
            }
        }

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

        boolean readyWithInputEntry = false;
        try {
            while (!readyWithInputEntry && xtr.hasNext()) {
                xtr.next();
                if (xtr.isStartElement() && ELEMENT_TEXT.equalsIgnoreCase(xtr.getLocalName())) {
                    inputEntry.setText(xtr.getElementText());
                } else if (xtr.isStartElement() && ELEMENT_EXTENSIONS.equals(xtr.getLocalName())) {
                    while (xtr.hasNext()) {
                        xtr.next();
                        if (xtr.isStartElement()) {
                            DmnExtensionElement extensionElement = DmnXMLUtil.parseExtensionElement(xtr);
                            migrateExtensionElement(extensionElement, inputClause);
                            inputEntry.addExtensionElement(extensionElement);
                        } else if (xtr.isEndElement()) {
                            if (ELEMENT_EXTENSIONS.equals(xtr.getLocalName())) {
                                break;

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Open the .dmn file and make each <rule> contain exactly as many <inputEntry> elements as there are <input> clauses.
  2. Validate the DMN XML against the DMN 1.1/1.2 XSD to catch the structural mismatch before deployment.
  3. Re-export the decision table from the DMN modeling tool to regenerate consistent headers/rules.
  4. Add a pre-deployment model validation step so the malformed table fails fast instead of producing a silently broken model.

Example fix

<!-- before: 3 inputs declared but rule has 4 inputEntries -->
<rule>
  <inputEntry>...</inputEntry><inputEntry>...</inputEntry>
  <inputEntry>...</inputEntry><inputEntry>...</inputEntry>
</rule>
<!-- after: entries match input count -->
<rule>
  <inputEntry>...</inputEntry><inputEntry>...</inputEntry><inputEntry>...</inputEntry>
</rule>
Defensive patterns

Strategy: validation

Validate before calling

// pre-deploy check: rule entry counts must match column counts
long inputs = xml.count("<dmn:input ");
for (Element rule : rules) {
  int in = rule.getElementsByTag("inputEntry").size();
  if (in != inputs) throw new IllegalArgumentException(
    "Rule has " + in + " inputEntries but table has " + inputs + " inputs");
}

Prevention

When it happens

Trigger: Parsing a <decisionTable> where the number of <inputEntry> elements in a <rule> exceeds the number of <input> clauses, or where <input> elements were not parsed (null getInputs()) — e.g. malformed DMN XML with mismatched rule cells vs header columns.

Common situations: Hand-edited .dmn tables where a rule row has more cells than header columns; corrupted export from a DMN editor; merge conflicts in .dmn files that dropped an <input> column but kept the rule cells.

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/80ef5d77da01a066. Report an issue: GitHub.