apache/seatunnel · error · org.apache.seatunnel.api.metadata.MetadataProviderException

No MetadataProvider found for kind

Error message

No MetadataProvider found for kind '%s'.

Available provider kinds are:

%s

What it means

MetadataProviderFactory.getProvider iterated every loaded SPI implementation and none had a kind() equal (case-insensitively) to the requested kind. The message lists the kinds that are actually available, which usually shows a typo or a missing plugin jar. The input at fault is the 'kind' string requested by the caller (e.g. the metadata datasource config in seatunnel.yaml).

Solutions

  1. Compare the requested kind with the 'Available provider kinds' list in the message and fix typos/case differences
  2. Install the connector/plugin jar that provides the missing MetadataProvider kind
  3. If writing a custom provider, verify its kind() matches what the datasource config references and that it is registered via SPI
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/MetadataProviderFactory.java:80 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/ad998004146105a1. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/MetadataProviderFactory.java:80

                            matchedKinds);
                    throw new MetadataProviderException(
                            String.format(
                                    "Multiple MetadataProvider implementations found for kind '%s'.\n\n"
                                            + "Ambiguous provider classes are:\n\n%s",
                                    kind, String.join("\n", matchedKinds)));
                }
                matchedProvider = provider;
                matchedKinds.add(provider.getClass().getName());
            }
        }

        if (matchedProvider == null) {
            List<String> availableKinds = new ArrayList<>();
            for (MetadataProvider provider : providers) {
                availableKinds.add(provider.kind());
            }
            log.debug("No MetadataProvider found for kind: {}", kind);
            throw new MetadataProviderException(
                    String.format(
                            "No MetadataProvider found for kind '%s'.\n\n"
                                    + "Available provider kinds are:\n\n%s",
                            kind, String.join("\n", availableKinds)));
        }

        return matchedProvider;
    }

    /**
     * Clears the provider cache.
     *
     * <p>This method is primarily intended for testing purposes. Currently, this method does
     * nothing as providers are loaded on-demand via SPI without caching.
     */
    public static void clearCache() {
        // No-op for testing compatibility
    }

View on GitHub (pinned to cf67b549a7)