apache/seatunnel · error · IllegalArgumentException
Option 'field_delimiter' cannot be empty
Error message
Option 'field_delimiter' cannot be empty
What it means
Config validation in AzureQueueSinkConfig.validate: when the message format is TEXT, field_delimiter is required to join record fields into the queue message; an empty delimiter would silently concatenate all fields, so it is rejected with IllegalArgumentException at sink initialization.
Source
Thrown at seatunnel-connectors-v2/connector-azure-queue-storage/src/main/java/org/apache/seatunnel/connectors/seatunnel/azure/queue/config/AzureQueueSinkConfig.java:71
.accountName(config.get(AzureQueueStorageSinkOptions.ACCOUNT_NAME))
.accountKey(config.get(AzureQueueStorageSinkOptions.ACCOUNT_KEY))
.sasToken(config.get(AzureQueueStorageSinkOptions.SAS_TOKEN))
.format(config.get(AzureQueueStorageSinkOptions.FORMAT))
.fieldDelimiter(config.get(AzureQueueStorageSinkOptions.FIELD_DELIMITER))
.messageEncoding(config.get(AzureQueueStorageSinkOptions.MESSAGE_ENCODING))
.maxInFlight(config.get(AzureQueueStorageSinkOptions.MAX_IN_FLIGHT))
.operationTimeoutMillis(
config.get(AzureQueueStorageSinkOptions.OPERATION_TIMEOUT_MS))
.build();
sinkConfig.validate();
return sinkConfig;
}
private void validate() {
AzureQueueConfigValidator.validateClient(this);
if (format == MessageFormat.TEXT && fieldDelimiter.isEmpty()) {
throw new IllegalArgumentException("Option 'field_delimiter' cannot be empty");
}
if (maxInFlight <= 0) {
throw new IllegalArgumentException("Option 'max_in_flight' must be greater than zero");
}
if (operationTimeoutMillis <= 0) {
throw new IllegalArgumentException(
"Option 'operation_timeout_ms' must be greater than zero");
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Set field_delimiter to a non-empty separator, e.g. "," or "\t"
- Use format = JSON instead of TEXT if delimiter joining is not desired
- Remove the field_delimiter key so the default delimiter is used
Example fix
// before format = TEXT field_delimiter = "" // after format = TEXT field_delimiter = ","
Defensive patterns
Strategy: validation
Validate before calling
java
if (format == MessageFormat.TEXT && (fieldDelimiter == null || fieldDelimiter.isEmpty())) {
fieldDelimiter = ",";
} Try / catch
java
try {
AzureQueueSinkConfig.from(config);
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("Option 'field_delimiter' cannot be empty")) {
log.error("Set a non-empty field_delimiter or use format=JSON");
} else { throw e; }
} Prevention
- Never set field_delimiter to ""; omit the key to use the default
- Prefer JSON format unless text splitting is required
- Add config assertions in CI for TEXT-format jobs
When it happens
Trigger: Building AzureQueueSinkConfig via from() with MessageFormat.TEXT and field_delimiter = "" (e.g. field_delimiter = "" in the config).
Common situations: User wanted to disable delimiter joining and set an empty value; template default left empty; HOCON parsed a quoted empty string instead of falling back to the default ",".
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Option 'max_in_flight' must be greater than zero
- Option 'operation_timeout_ms' must be greater than zero
- Option '${option}' cannot be blank
- Option '${valuesAndOptions[index + 1]}' is not valid for the
- Option 'field_delimiter' cannot be empty
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4eb48dd701dda04e.
Report an issue: GitHub.