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
- Open the .dmn file and make each <rule> contain exactly as many <inputEntry> elements as there are <input> clauses.
- Validate the DMN XML against the DMN 1.1/1.2 XSD to catch the structural mismatch before deployment.
- Re-export the decision table from the DMN modeling tool to regenerate consistent headers/rules.
- 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
- Keep every <rule>'s inputEntry count exactly equal to the number of <input> clauses
- Run XSD validation before deployment to catch structural drift
- Regenerate .dmn from the designer tool after manual merges
- After conversion, assert each RuleInputClauseContainer.getInputClause() != null
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
- Error determine output clause for position: {}
- more than one result in decision:
- more than one result
- DMN decision with key ${finalDecisionKeyValue} execution fai
- DMN decision with key ${finalDecisionKeyValue} did not hit a
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/80ef5d77da01a066.
Report an issue: GitHub.