{"record":{"id":"128ce72fe6f5074a","repo":"opendataloader-project/opendataloader-pdf","slug":"azure-document-intelligence-backend-is-not-yet-imp","errorCode":null,"errorMessage":"Azure Document Intelligence backend is not yet implemented","messagePattern":"Azure Document Intelligence backend is not yet implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/hybrid/HybridClientFactory.java","lineNumber":100,"sourceCode":"        }\n\n        String lowerHybrid = hybrid.toLowerCase();\n\n        return CLIENT_CACHE.computeIfAbsent(lowerHybrid, key -> createClient(key, config));\n    }\n\n    /**\n     * Creates a new hybrid client instance.\n     */\n    private static HybridClient createClient(String hybrid, HybridConfig config) {\n        if (BACKEND_DOCLING_FAST.equals(hybrid)) {\n            return new DoclingFastServerClient(config);\n        } else if (BACKEND_HANCOM.equals(hybrid)) {\n            return new HancomClient(config);\n        } else if (BACKEND_HANCOM_AI.equals(hybrid)) {\n            return new HancomAIClient(config);\n        } else if (BACKEND_AZURE.equals(hybrid)) {\n            throw new UnsupportedOperationException(\"Azure Document Intelligence backend is not yet implemented\");\n        } else if (BACKEND_GOOGLE.equals(hybrid)) {\n            throw new UnsupportedOperationException(\"Google Document AI backend is not yet implemented\");\n        } else {\n            throw new IllegalArgumentException(\"Unknown hybrid backend: \" + hybrid +\n                \". Supported backends: \" + getSupportedBackends());\n        }\n    }\n\n    /**\n     * Creates a hybrid client for the specified backend.\n     *\n     * @param hybrid The backend type (e.g., \"docling\", \"hancom\", \"azure\", \"google\").\n     * @param config The configuration for the hybrid client.\n     * @return A new HybridClient instance for the specified backend.\n     * @throws IllegalArgumentException If the backend type is unknown or not supported.\n     * @deprecated Use {@link #getOrCreate(String, HybridConfig)} instead to reuse clients.\n     */\n    @Deprecated","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/opendataloader-project/opendataloader-pdf/blob/a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8/java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/hybrid/HybridClientFactory.java#L82-L118","documentation":"The 'azure' backend type is declared as a constant (BACKEND_AZURE) and accepted by the factory's routing logic, but no AzureHybridClient implementation exists yet. An UnsupportedOperationException is thrown to clearly signal that this is a planned-but-unimplemented feature, distinct from an unknown backend (which would throw IllegalArgumentException). This is a stub guard against premature use.","triggerScenarios":"Calling HybridClientFactory.getOrCreate('azure', config) or HybridClientFactory.create('azure', config). The factory matches the BACKEND_AZURE constant and hits the explicit throw. This can also happen if a config file or CLI default was set to 'azure' in anticipation of future support.","commonSituations":"Documentation or examples reference 'azure' as a supported backend, but the implementation hasn't shipped yet; a CI pipeline or deployment script defaults to azure based on an outdated roadmap; the user is migrating from a different tool that supported Azure Document Intelligence and assumed this library did too.","solutions":["Use a currently-implemented backend instead: 'docling-fast', 'hancom', or 'hancom-ai'.","If Azure Document Intelligence is required, call it directly via the Azure SDK and adapt the output to the library's expected format.","Check the project roadmap or release notes for when Azure backend support is planned.","File a feature request or contribute an AzureHybridClient implementation following the HybridClient interface."],"exampleFix":"// before: azure is not yet implemented\nHybridClient client = HybridClientFactory.getOrCreate(\"azure\", config);\n\n// after: use an implemented backend\nHybridClient client = HybridClientFactory.getOrCreate(\"hancom\", config);\n// or call Azure DI directly via azure-ai-documentintelligence SDK","handlingStrategy":"validation","validationCode":"// Validate backend is implemented before calling the factory\nSet<String> implementedBackends = Set.of(\n    HybridClientFactory.BACKEND_DOCLING_FAST,\n    HybridClientFactory.BACKEND_HANCOM,\n    HybridClientFactory.BACKEND_HANCOM_AI\n);\nif (!implementedBackends.contains(backend)) {\n    throw new IllegalArgumentException(\n        \"Backend '\" + backend + \"' is not yet implemented. Available: \" + implementedBackends);\n}","typeGuard":"public static boolean isImplementedBackend(String backend) {\n    return HybridClientFactory.BACKEND_DOCLING_FAST.equals(backend)\n        || HybridClientFactory.BACKEND_HANCOM.equals(backend)\n        || HybridClientFactory.BACKEND_HANCOM_AI.equals(backend);\n}","tryCatchPattern":"try {\n    client = HybridClientFactory.getOrCreate(backend, config);\n} catch (UnsupportedOperationException e) {\n    if (e.getMessage().contains(\"not yet implemented\")) {\n        // Use an implemented backend instead\n        LOGGER.warning(\"Backend '\" + backend + \"' not implemented. Falling back to 'hancom'.\");\n        client = HybridClientFactory.getOrCreate(HybridClientFactory.BACKEND_HANCOM, config);\n    } else {\n        throw e;\n    }\n}","preventionTips":["Check the release notes for when azure backend support is planned.","Filter unsupported backends from user-facing CLI help text to avoid confusion.","Validate backend names against the set of implemented backends before calling the factory.","If Azure is required now, integrate azure-ai-documentintelligence SDK directly."],"tags":["hybrid","factory","not-implemented","azure","unsupported"],"backgroundTag":null,"analyzedSha":"a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8","analyzedAt":"2026-08-14T05:22:03.953Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}