flowable/flowable-engine · warning
Error parsing output entry
Error message
Error parsing output entry
What it means
This is a warning logged (not a thrown exception) by DecisionServiceXMLConverter when converting a DMN XML <decisionService> element to its model object. Any exception raised while iterating the XML stream and calling addInputData/addOutputData is caught, logged, and parsing silently returns the partially-populated DecisionService. As a result the DMN definition may load successfully but with missing decision service inputs/outputs.
Solutions
- Open the DMN XML file and validate the <decisionService> element: each input/output child must carry a valid inputData/outputData attribute referencing an existing id
- Validate the whole DMN file against the DMN 1.1 XSD (e.g. xmllint --schema) before deployment to catch malformed structure early
- Check the logged cause stack trace to identify the exact failing child element and fix or remove it
- Re-export the decision table/decision service from the Flowable modeler instead of hand-editing the XML
Example fix
<!-- before: missing reference --> <decisionService id="ds1"> <inputData /> </decisionService> <!-- after: valid reference --> <decisionService id="ds1"> <inputData inputData="input_1" /> </decisionService>
Defensive patterns
Strategy: validation
Validate before calling
// Pre-check DMN XML before conversion
try {
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("decision.dmn"));
// additionally assert every <inputData>/<outputData> has a reference attribute
} catch (Exception e) {
throw new IllegalStateException("Malformed DMN decisionService XML", e);
} Try / catch
// The converter swallows exceptions; verify the parsed result instead
DecisionService ds = converter.convertXMLToElement(xtr, model);
if (ds.getInputs().isEmpty() && ds.getOutputs().isEmpty()) {
throw new IllegalStateException("decisionService parsed with no inputs/outputs - check converter warnings");
} Prevention
- Validate DMN files against the DMN 1.1 XSD before deployment
- Never hand-edit DMN XML; edit in the Flowable modeler and re-export
- Keep references (inputData/outputData ids) in sync when renaming elements
- Watch for the converter's warn logs during parsing - parsing never fails loudly
When it happens
Trigger: Converting DMN XML with a <decisionService> element whose structure is malformed: e.g. an input/output child element with a missing or unparseable @id/@inputData/@outputData reference, unexpected nested elements, or a stream cursor already past the element so addInputData is called with invalid data.
Common situations: Hand-edited or tool-generated DMN files with an incomplete <decisionService> section; DMN XML exported from a different engine or an older Flowable version; files corrupted by copy-paste or a broken merge; references (decision/DMNElement ids) that do not resolve.
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
- Error determine output clause for position
- Error determine output clause for position
- Error parsing input entry
- Error parsing input expression
- Error parsing input expression
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/a4211f8ca9cfddf2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-xml-converter/src/main/java/org/flowable/dmn/xml/converter/DecisionServiceXMLConverter.java:58
xtr.next();
if (xtr.isStartElement() && ELEMENT_OUTPUT_DECISION.equalsIgnoreCase(xtr.getLocalName())) {
DmnElementReference ref = new DmnElementReference();
ref.setHref(xtr.getAttributeValue(null, ATTRIBUTE_HREF));
decisionService.addOutputDecision(ref);
} if (xtr.isStartElement() && ELEMENT_ENCAPSULATED_DECISION.equalsIgnoreCase(xtr.getLocalName())) {
DmnElementReference ref = new DmnElementReference();
ref.setHref(xtr.getAttributeValue(null, ATTRIBUTE_HREF));
decisionService.addEncapsulatedDecision(ref);
} if (xtr.isStartElement() && ELEMENT_INPUT_DATA.equalsIgnoreCase(xtr.getLocalName())) {
DmnElementReference ref = new DmnElementReference();
ref.setHref(xtr.getAttributeValue(null, ATTRIBUTE_HREF));
decisionService.addInputData(ref);
} else if (xtr.isEndElement() && getXMLElementName().equalsIgnoreCase(xtr.getLocalName())) {
readyWithDecisionService = true;
}
}
} catch (Exception e) {
LOGGER.warn("Error parsing output entry", e);
}
return decisionService;
}
@Override
protected void writeAdditionalAttributes(DmnElement element, DmnDefinition model, XMLStreamWriter xtw) throws Exception {
}
@Override
protected void writeAdditionalChildElements(DmnElement element, DmnDefinition model, XMLStreamWriter xtw) throws Exception {
}
}
View on GitHub (pinned to d6d39ce1c6)