{"record":{"id":"8229dbbf727649f6","repo":"quarkusio/quarkus","slug":"unable-to-find-provider-for-rest-client-class","errorCode":null,"errorMessage":"Unable to find provider for REST Client '${class}' with name '${name}'","messagePattern":"Unable to find provider for REST Client '(.+?)' with name '(.+?)'","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java","lineNumber":121,"sourceCode":"        runningProxies.get().removeAll(proxiesToClose);\n\n        // we need to figure out which ones to start\n        Set<RestClientHttpProxyBuildItem> proxiesToRun = new HashSet<>(requestedProxies);\n        proxiesToRun.removeAll(runningProxies.get());\n\n        // determine which providers to use for each of the new proxies to start\n        Map<RestClientHttpProxyBuildItem, DevServicesRestClientProxyProvider> biToProviderMap = new HashMap<>();\n        for (var toStart : proxiesToRun) {\n            DevServicesRestClientProxyProvider provider;\n            if (toStart.getProvider().isPresent()) {\n                String requestedProviderName = toStart.getProvider().get();\n\n                var maybeProviderBI = restClientProxyProviderBuildItems\n                        .stream()\n                        .filter(pbi -> requestedProviderName.equals(pbi.getProvider().name()))\n                        .findFirst();\n                if (maybeProviderBI.isEmpty()) {\n                    throw new RuntimeException(\"Unable to find provider for REST Client '\" + toStart.getClassName()\n                            + \"' with name '\" + requestedProviderName + \"'\");\n                }\n\n                provider = maybeProviderBI.get().getProvider();\n            } else {\n                // the algorithm is the following:\n                // if only the default is around, use it\n                // if there is only one besides the default, use it\n                // if there are multiple ones, fail\n\n                List<DevServicesRestClientProxyProvider.BuildItem> nonDefault = restClientProxyProviderBuildItems.stream()\n                        .filter(pib -> !pib.getProvider().name().equals(VertxHttpProxyDevServicesRestClientProxyProvider.NAME))\n                        .toList();\n                if (nonDefault.isEmpty()) {\n                    provider = VertxHttpProxyDevServicesRestClientProxyProvider.INSTANCE;\n                } else if (nonDefault.size() == 1) {\n                    // TODO: this part of the algorithm is questionable...\n                    provider = nonDefault.iterator().next().getProvider();","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java#L103-L139","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Fix the `local-proxy-provider` value to exactly match a registered provider name","Remove the `local-proxy-provider` property to let automatic resolution pick a provider","Add the extension that registers the desired provider to the project"],"exampleFix":"// before\nquarkus.rest-client.\"my-client\".local-proxy-provider=missing-provider\n// after\nquarkus.rest-client.\"my-client\".local-proxy-provider=kafka","handlingStrategy":"validation","validationCode":"// Confirm the provider name is registered before starting dev services\nString provider = config.getValue(\"quarkus.rest-client.\\\"org.acme.MyClient\\\".local-proxy-provider\", String.class);\nList<String> known = List.of(\"kafka\" /* registered providers */);\nif (!known.contains(provider)) throw new IllegalArgumentException(\"Unknown provider: \" + provider);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Copy provider names from extension documentation exactly","Remove local-proxy-provider if relying on defaults","After upgrading extensions, re-check provider names in application.properties"],"tags":["dev-services","rest-client","config","startup"],"backgroundTag":"unknown-provider-name","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}