flowable/flowable-engine · error · IllegalArgumentException
input clause is required
Error message
input clause is required
What it means
ELExpressionExecutor.executeInputExpression validates its DMN model arguments before evaluation and throws IllegalArgumentException when inputClause is null (also for null input expression or input entry). It ensures the executor never evaluates a malformed input clause.
Source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/ELExpressionExecutor.java:34
import org.flowable.common.engine.impl.el.ExpressionManager;
import org.flowable.dmn.engine.FlowableDmnExpressionException;
import org.flowable.dmn.model.InputClause;
import org.flowable.dmn.model.LiteralExpression;
import org.flowable.dmn.model.OutputClause;
import org.flowable.dmn.model.UnaryTests;
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);View on GitHub (pinned to d6d39ce1c6)
Solutions
- Fix the DMN XML so every <input> has an <inputExpression> and each rule has a non-empty <inputEntry>.
- Validate DMN resources against the DMN XSD before deployment.
- In programmatic model building, populate InputClause, its input expression, and InputEntry objects before execution.
- Catch IllegalArgumentException during decision execution and report which rule/clause is malformed.
Example fix
// before
InputClause clause = null; // never populated
Boolean hit = ELExpressionExecutor.executeInputExpression(clause, entry, em, ctx);
// after
InputClause clause = new InputClause();
clause.setInputExpression(new LiteralExpression());
clause.getInputExpression().setText("${amount}");
Boolean hit = ELExpressionExecutor.executeInputExpression(clause, entry, em, ctx); Defensive patterns
Strategy: validation
Validate before calling
if (inputClause == null || inputClause.getInputExpression() == null || inputEntry == null) {
throw new IllegalArgumentException("Input clause, input expression and input entry must all be set");
} Try / catch
try {
Boolean hit = ELExpressionExecutor.executeInputExpression(clause, entry, expressionManager, ctx);
} catch (IllegalArgumentException e) {
log.warn("Malformed DMN input structure: {}", e.getMessage());
} Prevention
- Validate DMN XML has inputExpression and inputEntry for every input/rule
- Fully populate programmatically built DMN model objects
- Run DMN XSD validation before deploying files
- Watch for old DMN 1.0 files missing required elements
When it happens
Trigger: Executing a decision table whose rule/input structure is incomplete: an input entry or InputClause object is null because the DMN XML was malformed (missing <inputExpression> or <inputEntry>) or programmatically built DMN model objects were left partially populated.
Common situations: Generated or hand-edited DMN missing input expression elements; custom DMN model construction in tests; parser bugs/older DMN 1.0 files missing required elements that the executor assumes.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/797fb59925ad1532.
Report an issue: GitHub.