apache/seatunnel · error · IllegalArgumentException

Option 'authentication_type' is required

Error message

Option 'authentication_type' is required

What it means

AzureQueueConfigValidator.validateClient requires authentication_type to be set. It is the switch key that selects between CONNECTION_STRING, STORAGE_SHARED_KEY and SAS_TOKEN credential handling; a null value cannot be dispatched, so the validator fails fast with a clear message instead of an NPE inside the client factory.

Solutions

  1. Add authentication_type to the sink config with one of: CONNECTION_STRING, STORAGE_SHARED_KEY, SAS_TOKEN
  2. Check the option key spelling and that the value matches an enum name exactly (uppercase)
  3. Supply the credential fields required by the chosen type (connection_string, account_name+account_key, or sas_token)

Example fix

// before
sink {
  AzureQueueStorage {
    queue_name = "my-queue"
  }
}
// after
sink {
  AzureQueueStorage {
    queue_name = "my-queue"
    authentication_type = CONNECTION_STRING
    connection_string = "..."
  }
}
Defensive patterns

Strategy: validation

Validate before calling

if (config.getString("authentication_type") == null || config.getString("authentication_type").trim().isEmpty()) {
  throw new IllegalArgumentException("authentication_type is required: CONNECTION_STRING | STORAGE_SHARED_KEY | SAS_TOKEN");
}

Try / catch

try { sink.open(ctx); } catch (IllegalArgumentException e) { if (e.getMessage().contains("authentication_type")) { log.error("Add authentication_type to sink config"); } throw e; }

Prevention

When it happens

Trigger: Sink config omits the authentication_type option (or it's misspelled/blank) so AzureQueueClientConfig.getAuthenticationType() returns null during validateClient.

Common situations: Forgot to add authentication_type in the Hocon/JSON config; typo like authetication_type; option defined but with empty string that failed to map to the enum.

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/898379089ec6bfc5. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-azure-queue-storage/src/main/java/org/apache/seatunnel/connectors/seatunnel/azure/queue/config/AzureQueueConfigValidator.java:39

final class AzureQueueConfigValidator {

    private static final Pattern QUEUE_NAME_PATTERN =
            Pattern.compile("[a-z0-9](?:[a-z0-9-]{1,61}[a-z0-9])?");

    private AzureQueueConfigValidator() {}

    static void validateClient(AzureQueueClientConfig config) {
        requireNonBlank(config.getQueueName(), "queue_name");
        if (config.getQueueName().length() < 3
                || config.getQueueName().length() > 63
                || !QUEUE_NAME_PATTERN.matcher(config.getQueueName()).matches()
                || config.getQueueName().contains("--")) {
            throw new IllegalArgumentException(
                    "Option 'queue_name' must contain 3-63 lowercase letters, numbers or single hyphens");
        }
        if (config.getAuthenticationType() == null) {
            throw new IllegalArgumentException("Option 'authentication_type' is required");
        }

        switch (config.getAuthenticationType()) {
            case CONNECTION_STRING:
                requireNonBlank(config.getConnectionString(), "connection_string");
                rejectPresent(
                        config.getEndpoint(),
                        "endpoint",
                        config.getAccountName(),
                        "account_name",
                        config.getAccountKey(),
                        "account_key",
                        config.getSasToken(),
                        "sas_token");
                break;
            case SHARED_KEY:
                requireNonBlank(config.getEndpoint(), "endpoint");
                requireNonBlank(config.getAccountName(), "account_name");

View on GitHub (pinned to cf67b549a7)