{"record":{"id":"c30128ee4121a14b","repo":"apache/seatunnel","slug":"connector-s-has-unknown-option-keys-s-please","errorCode":null,"errorMessage":"Connector '%s' has unknown option keys: %s. Please check for typos. Declared options are: %s","messagePattern":"Connector '(.+?)' has unknown option keys: (.+?)\\. Please check for typos\\. Declared options are: (.+?)","errorType":"validation","errorClass":"org.apache.seatunnel.api.configuration.util.OptionValidationException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/ConfigValidator.java","lineNumber":97,"sourceCode":"    /**\n     * Validates that all user-provided config keys are declared in the connector's OptionRule.\n     * Unknown keys are treated as errors to catch typos and misconfigured options early.\n     *\n     * @param config the user-provided configuration\n     * @param rule the connector's declared option rule\n     * @param connectorName the connector name for error messages\n     * @throws OptionValidationException if unknown keys are detected\n     */\n    public static void validateUnknownKeys(\n            ReadonlyConfig config, OptionRule rule, String connectorName) {\n        Set<String> declaredKeys = collectDeclaredKeys(rule);\n        declaredKeys.addAll(COMMON_KEYS);\n\n        List<String> unknownKeys = new ArrayList<>();\n        validatePaths(config.getSourceMap(), \"\", declaredKeys, unknownKeys);\n\n        if (!unknownKeys.isEmpty()) {\n            throw new OptionValidationException(\n                    \"Connector '%s' has unknown option keys: %s. \"\n                            + \"Please check for typos. Declared options are: %s\",\n                    connectorName,\n                    unknownKeys,\n                    declaredKeys.stream().sorted().collect(Collectors.toList()));\n        }\n    }\n\n    private static void validatePaths(\n            Map<String, Object> map,\n            String prefix,\n            Set<String> declaredKeys,\n            List<String> unknownKeys) {\n        for (Map.Entry<String, Object> entry : map.entrySet()) {\n            String fullKey = prefix.isEmpty() ? entry.getKey() : prefix + \".\" + entry.getKey();\n\n            boolean isValid =\n                    declaredKeys.contains(fullKey)","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/ConfigValidator.java#L79-L115","documentation":"A configuration validation guard in ConfigValidator.validateUnknownKeys: the user's job config contains keys that are not declared in the connector's OptionRule, usually a typo or an option that does not exist for this connector/version. It fires at connector option-validation time with the user-supplied ReadonlyConfig.","triggerScenarios":"Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/ConfigValidator.java:97 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Compare each unknown key against the declared options list shown in the message and fix typos","Remove options not supported by the connector or plugin version in use","Consult the connector's official documentation for the correct option names"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}