apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException
The number of exclusive options must be greater than 1.
Error message
The number of exclusive options must be greater than 1.
What it means
A developer-facing builder guard in OptionRule.Builder.exclusive: a required-options group was declared with only one exclusive option, which is meaningless since exclusivity requires at least two mutually exclusive alternatives. The faulting input is the Option... arguments passed to exclusive().
Solutions
- Pass at least two Option instances to Builder.exclusive(...)
- If only one option is truly required, use Builder.required(...) instead
- 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:204 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/37b8267bc015def3.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:204
verifyOptionOptionsDuplicate(option, CurrentOptionType.OPTIONS_OPTION.getType());
}
this.optionalOptions.addAll(Arrays.asList(options));
return this;
}
/** Absolutely required options without any constraints. */
public Builder required(@NonNull Option<?>... options) {
RequiredOption.AbsolutelyRequiredOptions requiredOption =
RequiredOption.AbsolutelyRequiredOptions.of(options);
verifyRequiredOptionDuplicate(requiredOption);
this.requiredOptions.add(requiredOption);
return this;
}
/** Exclusive options, only one of the options needs to be configured. */
public Builder exclusive(@NonNull Option<?>... options) {
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(View on GitHub (pinned to cf67b549a7)