flowable/flowable-engine · error · IllegalArgumentException
input entry is required
Error message
input entry is required
What it means
Thrown by ELExpressionExecutor.executeInputExpression when the inputEntry (UnaryTests) argument is null. The input entry holds the test expression that decides whether a rule row matches; without it the condition cannot be created, so the executor rejects the call immediately with an IllegalArgumentException.
Source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/ELExpressionExecutor.java:40
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Yvo Swillens
*/
public class ELExpressionExecutor {
private static final Logger LOGGER = LoggerFactory.getLogger(ELExpressionExecutor.class);
public static Boolean executeInputExpression(InputClause inputClause, UnaryTests inputEntry, ExpressionManager expressionManager, ELExecutionContext executionContext) {
if (inputClause == null) {
throw new IllegalArgumentException("input clause is required");
}
if (inputClause.getInputExpression() == null) {
throw new IllegalArgumentException("input expression is required");
}
if (inputEntry == null) {
throw new IllegalArgumentException("input entry is required");
}
if (executionContext == null) {
throw new IllegalArgumentException("execution context is required");
}
String inputExpression = inputClause.getInputExpression().getText();
executionContext.checkExecutionContext(inputExpression);
// pre parse expression
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);View on GitHub (pinned to d6d39ce1c6)
Solutions
- Provide a valid UnaryTests object (with getText() returning the test expression, e.g. "" or a literal) instead of null.
- Verify every rule row in the decision table has one entry per input clause and fix the model/XML or row-mapping code.
- If empty cells are legitimate, substitute an empty UnaryTests before calling rather than passing null.
- Guard each argument for null before invoking the executor and skip or log the rule instead.
Example fix
// before
UnaryTests inputEntry = rule.getInputEntries().get(i); // may be null
Boolean hit = ELExpressionExecutor.executeInputExpression(clause, inputEntry, em, ctx);
// after
UnaryTests inputEntry = rule.getInputEntries().get(i);
if (inputEntry != null) {
Boolean hit = ELExpressionExecutor.executeInputExpression(clause, inputEntry, em, ctx);
} else {
// skip missing entry or substitute empty UnaryTests
} Defensive patterns
Strategy: validation
Validate before calling
if (inputEntry == null) {
// skip rule, substitute empty UnaryTests, or raise a validation error
} Type guard
boolean hasInputEntry(UnaryTests e) { return e != null; } Try / catch
try {
ELExpressionExecutor.executeInputExpression(clause, entry, em, ctx);
} catch (IllegalArgumentException e) {
if ("input entry is required".equals(e.getMessage())) {
// rule row is missing an input entry: report row/clause index
} else { throw e; }
} Prevention
- Ensure every rule row has one input entry per input clause
- Validate decision-table shape (rows x columns) before evaluation
- Substitute empty UnaryTests for intentionally blank cells
- Null-check entries in custom evaluators before calling the executor
When it happens
Trigger: Passing null as the second argument to ELExpressionExecutor.executeInputExpression — e.g. a rule row cell for that input column is absent or the parser produced no UnaryTests object for it.
Common situations: Custom decision-table evaluators iterating rule rows where some cells are empty/unparsed; DMN XML rule rows with fewer entries than input clauses; test code calling the executor with placeholder nulls.
Related errors
- input expression is required
- execution context is required
- output clause is required
- output entry is required
- <exception message from evaluation failure>
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/c779ccfa123264c1.
Report an issue: GitHub.