{"record":{"id":"57467508c163b732","repo":"opendataloader-project/opendataloader-pdf","slug":"unsupported-hybrid-backend-s-supported-values","errorCode":null,"errorMessage":"Unsupported hybrid backend '%s'. Supported values: %s","messagePattern":"Unsupported hybrid backend '(.+?)'\\. Supported values: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/Config.java","lineNumber":821,"sourceCode":"\n    /**\n     * Gets the hybrid backend name.\n     *\n     * @return The hybrid backend (off, docling, hancom, azure, google).\n     */\n    public String getHybrid() {\n        return hybrid;\n    }\n\n    /**\n     * Sets the hybrid backend.\n     *\n     * @param hybrid The hybrid backend (off, docling, hancom, azure, google).\n     * @throws IllegalArgumentException if the backend is not supported.\n     */\n    public void setHybrid(String hybrid) {\n        if (hybrid != null && !isValidHybrid(hybrid)) {\n            throw new IllegalArgumentException(\n                String.format(\"Unsupported hybrid backend '%s'. Supported values: %s\",\n                    hybrid, getHybridOptions(\", \")));\n        }\n        this.hybrid = hybrid != null ? hybrid.toLowerCase(Locale.ROOT) : HYBRID_OFF;\n    }\n\n    /**\n     * Gets the list of supported hybrid backend options.\n     *\n     * @param delimiter The delimiter to use between options.\n     * @return The string with hybrid backends separated by the delimiter.\n     */\n    public static String getHybridOptions(CharSequence delimiter) {\n        return String.join(delimiter, hybridOptions);\n    }\n\n    /**\n     * Checks if the given hybrid backend is valid.","sourceCodeStart":803,"sourceCodeEnd":839,"githubUrl":"https://github.com/opendataloader-project/opendataloader-pdf/blob/a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8/java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/Config.java#L803-L839","documentation":"Config.setHybrid rejects any value not registered in hybridOptions. The actually registered backends are: off, docling, docling-fast (deprecated alias), hancom, hancom-ai. Although the HYBRID_AZURE and HYBRID_GOOGLE string constants exist and the docstring mentions azure/google, they are NOT added to the option set (Config.java:131 comment 'azure, google added when implemented'), so passing them still throws. The check is case-insensitive and does not trim whitespace. null is accepted and defaults to off.","triggerScenarios":"config.setHybrid(\"azure\") or config.setHybrid(\"google\") (not yet wired up); config.setHybrid(\"doclng\") (typo); an untrimmed value from env.","commonSituations":"Reading the docstring/Javadoc that lists azure/google and trying them before they are implemented; using the deprecated docling-fast alias; typo; whitespace from config templates.","solutions":["Use a registered backend: off, docling, hancom, or hancom-ai (docling-fast is a deprecated alias that still works).","Do not pass azure or google until they are registered in your version.","Trim and lowercase externally sourced values; pre-validate with Config.isValidHybrid(value)."],"exampleFix":"// before: config.setHybrid(\"azure\");   // throws: not registered yet\n// after:  config.setHybrid(\"hancom\");","handlingStrategy":"validation","validationCode":"String backend = externalValue == null ? null : externalValue.trim().toLowerCase(Locale.ROOT);\nif (backend != null && !Config.isValidHybrid(backend)) {\n    throw new IllegalArgumentException(\n        \"Bad --hybrid '\" + backend + \"'. Valid: \" + Config.getHybridOptions(\", \"));\n}\nconfig.setHybrid(backend);","typeGuard":"static boolean isSupportedHybrid(String s) {\n    return s != null && Config.isValidHybrid(s.trim());\n}","tryCatchPattern":"try {\n    config.setHybrid(raw);\n} catch (IllegalArgumentException e) {\n    config.setHybrid(null); // default off\n}","preventionTips":["Do not trust the Javadoc list of backends; check isValidHybrid against the registered set in your version.","azure/google are documented but not registered yet; avoid them until added.","Trim and lowercase external values before validation."],"tags":["configuration","validation","hybrid"],"backgroundTag":null,"analyzedSha":"a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8","analyzedAt":"2026-08-14T05:22:03.953Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}