conductor-oss/conductor · error · TerminateWorkflowException
Empty 'expression' in Inline task's input parameters. A non-
Error message
Empty 'expression' in Inline task's input parameters. A non-empty String value must be provided.
What it means
Thrown by the INLINE system task when the 'expression' input parameter is null, empty, or whitespace-only. The INLINE task evaluates an inline script (JavaScript via GraalJS, Python, etc.) and requires a non-blank expression string to execute. This is a TerminateWorkflowException, meaning the task is marked FAILED_WITH_TERMINAL_ERROR and the workflow will not retry this task because the same input would produce the same failure.
Source
Thrown at core/src/main/java/com/netflix/conductor/core/execution/tasks/Inline.java:119
// provided
if (StringUtils.isBlank(evaluatorType)) {
LOGGER.error("Empty {} in INLINE task. ", QUERY_EVALUATOR_TYPE);
throw new TerminateWorkflowException(
"Empty '"
+ QUERY_EVALUATOR_TYPE
+ "' in INLINE task's input parameters. A non-empty String value must be provided.");
}
if (evaluators.get(evaluatorType) == null) {
LOGGER.error("Evaluator {} for INLINE task not registered", evaluatorType);
throw new TerminateWorkflowException(
"Unknown evaluator '" + evaluatorType + "' in INLINE task.");
}
}
private void checkExpression(String expression) {
if (StringUtils.isBlank(expression)) {
LOGGER.error("Empty {} in INLINE task. ", QUERY_EXPRESSION_PARAMETER);
throw new TerminateWorkflowException(
"Empty '"
+ QUERY_EXPRESSION_PARAMETER
+ "' in Inline task's input parameters. A non-empty String value must be provided.");
}
}
}
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Add a non-empty 'expression' string to the INLINE task's inputParameters in the workflow definition JSON.
- If the expression uses ${...} variable interpolation, verify that the referenced source key (e.g. workflow.input.myExpr) actually exists and resolves to a non-blank value at runtime.
- Check the task's inputParameters in the Conductor UI or via the task API to confirm the expression value is present and non-empty.
- Add a default value in the parameter template or upstream task so the expression is always populated.
Example fix
// before
"inputParameters": {
"evaluatorType": "javascript",
"expression": ""
}
// after
"inputParameters": {
"evaluatorType": "javascript",
"expression": "return { result: $.input.value * 2 };"
} Defensive patterns
Strategy: validation
Validate before calling
// Validate INLINE task input before starting the workflow
String expression = (String) inlineTaskInput.get("expression");
if (expression == null || expression.trim().isEmpty()) {
throw new IllegalArgumentException(
"INLINE task '" + taskRefName + "' is missing a non-empty 'expression' parameter");
} Try / catch
// At the workflow-definition level, validate all INLINE tasks before registration
for (WorkflowTask wt : workflowDef.collectTasks()) {
if ("INLINE".equals(wt.getType())) {
Map<String, Object> params = wt.getInputParameters();
Object expr = params.get("expression");
if (expr == null || expr.toString().trim().isEmpty()) {
throw new IllegalArgumentException(
"INLINE task '" + wt.getName() + "' has empty expression");
}
}
} Prevention
- Always include a non-empty 'expression' in every INLINE task definition.
- Validate workflow definitions with a pre-registration linting step that checks INLINE tasks.
- When using ${...} interpolation for the expression, ensure the source key has a non-null default.
When it happens
Trigger: Executing a workflow containing an INLINE task whose inputParameters map omits the 'expression' key, sets it to an empty string, sets it to null, or sets it to a whitespace-only string. Also triggered when a dynamic expression like ${workflow.input.expr} resolves to null/blank at runtime.
Common situations: Forgetting to include the 'expression' field in the INLINE task definition. Using a ${...} placeholder that resolves to null because the referenced workflow input or task output key doesn't exist. Copy-pasting an INLINE task definition and forgetting to fill in the expression.
Related errors
- SubWorkflow name is null and no workflowDefinition supplied
- llmProvider not specified: {name}
- A2A agent-card discovery requires agentType 'a2a'
- A2A agent-card discovery requires 'agentUrl'
- agentUrl must not be blank
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/0615faa107e5592a.
Report an issue: GitHub.