apache/seatunnel · error · OptionValidationException

%s[%d]: '%s' must be configured

Error message

%s[%d]: '%s' must be configured

What it means

RabbitmqTableConfigsValidator.evaluate throws OptionValidationException when an entry in tables-configs has a queue-name but no schema. Every per-table entry must declare its own schema so the reader can deserialize that queue's messages.

Source

Thrown at seatunnel-connectors-v2/connector-rabbitmq/src/main/java/org/apache/seatunnel/connectors/seatunnel/rabbitmq/config/RabbitmqTableConfigsValidator.java:69

    @Override
    public boolean evaluate(ReadonlyConfig config, List<Map<String, Object>> entries)
            throws OptionValidationException {
        if (config.getOptional(RabbitmqBaseOptions.SCHEMA).isPresent()) {
            throw new OptionValidationException(
                    "Cannot specify both '%s' and root-level '%s'.", TABLE_CONFIGS_KEY, SCHEMA_KEY);
        }
        for (int i = 0; i < entries.size(); i++) {
            ReadonlyConfig entry = ReadonlyConfig.fromMap(entries.get(i));
            String queueName = entry.getOptional(RabbitmqBaseOptions.QUEUE_NAME).orElse(null);
            if (queueName == null || queueName.trim().isEmpty()) {
                throw new OptionValidationException(
                        "%s[%d]: '%s' must be configured and non-blank",
                        TABLE_CONFIGS_KEY, i, QUEUE_NAME_KEY);
            }

            if (!entry.getOptional(RabbitmqBaseOptions.SCHEMA).isPresent()) {
                throw new OptionValidationException(
                        "%s[%d]: '%s' must be configured", TABLE_CONFIGS_KEY, i, SCHEMA_KEY);
            }
        }

        return true;
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Add a schema block to each tables-configs entry
  2. Verify with the connector docs which schema format is expected inside tables-configs
  3. If all queues share one schema, you still must declare it per entry when using tables-configs (root schema is rejected)

Example fix

// before
tables-configs = [
  { queue-name = "orders" }
]
// after
tables-configs = [
  { queue-name = "orders", schema = { fields { id = int, name = string } } }
]
Defensive patterns

Strategy: validation

Validate before calling

for (int i = 0; i < entries.size(); i++) {
  if (!entries.get(i).containsKey("schema")) {
    throw new IllegalArgumentException("tables-configs[" + i + "] missing schema");
  }
}

Try / catch

try {
  tablesConfigsValidator.evaluate(config, entries);
} catch (OptionValidationException e) {
  System.err.println("Entry error: " + e.getMessage());
}

Prevention

When it happens

Trigger: tables-configs[i] contains queue-name (validated non-blank) but the schema key is missing from that entry.

Common situations: User assumed root schema covers all entries; entry added programmatically without schema; doc example truncated.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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