{"record":{"id":"e85f169320f7926f","repo":"conductor-oss/conductor","slug":"empty-evaluatortype-in-inline-task-s-input-param","errorCode":null,"errorMessage":"Empty 'evaluatorType' in INLINE task's input parameters. A non-empty String value must be provided.","messagePattern":"Empty 'evaluatorType' in INLINE task's input parameters\\. A non-empty String value must be provided\\.","errorType":"exception","errorClass":"TerminateWorkflowException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/netflix/conductor/core/execution/tasks/Inline.java","lineNumber":104,"sourceCode":"            // TerminateWorkflowException is thrown when the script evaluation fails\n            // Retry will result in the same error, so FAILED_WITH_TERMINAL_ERROR status is used.\n            task.setStatus(\n                    e instanceof TerminateWorkflowException\n                            ? TaskModel.Status.FAILED_WITH_TERMINAL_ERROR\n                            : TaskModel.Status.FAILED);\n            task.setReasonForIncompletion(errorMessage);\n            task.addOutput(\"error\", errorMessage);\n        }\n\n        return true;\n    }\n\n    private void checkEvaluatorType(String evaluatorType) {\n        // evaluatorType is now optional with \"javascript\" as default, but must not be blank if\n        // provided\n        if (StringUtils.isBlank(evaluatorType)) {\n            LOGGER.error(\"Empty {} in INLINE task. \", QUERY_EVALUATOR_TYPE);\n            throw new TerminateWorkflowException(\n                    \"Empty '\"\n                            + QUERY_EVALUATOR_TYPE\n                            + \"' in INLINE task's input parameters. A non-empty String value must be provided.\");\n        }\n        if (evaluators.get(evaluatorType) == null) {\n            LOGGER.error(\"Evaluator {} for INLINE task not registered\", evaluatorType);\n            throw new TerminateWorkflowException(\n                    \"Unknown evaluator '\" + evaluatorType + \"' in INLINE task.\");\n        }\n    }\n\n    private void checkExpression(String expression) {\n        if (StringUtils.isBlank(expression)) {\n            LOGGER.error(\"Empty {} in INLINE task. \", QUERY_EXPRESSION_PARAMETER);\n            throw new TerminateWorkflowException(\n                    \"Empty '\"\n                            + QUERY_EXPRESSION_PARAMETER\n                            + \"' in Inline task's input parameters. A non-empty String value must be provided.\");","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/core/src/main/java/com/netflix/conductor/core/execution/tasks/Inline.java#L86-L122","documentation":"Thrown by Inline.checkEvaluatorType() when the evaluatorType input parameter is blank (null, empty, or whitespace-only). Although evaluatorType is optional and defaults to 'javascript' when the key is entirely absent from the input map (checked at line 67), if the key IS present but contains a blank string, this check fires. The distinction: absent key -> default 'javascript'; present-but-blank -> error. This prevents ambiguous evaluator selection.","triggerScenarios":"An INLINE task has evaluatorType set to an empty string \"\" or whitespace \"  \" in its inputParameters. A template or expression that resolves evaluatorType to an empty string at runtime.","commonSituations":"Workflow definition template includes evaluatorType but the value is left empty by mistake. A conditional expression for evaluatorType evaluates to empty under certain input. Copy-paste from a partial example where evaluatorType was not filled in.","solutions":["Either remove the evaluatorType key entirely (defaults to 'javascript') or set it to a valid value like 'javascript', 'graaljs', or 'python'.","If evaluatorType is dynamically set, ensure the expression always produces a non-blank value or omit the key.","Validate the INLINE task's inputParameters in the workflow definition before registering."],"exampleFix":"// before\n\"inputParameters\": {\n  \"evaluatorType\": \"\",\n  \"expression\": \"return 1 + 1\"\n}\n\n// after — option 1: remove evaluatorType (defaults to javascript)\n\"inputParameters\": {\n  \"expression\": \"return 1 + 1\"\n}\n\n// after — option 2: set explicitly\n\"inputParameters\": {\n  \"evaluatorType\": \"javascript\",\n  \"expression\": \"return 1 + 1\"\n}","handlingStrategy":"validation","validationCode":"// Validate evaluatorType before INLINE task execution\nString evaluatorType = (String) task.getInputData().get(\"evaluatorType\");\nif (evaluatorType != null && StringUtils.isBlank(evaluatorType)) {\n    throw new IllegalStateException(\n        \"evaluatorType is present but blank — remove it or set to 'javascript'\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Either omit evaluatorType (defaults to 'javascript') or set it to a valid non-blank value.","Validate INLINE task input parameters in the workflow definition.","Avoid dynamically computing evaluatorType with expressions that may produce empty strings."],"tags":["inline-task","evaluator","terminate","validation","blank-value"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}