{"record":{"id":"fe67928491c4c925","repo":"apache/seatunnel","slug":"option-option-cannot-be-blank","errorCode":null,"errorMessage":"Option '${option}' cannot be blank","messagePattern":"Option '(.+?)' cannot be blank","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/AzureQueueConfigValidator.java","lineNumber":84,"sourceCode":"                requireNonBlank(config.getEndpoint(), \"endpoint\");\n                requireNonBlank(config.getSasToken(), \"sas_token\");\n                rejectPresent(\n                        config.getConnectionString(),\n                        \"connection_string\",\n                        config.getAccountName(),\n                        \"account_name\",\n                        config.getAccountKey(),\n                        \"account_key\");\n                break;\n            default:\n                throw new IllegalArgumentException(\n                        \"Unsupported authentication_type: \" + config.getAuthenticationType());\n        }\n    }\n\n    static void requireNonBlank(String value, String option) {\n        if (value == null || value.trim().isEmpty()) {\n            throw new IllegalArgumentException(\"Option '\" + option + \"' cannot be blank\");\n        }\n    }\n\n    private static void rejectPresent(Object... valuesAndOptions) {\n        for (int index = 0; index < valuesAndOptions.length; index += 2) {\n            if (valuesAndOptions[index] != null) {\n                throw new IllegalArgumentException(\n                        \"Option '\"\n                                + valuesAndOptions[index + 1]\n                                + \"' is not valid for the selected authentication_type\");\n            }\n        }\n    }\n}\n","sourceCodeStart":66,"sourceCodeEnd":99,"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/AzureQueueConfigValidator.java#L66-L99","documentation":"AzureQueueConfigValidator.requireNonBlank throws this when a required client option (connection string, queue name, endpoint, account name, etc.) is null or whitespace-only. It is a fail-fast guard during config validation so the connector never builds a client with an unusable value.","triggerScenarios":"Calling validateClient (via AzureQueueSinkConfig.from or AzureQueueSourceConfig.from) with a required client option that is null, empty string, or only whitespace, e.g. 'connection_string=\"\"' or a missing queue_name for the selected authentication_type.","commonSituations":"Env var like AZURE_STORAGE_CONNECTION_STRING not set and interpolated as empty; YAML key typo so the option falls back to null; trailing spaces in HOCON after copying from docs; option omitted because a different authentication_type was intended.","solutions":["Set the reported option to a non-blank value in the source/sink config (e.g. connection_string, storage_account_name, queue_name)","Check that the environment variable or placeholder referenced by the config is actually set in the runtime environment","Verify the option name spelling matches the plugin's Option definitions (exact kebab/snake-case)","Choose an authentication_type whose required options you actually provide"],"exampleFix":"// before\nconnection_string = \"\"\n// after\nconnection_string = \"DefaultEndpointsProtocol=https;AccountName=mystorage;AccountKey=...\"","handlingStrategy":"validation","validationCode":"java\nList<String> required = List.of(\"connection_string\", \"queue_name\");\nfor (String opt : required) {\n    String v = config.get(opt);\n    if (v == null || v.trim().isEmpty()) {\n        throw new IllegalArgumentException(\"Option '\" + opt + \"' cannot be blank\");\n    }\n}","typeGuard":"java\nboolean isNonBlank(String s) { return s != null && !s.trim().isEmpty(); }","tryCatchPattern":"java\ntry {\n    AzureQueueSinkConfig.from(config);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"cannot be blank\")) {\n        log.error(\"Missing required Azure Queue option: {}\", e.getMessage());\n    } else { throw e; }\n}","preventionTips":["Keep credentials in env vars and validate they are set before job submission","Run a config lint/dry-run step in CI before deploying SeaTunnel jobs","Copy option names directly from the plugin docs, not by hand"],"tags":["config","validation","azure"],"backgroundTag":"empty-required-field","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"}