flowable/flowable-engine · error · IllegalArgumentException
output entry is required
Error message
output entry is required
What it means
Thrown by ELExpressionExecutor.executeOutputExpression when the outputEntry (LiteralExpression) argument is null. The output entry contains the literal expression whose value becomes the rule's output; without it no expression can be parsed and the executor rejects the call with an IllegalArgumentException.
Source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/ELExpressionExecutor.java:68
String parsedExpression = ELInputEntryExpressionPreParser.parse(inputEntry.getText(), inputExpression, inputClause.getInputExpression().getTypeRef());
Expression expression = expressionManager.createExpression(parsedExpression);
RuleExpressionCondition condition = new RuleExpressionCondition(expression);
try {
return condition.evaluate(executionContext.getStackVariables(), executionContext);
} catch (Exception ex) {
LOGGER.warn("Error while executing input entry: {}", parsedExpression, ex);
throw new FlowableDmnExpressionException("error while executing input entry", parsedExpression, ex);
}
}
public static Object executeOutputExpression(OutputClause outputClause, LiteralExpression outputEntry, ExpressionManager expressionManager, ELExecutionContext executionContext) {
if (outputClause == null) {
throw new IllegalArgumentException("output clause is required");
}
if (outputEntry == null) {
throw new IllegalArgumentException("output entry is required");
}
if (executionContext == null) {
throw new IllegalArgumentException("execution context is required");
}
String parsedExpression = ELOutputEntryExpressionPreParser.parse(outputEntry.getText());
Expression expression = expressionManager.createExpression(parsedExpression);
RuleExpressionOutput outputExpression = new RuleExpressionOutput(expression);
try {
return outputExpression.getValue(executionContext.getStackVariables());
} catch (Exception ex) {
LOGGER.warn("Error while executing output entry: {}", outputEntry.getText(), ex);
throw new FlowableDmnExpressionException("error while executing output entry", outputEntry.getText(), ex);
}
}
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Pass a valid LiteralExpression with its text set (even an empty or default value) instead of null.
- Ensure every rule row has one output entry per output clause in the DMN model/XML.
- When empty output cells are valid, substitute a LiteralExpression with empty/default text before evaluation.
- Null-check output entries before the call and skip or log incomplete rules.
Example fix
// before
LiteralExpression outputEntry = rule.getOutputEntries().get(j); // may be null
Object v = ELExpressionExecutor.executeOutputExpression(outputClause, outputEntry, em, ctx);
// after
if (outputEntry != null) {
Object v = ELExpressionExecutor.executeOutputExpression(outputClause, outputEntry, em, ctx);
} else {
LiteralExpression empty = new LiteralExpression();
empty.setText("");
Object v = ELExpressionExecutor.executeOutputExpression(outputClause, empty, em, ctx);
} Defensive patterns
Strategy: validation
Validate before calling
if (outputEntry == null) { outputEntry = new LiteralExpression(); outputEntry.setText(""); } Type guard
boolean hasOutputEntry(LiteralExpression e) { return e != null; } Try / catch
try {
ELExpressionExecutor.executeOutputExpression(clause, entry, em, ctx);
} catch (IllegalArgumentException e) {
if ("output entry is required".equals(e.getMessage())) {
// rule row missing output entry: report row/column
} else { throw e; }
} Prevention
- Ensure each rule row has one output entry per output clause
- Validate decision-table shape before running rules
- Substitute a default LiteralExpression for intentionally empty outputs
- Null-check entries in custom rule generators
When it happens
Trigger: Passing null as the second argument to executeOutputExpression — e.g. rule rows missing the output cell, parsers that produce no LiteralExpression for an output entry, or direct calls to the executor with placeholder nulls.
Common situations: DMN XML where a rule's output entry element is absent; custom decision-table builders skipping empty output cells; programmatic rule generation that leaves output entries unset.
Related errors
- input expression is required
- input entry is required
- execution context is required
- output clause is required
- <exception message from evaluation failure>
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/567ab11c1f50e7fc.
Report an issue: GitHub.