conductor-oss/conductor · error · TerminateWorkflowException
No evaluator registered for type: %s
Error message
No evaluator registered for type: %s
What it means
Thrown by SwitchTaskMapper when no Evaluator bean is registered for the evaluatorType specified on the SWITCH task. The evaluators map is injected by Spring and contains beans keyed by name (e.g., 'value-param', 'javascript'). If the SWITCH task's evaluatorType does not match any registered evaluator name, the workflow is terminated. This is typically a configuration or definition mismatch.
Source
Thrown at core/src/main/java/com/netflix/conductor/core/execution/mapper/SwitchTaskMapper.java:85
* WorkflowTask#getDefaultCase()} Tasks are scheduled.
* </ul>
*/
@Override
public List<TaskModel> getMappedTasks(TaskMapperContext taskMapperContext) {
LOGGER.debug("TaskMapperContext {} in SwitchTaskMapper", taskMapperContext);
List<TaskModel> tasksToBeScheduled = new LinkedList<>();
WorkflowTask workflowTask = taskMapperContext.getWorkflowTask();
WorkflowModel workflowModel = taskMapperContext.getWorkflowModel();
Map<String, Object> taskInput = taskMapperContext.getTaskInput();
int retryCount = taskMapperContext.getRetryCount();
// get the expression to be evaluated
String evaluatorType = workflowTask.getEvaluatorType();
Evaluator evaluator = evaluators.get(evaluatorType);
if (evaluator == null) {
String errorMsg = String.format("No evaluator registered for type: %s", evaluatorType);
LOGGER.error(errorMsg);
throw new TerminateWorkflowException(errorMsg);
}
String evalResult = "";
try {
evalResult = "" + evaluator.evaluate(workflowTask.getExpression(), taskInput);
} catch (Exception exception) {
TaskModel switchTask = taskMapperContext.createTaskModel();
switchTask.setTaskType(TaskType.TASK_TYPE_SWITCH);
switchTask.setTaskDefName(TaskType.TASK_TYPE_SWITCH);
switchTask.getInputData().putAll(taskInput);
switchTask.setStartTime(System.currentTimeMillis());
switchTask.setStatus(TaskModel.Status.FAILED);
switchTask.setReasonForIncompletion(exception.getMessage());
tasksToBeScheduled.add(switchTask);
return tasksToBeScheduled;
}
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Check the registered evaluator names — 'value-param', 'javascript', and 'graaljs' are built-in. Use one of these.
- If using a custom evaluator, ensure the @Component annotation provides the correct name and the bean is on the classpath.
- Fix the evaluatorType in the workflow definition to match a registered evaluator name exactly (case-sensitive).
- List available evaluators by inspecting the Evaluator implementations in the server's Spring context.
Example fix
// before
{
"type": "SWITCH",
"evaluatorType": "js",
"expression": "$.status"
}
// after
{
"type": "SWITCH",
"evaluatorType": "javascript",
"expression": "$.status"
} Defensive patterns
Strategy: validation
Validate before calling
// Verify the evaluatorType is registered before workflow execution
Set<String> registeredEvaluators = evaluators.keySet();
String evaluatorType = workflowTask.getEvaluatorType();
if (!registeredEvaluators.contains(evaluatorType)) {
throw new IllegalStateException(
"Unknown evaluatorType: " + evaluatorType
+ ". Registered: " + registeredEvaluators);
} Prevention
- Use only registered evaluator types: 'value-param', 'javascript', 'graaljs'.
- For custom evaluators, verify the @Component name matches the workflow definition.
- Document available evaluators in your team's workflow design guide.
When it happens
Trigger: A SWITCH task specifies evaluatorType 'js' or 'value' (unregistered) instead of 'javascript' or 'value-param'. A custom evaluator bean was removed or its @Component name changed. The evaluatorType field is misspelled in the workflow definition.
Common situations: Workflow migrated from a version that used different evaluator type names. A custom evaluator was not deployed in the server's classpath. Typo in the evaluatorType field of the workflow definition JSON.
Related errors
- Input has to be a JSON object: %s
- Unknown evaluator '%s' in INLINE task.
- Empty 'evaluatorType' in INLINE task's input parameters. A n
- Skill registry is not available
- llmProvider not specified: {name}
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/0bd54dd9672d1e2d.
Report an issue: GitHub.