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
- Provide a non-empty list of expected values when calling Builder.conditional(...)
- Verify the value type of the conditional option matches the expected values
- 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)