{"record":{"id":"778f060aff6e57da","repo":"apache/seatunnel","slug":"multiple-metadataprovider-implementations-found-fo","errorCode":null,"errorMessage":"Multiple MetadataProvider implementations found for kind '%s'.\n\nAmbiguous provider classes are:\n\n%s","messagePattern":"Multiple MetadataProvider implementations found for kind '(.+?)'\\.\n\nAmbiguous provider classes are:\n\n(.+?)","errorType":"exception","errorClass":"org.apache.seatunnel.api.metadata.MetadataProviderException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/MetadataProviderFactory.java","lineNumber":63,"sourceCode":"     * @param kind the kind identifier of the provider to find\n     * @return the provider\n     * @throws MetadataProviderException if provider is not found or multiple providers with the\n     *     same kind are found\n     */\n    public static MetadataProvider getProvider(String kind) {\n        List<MetadataProvider> providers = loadProviders();\n\n        MetadataProvider matchedProvider = null;\n        List<String> matchedKinds = new ArrayList<>();\n\n        for (MetadataProvider provider : providers) {\n            if (provider.kind().equalsIgnoreCase(kind)) {\n                if (matchedProvider != null) {\n                    log.error(\n                            \"Multiple MetadataProvider implementations found for kind '{}': {}\",\n                            kind,\n                            matchedKinds);\n                    throw new MetadataProviderException(\n                            String.format(\n                                    \"Multiple MetadataProvider implementations found for kind '%s'.\\n\\n\"\n                                            + \"Ambiguous provider classes are:\\n\\n%s\",\n                                    kind, String.join(\"\\n\", matchedKinds)));\n                }\n                matchedProvider = provider;\n                matchedKinds.add(provider.getClass().getName());\n            }\n        }\n\n        if (matchedProvider == null) {\n            List<String> availableKinds = new ArrayList<>();\n            for (MetadataProvider provider : providers) {\n                availableKinds.add(provider.kind());\n            }\n            log.debug(\"No MetadataProvider found for kind: {}\", kind);\n            throw new MetadataProviderException(\n                    String.format(","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/MetadataProviderFactory.java#L45-L81","documentation":"MetadataProviderFactory.getProvider found two or more SPI implementations whose kind() matches the requested kind (case-insensitive), so it cannot pick one deterministically. The message lists the ambiguous class names. The input at fault is the plugin classpath containing duplicate providers registering the same kind string (e.g. two copies of the Gravitino provider or a forked plugin reusing the kind).","triggerScenarios":"Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/MetadataProviderFactory.java:63 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the ambiguous classes listed in the message and remove the duplicate jar from the plugin/connectors directory","Ensure each MetadataProvider implementation returns a unique kind() value","If you forked a provider, rename its kind() so it no longer collides"],"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"}