{"record":{"id":"4eb48dd701dda04e","repo":"apache/seatunnel","slug":"option-field-delimiter-cannot-be-empty","errorCode":null,"errorMessage":"Option 'field_delimiter' cannot be empty","messagePattern":"Option 'field_delimiter' cannot be empty","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-azure-queue-storage/src/main/java/org/apache/seatunnel/connectors/seatunnel/azure/queue/config/AzureQueueSinkConfig.java","lineNumber":71,"sourceCode":"                        .accountName(config.get(AzureQueueStorageSinkOptions.ACCOUNT_NAME))\n                        .accountKey(config.get(AzureQueueStorageSinkOptions.ACCOUNT_KEY))\n                        .sasToken(config.get(AzureQueueStorageSinkOptions.SAS_TOKEN))\n                        .format(config.get(AzureQueueStorageSinkOptions.FORMAT))\n                        .fieldDelimiter(config.get(AzureQueueStorageSinkOptions.FIELD_DELIMITER))\n                        .messageEncoding(config.get(AzureQueueStorageSinkOptions.MESSAGE_ENCODING))\n                        .maxInFlight(config.get(AzureQueueStorageSinkOptions.MAX_IN_FLIGHT))\n                        .operationTimeoutMillis(\n                                config.get(AzureQueueStorageSinkOptions.OPERATION_TIMEOUT_MS))\n                        .build();\n        sinkConfig.validate();\n        return sinkConfig;\n    }\n\n    private void validate() {\n        AzureQueueConfigValidator.validateClient(this);\n\n        if (format == MessageFormat.TEXT && fieldDelimiter.isEmpty()) {\n            throw new IllegalArgumentException(\"Option 'field_delimiter' cannot be empty\");\n        }\n        if (maxInFlight <= 0) {\n            throw new IllegalArgumentException(\"Option 'max_in_flight' must be greater than zero\");\n        }\n        if (operationTimeoutMillis <= 0) {\n            throw new IllegalArgumentException(\n                    \"Option 'operation_timeout_ms' must be greater than zero\");\n        }\n    }\n}\n","sourceCodeStart":53,"sourceCodeEnd":82,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-azure-queue-storage/src/main/java/org/apache/seatunnel/connectors/seatunnel/azure/queue/config/AzureQueueSinkConfig.java#L53-L82","documentation":"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.","triggerScenarios":"Building AzureQueueSinkConfig via from() with MessageFormat.TEXT and field_delimiter = \"\" (e.g. field_delimiter = \"\" in the config).","commonSituations":"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 \",\".","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"],"exampleFix":"// before\nformat = TEXT\nfield_delimiter = \"\"\n// after\nformat = TEXT\nfield_delimiter = \",\"","handlingStrategy":"validation","validationCode":"java\nif (format == MessageFormat.TEXT && (fieldDelimiter == null || fieldDelimiter.isEmpty())) {\n    fieldDelimiter = \",\";\n}","typeGuard":null,"tryCatchPattern":"java\ntry {\n    AzureQueueSinkConfig.from(config);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().equals(\"Option 'field_delimiter' cannot be empty\")) {\n        log.error(\"Set a non-empty field_delimiter or use format=JSON\");\n    } else { throw e; }\n}","preventionTips":["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"],"tags":["config","validation","azure","sink"],"backgroundTag":"invalid-config-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}