{"record":{"id":"ea0aca4ff903c1ef","repo":"apache/flink","slug":"the-input-contains-an-empty-argument","errorCode":null,"errorMessage":"The input {} contains an empty argument","messagePattern":"The input (.+?) contains an empty argument","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-core/src/main/java/org/apache/flink/util/ParameterTool.java","lineNumber":70,"sourceCode":"\n    /**\n     * Returns {@link ParameterTool} for the given arguments. The arguments are keys followed by\n     * values. Keys have to start with '-' or '--'\n     *\n     * <p><strong>Example arguments:</strong> --key1 value1 --key2 value2 -key3 value3\n     *\n     * @param args Input array arguments\n     * @return A {@link ParameterTool}\n     */\n    public static ParameterTool fromArgs(String[] args) {\n        final Map<String, String> map = CollectionUtil.newHashMapWithExpectedSize(args.length / 2);\n\n        int i = 0;\n        while (i < args.length) {\n            final String key = Utils.getKeyFromArgs(args, i);\n\n            if (key.isEmpty()) {\n                throw new IllegalArgumentException(\n                        \"The input \" + Arrays.toString(args) + \" contains an empty argument\");\n            }\n\n            i += 1; // try to find the value\n\n            if (i >= args.length) {\n                map.put(key, AbstractParameterTool.NO_VALUE_KEY);\n            } else if (NumberUtils.isNumber(args[i])) {\n                map.put(key, args[i]);\n                i += 1;\n            } else if (args[i].startsWith(\"--\") || args[i].startsWith(\"-\")) {\n                // the argument cannot be a negative number because we checked earlier\n                // -> the next argument is a parameter name\n                map.put(key, AbstractParameterTool.NO_VALUE_KEY);\n            } else {\n                map.put(key, args[i]);\n                i += 1;\n            }","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-core/src/main/java/org/apache/flink/util/ParameterTool.java#L52-L88","documentation":"ParameterTool.fromArgs walks the args array expecting '--key value' pairs; after stripping leading dashes an argument that is empty (the empty string, or a bare '-'/'--') yields an empty key and this IllegalArgumentException printing the whole args array. It is a fail-fast check that the CLI contract (non-empty flag names) is met.","triggerScenarios":"args containing \"\" (e.g. from a shell quoting bug), a lone \"--\" or \"-\" used as a separator, or an option name reduced to nothing after '--' stripping.","commonSituations":"Shell scripts passing \"$EMPTY_VAR\" unquoted-expanded; argument lists built by joining with stray empty elements; users inserting '--' expecting an end-of-options marker.","solutions":["Inspect the printed args array to find the empty element and remove it.","Fix the launcher: filter empty strings before calling Flink, e.g. Arrays.stream(args).filter(s -> !s.isEmpty()).","In shell scripts, quote variables and guard optional flags so empty values are not passed at all."],"exampleFix":"// before\nParameterTool params = ParameterTool.fromArgs(args); // args contains \"\"\n\n// after\nString[] cleaned = Arrays.stream(args).filter(s -> !s.isEmpty()).toArray(String[]::new);\nParameterTool params = ParameterTool.fromArgs(cleaned);","handlingStrategy":"validation","validationCode":"String[] cleaned = Arrays.stream(args).filter(s -> s != null && !s.isEmpty() && !s.equals(\"--\") && !s.equals(\"-\")).toArray(String[]::new);\nParameterTool params = ParameterTool.fromArgs(cleaned);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Filter empty argv elements where the process is launched.","Quote shell variables; build arg lists without conditional empty entries."],"tags":["cli","configuration","validation","flink-core"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}