apache/incubator-seata · error · EnhancedServiceNotFoundException

not found service provider for : {}

Error message

not found service provider for : {}

What it means

getExtensionInstance throws this plain EnhancedServiceNotFoundException when the resolved ExtensionDefinition is null — i.e. the loader was asked for a definition it does not have. For the by-name path this means no provider is registered under that activateName; for the default path it means no default provider is discoverable at all.

Source

Thrown at common/src/main/java/org/apache/seata/common/loader/EnhancedServiceLoader.java:472

            }
            try {
                loadAllExtensionClass(loader, includeCompatible);
                ExtensionDefinition<S> cachedExtensionDefinition = getCachedExtensionDefinition(activateName);
                return getExtensionInstance(cachedExtensionDefinition, loader, argTypes, args);
            } catch (Throwable e) {
                if (e instanceof EnhancedServiceNotFoundException) {
                    throw (EnhancedServiceNotFoundException) e;
                } else {
                    throw new EnhancedServiceNotFoundException("not found service provider for : " + type.getName()
                            + " caused by " + ExceptionUtils.getStackTrace(e));
                }
            }
        }

        private S getExtensionInstance(
                ExtensionDefinition<S> definition, ClassLoader loader, Class<?>[] argTypes, Object[] args) {
            if (definition == null) {
                throw new EnhancedServiceNotFoundException("not found service provider for : " + type.getName());
            }
            if (Scope.SINGLETON.equals(definition.getScope())) {
                Holder<Object> holder =
                        CollectionUtils.computeIfAbsent(definitionToInstanceMap, definition, key -> new Holder<>());
                Object instance = holder.get();
                if (instance == null) {
                    synchronized (holder) {
                        instance = holder.get();
                        if (instance == null) {
                            instance = createNewExtension(definition, loader, argTypes, args);
                            holder.set(instance);
                        }
                    }
                }
                return (S) instance;
            } else {
                return createNewExtension(definition, loader, argTypes, args);
            }

View on GitHub (pinned to e01f97c6db)

Solutions

  1. Check the requested provider name against the names registered in the provider jar's META-INF/services file.
  2. Add the dependency jar that contains the provider for that name (e.g. seata-serializer-seata, seata-mysql).
  3. Fix fat-jar packaging with ServicesResourceTransformer to preserve service descriptors.
  4. Verify classloader visibility in app-server/OSGi environments.

Example fix

# before: seata.serializer="seataa"   # typo, no provider registered
# after:  seata.serializer="seata"
Defensive patterns

Strategy: validation

Validate before calling

// Validate config values against registered SPI names before load
Set<String> registeredNames = readSpiNames("META-INF/services/" + SpiType.class.getName());
if (!registeredNames.contains(configuredName)) {
    throw new IllegalArgumentException("Unknown provider '" + configuredName + "', valid: " + registeredNames);
}

Try / catch

try {
    T provider = EnhancedServiceLoader.load(SpiType.class, name);
} catch (EnhancedServiceNotFoundException e) {
    // message has no 'caused by' -> provider truly unregistered;
    // surface list of registered names to the user for a quick fix
    throw e;
}

Prevention

When it happens

Trigger: EnhancedServiceLoader.load(Spi.class, name) where no META-INF/services entry declares that name; or the default lookup finds zero providers (service file missing, empty, or not visible to the classloader).

Common situations: Typo in the provider name in configuration (e.g. serializer/db-vs-mysql names); the SPI service descriptor file was not copied into the jar; seata optional dependency jars omitted; shading dropped META-INF/services.

Related errors


AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14). Data as JSON: /api/errors/a52a294ce6619f74. Report an issue: GitHub.