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

  1. 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
  2. Validate the whole DMN file against the DMN 1.1 XSD (e.g. xmllint --schema) before deployment to catch malformed structure early
  3. Check the logged cause stack trace to identify the exact failing child element and fix or remove it
  4. 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

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


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)