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

  1. Inspect FlowableDmnExpressionException#getCause and the logged output entry text to find the root failure, then correct the expression in the DMN model.
  2. Confirm all variables/beans referenced by the output expression exist in the evaluation context (e.g. execution variable was set by a prior output).
  3. Validate output expression syntax and supported constructs; simplify to a literal or supported EL expression.
  4. 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

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/8b2f59fdf31f24b8. Report an issue: GitHub.