apache/seatunnel · error · IllegalArgumentException
Option 'field_delimiter' cannot be empty
Error message
Option 'field_delimiter' cannot be empty
What it means
Config validation in AzureQueueSourceConfig.validate: when the message format is TEXT, field_delimiter is required to split queue message text into record fields; an empty delimiter would prevent correct field parsing, so it is rejected at source initialization.
Source
Thrown at seatunnel-connectors-v2/connector-azure-queue-storage/src/main/java/org/apache/seatunnel/connectors/seatunnel/azure/queue/config/AzureQueueSourceConfig.java:85
.batchSize(config.get(AzureQueueStorageSourceOptions.BATCH_SIZE))
.visibilityTimeoutSeconds(
config.get(
AzureQueueStorageSourceOptions.VISIBILITY_TIMEOUT_SECONDS))
.pollIntervalMillis(
config.get(AzureQueueStorageSourceOptions.POLL_INTERVAL_MS))
.maxInFlightMessages(
config.get(AzureQueueStorageSourceOptions.MAX_IN_FLIGHT_MESSAGES))
.operationTimeoutMillis(
config.get(AzureQueueStorageSourceOptions.OPERATION_TIMEOUT_MS))
.build();
sourceConfig.validate();
return sourceConfig;
}
private void validate() {
AzureQueueConfigValidator.validateClient(this);
if (format == MessageFormat.TEXT && fieldDelimiter.isEmpty()) {
throw new IllegalArgumentException("Option 'field_delimiter' cannot be empty");
}
if (batchSize < 1 || batchSize > MAX_BATCH_SIZE) {
throw new IllegalArgumentException("Option 'batch_size' must be between 1 and 32");
}
if (visibilityTimeoutSeconds < 1
|| visibilityTimeoutSeconds > MAX_VISIBILITY_TIMEOUT_SECONDS) {
throw new IllegalArgumentException(
"Option 'visibility_timeout_seconds' must be between 1 and 604800");
}
if (pollIntervalMillis <= 0) {
throw new IllegalArgumentException(
"Option 'poll_interval_ms' must be greater than zero");
}
if (maxInFlightMessages < batchSize) {
throw new IllegalArgumentException(
"Option 'max_in_flight_messages' must be greater than or equal to batch_size");
}
if (operationTimeoutMillis <= 0) {View on GitHub (pinned to cf67b549a7)
Solutions
- Set field_delimiter to a non-empty separator, e.g. ","
- Switch format = JSON if messages are not delimited text
- Delete the field_delimiter key to fall back to the default
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 {
AzureQueueSourceConfig.from(config);
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("Option 'field_delimiter' cannot be empty")) {
log.error("Provide a non-empty field_delimiter for TEXT format");
} else { throw e; }
} Prevention
- Omit field_delimiter instead of setting it to ""
- Match source and sink formats when round-tripping messages
- Validate configs locally with a -e local dry run
When it happens
Trigger: Building AzureQueueSourceConfig via from() with MessageFormat.TEXT and field_delimiter = "".
Common situations: Empty delimiter left from a copied template; user expected the default to apply after explicitly overriding with ""; unit-config generator emitted an empty value.
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 'batch_size' must be between 1 and 32
- Option 'visibility_timeout_seconds' must be between 1 and 60
- Option 'poll_interval_ms' must be greater than zero
- Option 'max_in_flight_messages' must be greater than or equa
- Option '${option}' cannot be blank
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/645ce705180e4ced.
Report an issue: GitHub.