{"record":{"id":"ed39887df4235d54","repo":"flowable/flowable-engine","slug":"error-determine-output-clause-for-position-ed3988","errorCode":null,"errorMessage":"Error determine output clause for position: {}","messagePattern":"Error determine output clause for position: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-dmn-xml-converter/src/main/java/org/flowable/dmn/converter/child/OutputEntryParser.java","lineNumber":70,"sourceCode":"                } else if (xtr.isEndElement() && getElementName().equalsIgnoreCase(xtr.getLocalName())) {\n                    readyWithOutputEntry = true;\n                }\n            }\n        } catch (Exception e) {\n            LOGGER.warn(\"Error parsing output entry\", e);\n        }\n\n        // determine corresponding output clause based on position\n        OutputClause outputClause = null;\n        DecisionTable decisionTable = (DecisionTable) decision.getExpression();\n        if (decisionTable.getOutputs() != null) {\n            if (decisionTable.getOutputs().get(rule.getOutputEntries().size()) != null) {\n                outputClause = decisionTable.getOutputs().get(rule.getOutputEntries().size());\n            }\n        }\n\n        if (outputClause == null) {\n            LOGGER.warn(\"Error determine output clause for position: {}\", decisionTable.getOutputs());\n        }\n\n        RuleOutputClauseContainer outputContainer = new RuleOutputClauseContainer();\n        outputContainer.setOutputClause(outputClause);\n        outputContainer.setOutputEntry(outputEntry);\n\n        rule.addOutputEntry(outputContainer);\n    }\n}\n","sourceCodeStart":52,"sourceCodeEnd":80,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-xml-converter/src/main/java/org/flowable/dmn/converter/child/OutputEntryParser.java#L52-L80","documentation":"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.","triggerScenarios":"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.","commonSituations":"Hand-edited .dmn where an output column was deleted but rule cells kept; merge conflicts dropping an <output> element; corrupted tool export.","solutions":["Open the .dmn file and make each <rule> contain exactly as many <outputEntry> elements as <output> clauses.","Validate the DMN XML against the DMN XSD to catch header/rule mismatch.","Re-export the table from the DMN modeling tool to regenerate a consistent structure.","Add pre-deployment model validation so the broken table is rejected instead of silently mis-mapped."],"exampleFix":"<!-- before: 1 output column, rule has 2 outputEntries -->\n<rule><outputEntry>a</outputEntry><outputEntry>b</outputEntry></rule>\n<!-- after -->\n<rule><outputEntry>a</outputEntry></rule>","handlingStrategy":"validation","validationCode":"// pre-deploy: outputEntries per rule must equal output columns\nlong outputs = xml.count(\"<dmn:output \");\nfor (Element rule : rules) {\n  int out = rule.getElementsByTag(\"outputEntry\").size();\n  if (out != outputs) throw new IllegalArgumentException(\n    \"Rule has \" + out + \" outputEntries but table has \" + outputs + \" outputs\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Match every rule's outputEntry count to the table's <output> clause count","XSD-validate .dmn files before deployment","After merges, re-export from the DMN tool instead of hand-fixing XML","Post-conversion, assert RuleOutputClauseContainer.getOutputClause() != null"],"tags":["flowable","dmn","decision-table","mismatch","xml-parsing"],"backgroundTag":"internal-invariant-violation","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}