{"record":{"id":"0bd54dd9672d1e2d","repo":"conductor-oss/conductor","slug":"no-evaluator-registered-for-type-s","errorCode":null,"errorMessage":"No evaluator registered for type: %s","messagePattern":"No evaluator registered for type: (.+?)","errorType":"exception","errorClass":"TerminateWorkflowException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/netflix/conductor/core/execution/mapper/SwitchTaskMapper.java","lineNumber":85,"sourceCode":"     *           WorkflowTask#getDefaultCase()} Tasks are scheduled.\n     *     </ul>\n     */\n    @Override\n    public List<TaskModel> getMappedTasks(TaskMapperContext taskMapperContext) {\n        LOGGER.debug(\"TaskMapperContext {} in SwitchTaskMapper\", taskMapperContext);\n        List<TaskModel> tasksToBeScheduled = new LinkedList<>();\n        WorkflowTask workflowTask = taskMapperContext.getWorkflowTask();\n        WorkflowModel workflowModel = taskMapperContext.getWorkflowModel();\n        Map<String, Object> taskInput = taskMapperContext.getTaskInput();\n        int retryCount = taskMapperContext.getRetryCount();\n\n        // get the expression to be evaluated\n        String evaluatorType = workflowTask.getEvaluatorType();\n        Evaluator evaluator = evaluators.get(evaluatorType);\n        if (evaluator == null) {\n            String errorMsg = String.format(\"No evaluator registered for type: %s\", evaluatorType);\n            LOGGER.error(errorMsg);\n            throw new TerminateWorkflowException(errorMsg);\n        }\n\n        String evalResult = \"\";\n        try {\n            evalResult = \"\" + evaluator.evaluate(workflowTask.getExpression(), taskInput);\n        } catch (Exception exception) {\n            TaskModel switchTask = taskMapperContext.createTaskModel();\n            switchTask.setTaskType(TaskType.TASK_TYPE_SWITCH);\n            switchTask.setTaskDefName(TaskType.TASK_TYPE_SWITCH);\n            switchTask.getInputData().putAll(taskInput);\n            switchTask.setStartTime(System.currentTimeMillis());\n            switchTask.setStatus(TaskModel.Status.FAILED);\n            switchTask.setReasonForIncompletion(exception.getMessage());\n            tasksToBeScheduled.add(switchTask);\n\n            return tasksToBeScheduled;\n        }\n","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/core/src/main/java/com/netflix/conductor/core/execution/mapper/SwitchTaskMapper.java#L67-L103","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n{\n  \"type\": \"SWITCH\",\n  \"evaluatorType\": \"js\",\n  \"expression\": \"$.status\"\n}\n\n// after\n{\n  \"type\": \"SWITCH\",\n  \"evaluatorType\": \"javascript\",\n  \"expression\": \"$.status\"\n}","handlingStrategy":"validation","validationCode":"// Verify the evaluatorType is registered before workflow execution\nSet<String> registeredEvaluators = evaluators.keySet();\nString evaluatorType = workflowTask.getEvaluatorType();\nif (!registeredEvaluators.contains(evaluatorType)) {\n    throw new IllegalStateException(\n        \"Unknown evaluatorType: \" + evaluatorType\n        + \". Registered: \" + registeredEvaluators);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["switch-task","evaluator","terminate","configuration"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}