apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException

conditional option ' ' must have expect values .

Error message

conditional option '%s' must have expect values .

What it means

A developer-facing builder guard in OptionRule.Builder.conditional: a conditional option was declared with an empty list of expect values, so no condition could ever match. The faulting input is the expectValues list passed for the conditional option.

Solutions

  1. Provide a non-empty list of expected values when calling Builder.conditional(...)
  2. Verify the value type of the conditional option matches the expected values
  3. Fix the connector's OptionRule definition code, not the user config
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:221 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/c883c8755384ce5a. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:221

            if (options.length <= 1) {
                throw new OptionValidationException(
                        "The number of exclusive options must be greater than 1.");
            }
            RequiredOption.ExclusiveRequiredOptions exclusiveRequiredOption =
                    RequiredOption.ExclusiveRequiredOptions.of(options);
            verifyRequiredOptionDuplicate(exclusiveRequiredOption);
            this.requiredOptions.add(exclusiveRequiredOption);
            return this;
        }

        public <T> Builder conditional(
                @NonNull Option<T> conditionalOption,
                @NonNull List<T> expectValues,
                @NonNull Option<?>... requiredOptions) {
            verifyConditionalExists(conditionalOption);

            if (expectValues.isEmpty()) {
                throw new OptionValidationException(
                        String.format(
                                "conditional option '%s' must have expect values .",
                                conditionalOption.key()));
            }

            Expression expression =
                    expectValues.stream()
                            .map(v -> Expression.of(Condition.of(conditionalOption, v)))
                            .reduce(Expression::or)
                            .get();

            RequiredOption.ConditionalRequiredOptions option =
                    RequiredOption.ConditionalRequiredOptions.of(
                            expression, new ArrayList<>(Arrays.asList(requiredOptions)));
            verifyRequiredOptionDuplicate(option, true);
            this.requiredOptions.add(option);
            return this;
        }

View on GitHub (pinned to cf67b549a7)