apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException
conditional option rule for
Error message
conditional option rule for '%s' must have options.
What it means
A developer-facing builder guard in OptionRule.Builder.conditionalRule: the nested OptionRule attached for a conditional option contains no options at all, making the conditional rule useless. The faulting input is the conditionalOptionRule argument.
Solutions
- Build the conditional OptionRule with at least one optional or required option before passing it
- Check that the nested rule's builder had options added and build() was called correctly
- 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:280 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/a86d7f51583c0e4a.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:280
this.requiredOptions.add(bundledRequiredOption);
return this;
}
public <T> Builder conditionalRule(
@NonNull Option<T> conditionalOption,
@NonNull List<T> expectValues,
@NonNull OptionRule conditionalOptionRule) {
verifyConditionalExists(conditionalOption);
if (expectValues.isEmpty()) {
throw new OptionValidationException(
String.format(
"conditional option '%s' must have expect values .",
conditionalOption.key()));
}
if (!conditionalOptionRule.hasOptions()) {
throw new OptionValidationException(
String.format(
"conditional option rule for '%s' must have options.",
conditionalOption.key()));
}
Expression expression =
expectValues.stream()
.map(v -> Expression.of(Condition.of(conditionalOption, v)))
.reduce(Expression::or)
.get();
if (conditionRulesMap.containsKey(expression)) {
throw new OptionValidationException(
String.format(
"conditional option rule for '%s' with expression '%s' already exists.",
conditionalOption.key(), expression.toString()));
}
this.conditionRulesMap.put(expression, conditionalOptionRule);View on GitHub (pinned to cf67b549a7)