apache/seatunnel · error · org.apache.seatunnel.api.configuration.util.OptionValidationException
conditional option rule for
Error message
conditional option rule for '%s' with expression '%s' already exists.
What it means
A developer-facing duplicate guard in OptionRule.Builder.conditionalRule: a conditional rule for the same option with the same expected-value expression was already registered in this builder, so the second registration is rejected. The faulting input is the duplicate conditionalOption/expectValues pair.
Solutions
- Remove the duplicate conditionalRule call or merge its options into the existing rule
- Use distinct expect values if different behavior per value is intended
- 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:293 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/7a121ae475fe90d0.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java:293
"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);
return this;
}
public <T> Builder conditionalRule(
@NonNull Option<T> conditionalOption,
@NonNull T expectValue,
@NonNull OptionRule conditionalOptionRule) {
return conditionalRule(
conditionalOption,
Collections.singletonList(expectValue),
conditionalOptionRule);
}
View on GitHub (pinned to cf67b549a7)