quarkusio/quarkus · error · RuntimeException

Unable to find provider for REST Client '${class}' with name

Error message

Unable to find provider for REST Client '${class}' with name '${name}'

What it means

Dev Services for REST Client builds local HTTP proxies by matching each client's requested provider name against registered RestClientProxyProviderBuildItems. When no registered provider matches the configured `local-proxy-provider` name, startup of the dev service fails with this RuntimeException.

Source

Thrown at extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java:121

        runningProxies.get().removeAll(proxiesToClose);

        // we need to figure out which ones to start
        Set<RestClientHttpProxyBuildItem> proxiesToRun = new HashSet<>(requestedProxies);
        proxiesToRun.removeAll(runningProxies.get());

        // determine which providers to use for each of the new proxies to start
        Map<RestClientHttpProxyBuildItem, DevServicesRestClientProxyProvider> biToProviderMap = new HashMap<>();
        for (var toStart : proxiesToRun) {
            DevServicesRestClientProxyProvider provider;
            if (toStart.getProvider().isPresent()) {
                String requestedProviderName = toStart.getProvider().get();

                var maybeProviderBI = restClientProxyProviderBuildItems
                        .stream()
                        .filter(pbi -> requestedProviderName.equals(pbi.getProvider().name()))
                        .findFirst();
                if (maybeProviderBI.isEmpty()) {
                    throw new RuntimeException("Unable to find provider for REST Client '" + toStart.getClassName()
                            + "' with name '" + requestedProviderName + "'");
                }

                provider = maybeProviderBI.get().getProvider();
            } else {
                // the algorithm is the following:
                // if only the default is around, use it
                // if there is only one besides the default, use it
                // if there are multiple ones, fail

                List<DevServicesRestClientProxyProvider.BuildItem> nonDefault = restClientProxyProviderBuildItems.stream()
                        .filter(pib -> !pib.getProvider().name().equals(VertxHttpProxyDevServicesRestClientProxyProvider.NAME))
                        .toList();
                if (nonDefault.isEmpty()) {
                    provider = VertxHttpProxyDevServicesRestClientProxyProvider.INSTANCE;
                } else if (nonDefault.size() == 1) {
                    // TODO: this part of the algorithm is questionable...
                    provider = nonDefault.iterator().next().getProvider();

View on GitHub (pinned to e1c734241f)

Solutions

  1. Fix the `local-proxy-provider` value to exactly match a registered provider name
  2. Remove the `local-proxy-provider` property to let automatic resolution pick a provider
  3. Add the extension that registers the desired provider to the project

Example fix

// before
quarkus.rest-client."my-client".local-proxy-provider=missing-provider
// after
quarkus.rest-client."my-client".local-proxy-provider=kafka
Defensive patterns

Strategy: validation

Validate before calling

// Confirm the provider name is registered before starting dev services
String provider = config.getValue("quarkus.rest-client.\"org.acme.MyClient\".local-proxy-provider", String.class);
List<String> known = List.of("kafka" /* registered providers */);
if (!known.contains(provider)) throw new IllegalArgumentException("Unknown provider: " + provider);

Prevention

When it happens

Trigger: Setting `quarkus.rest-client."my-client".local-proxy-provider=some-name` where `some-name` doesn't match any provider registered via RestClientProxyProviderBuildItem in the current build.

Common situations: Typo in the provider name in application.properties; renaming a provider extension in an upgrade; the provider extension not being on the classpath so its build item never registers.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/8229dbbf727649f6. Report an issue: GitHub.