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
- Add authentication_type to the sink config with one of: CONNECTION_STRING, STORAGE_SHARED_KEY, SAS_TOKEN
- Check the option key spelling and that the value matches an enum name exactly (uppercase)
- 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
- Use a config template/checklist that includes authentication_type and its matching credential fields
- Validate configs with the connector's Option rules before submitting the job
- Watch for typos — the option name is exactly authentication_type
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.
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- Unsupported authentication type
- accessId and accesskey must be provided when sts_token is…
- AmazonDocumentDB option 'uri' must include authentication…
- AUTH_FAILED
- AUTHENTICATE_KERBEROS_FAILED
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)