flowable/flowable-engine · error · FlowableDmnExpressionException
error while executing output entry
Error message
error while executing output entry
What it means
Wrapped failure thrown by executeOutputExpression when outputExpression.getValue(stackVariables) throws any Exception. It is rethrown as FlowableDmnExpressionException carrying the original output entry text, with the root cause preserved — meaning the output expression failed to parse or evaluate (invalid syntax, unknown property/variable, type conversion failure).
Source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/ELExpressionExecutor.java:83
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
- Inspect FlowableDmnExpressionException#getCause and the logged output entry text to find the root failure, then correct the expression in the DMN model.
- Confirm all variables/beans referenced by the output expression exist in the evaluation context (e.g. execution variable was set by a prior output).
- Validate output expression syntax and supported constructs; simplify to a literal or supported EL expression.
- Catch FlowableDmnExpressionException at the decision-evaluation boundary and report which rule/output cell failed.
Example fix
// before (output entry)
${execution.setVariable('approved', yes)}
// after (valid literal / correct variable name)
${approved} Defensive patterns
Strategy: try-catch
Validate before calling
if (outputEntry.getText() == null || outputEntry.getText().isBlank()) { /* default or skip */ } Try / catch
try {
ELExpressionExecutor.executeOutputExpression(clause, entry, em, ctx);
} catch (FlowableDmnExpressionException e) {
LOGGER.error("Output entry '{}' failed: {}", e.getExpressionString(), e.getCause());
// fall back to null output or propagate a rule failure
} Prevention
- Keep output expressions simple/literal where possible
- Ensure any execution.setVariable calls reference valid variables and run in order
- Check the WARN log 'Error while executing output entry' for the failing text and cause
- Re-test output expressions after engine/EL provider upgrades
When it happens
Trigger: Any exception in RuleExpressionOutput.getValue: malformed output entry expression text, referencing variables/beans not on the stack, EL method invocation failures, or pre-parsed output entry expressions (e.g. with execution variable assignments) that the expression manager cannot resolve.
Common situations: Output entries like `${execution.setVariable('x', 5)}` failing because the referenced variable/bean is unavailable; typos in output expressions; custom EL providers rejecting the expression; version upgrades changing EL behavior.
Related errors
- error while executing input entry
- Cannot find case definition for id:
- DMN repository service is not available
- key is null
- keyLike is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/8b2f59fdf31f24b8.
Report an issue: GitHub.