conductor-oss/conductor · error · TerminateWorkflowException

Unknown evaluator '%s' in INLINE task.

Error message

Unknown evaluator '%s' in INLINE task.

What it means

Thrown by Inline.checkEvaluatorType() when the evaluatorType is non-blank but no Evaluator bean with that name is registered in the Spring context. The evaluators map (injected into Inline) contains Evaluator beans keyed by their @Component name. Supported built-in values: 'javascript', 'graaljs', 'value-param', and 'python' (if GraalVM Python is available). An unregistered name like 'groovy' or 'js' triggers this termination.

Source

Thrown at core/src/main/java/com/netflix/conductor/core/execution/tasks/Inline.java:111

            task.addOutput("error", errorMessage);
        }

        return true;
    }

    private void checkEvaluatorType(String evaluatorType) {
        // evaluatorType is now optional with "javascript" as default, but must not be blank if
        // 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

  1. Use a registered evaluator type: 'javascript', 'graaljs', or 'value-param'. For 'python', ensure GraalVM Python support is deployed.
  2. If using a custom evaluator, verify the @Component name matches exactly and the bean is on the classpath.
  3. Check for typos in the evaluatorType value in the workflow definition.
  4. Inspect the server's Spring context for available Evaluator beans if unsure what is registered.

Example fix

// before
"inputParameters": {
  "evaluatorType": "js",
  "expression": "return 1 + 1"
}

// after
"inputParameters": {
  "evaluatorType": "javascript",
  "expression": "return 1 + 1"
}
Defensive patterns

Strategy: validation

Validate before calling

// Verify evaluator is registered before INLINE execution
String evaluatorType = (String) task.getInputData().get("evaluatorType");
if (evaluatorType == null) evaluatorType = "javascript";
if (!evaluators.containsKey(evaluatorType)) {
    throw new IllegalStateException(
        "Unknown evaluator: " + evaluatorType
        + ". Available: " + evaluators.keySet());
}

Prevention

When it happens

Trigger: An INLINE task specifies evaluatorType 'groovy', 'python' (when GraalVM Python is not on the classpath), or any unregistered evaluator name. A custom evaluator bean was removed or renamed.

Common situations: Server upgraded and a previously-available evaluator was deprecated/removed. Custom evaluator not deployed. Typo in evaluatorType — 'javascipt', 'java-script', or 'js'.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/a8fca58ba2b204c3. Report an issue: GitHub.