{"record":{"id":"8627a088e9cf6bcc","repo":"quarkusio/quarkus","slug":"multiple-providers-found-for-rest-client-class","errorCode":null,"errorMessage":"Multiple providers found for REST Client '${class}'. Please specify one by setting 'quarkus.rest-client.\"${class}\".local-proxy-provider' to one the following providers: ${providers}","messagePattern":"Multiple providers found for REST Client '(.+?)'\\. Please specify one by setting 'quarkus\\.rest-client\\.\"(.+?)\"\\.local-proxy-provider' to one the following providers: (.+?)","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":144,"sourceCode":"            } 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();\n                } else {\n                    String availableProviders = restClientProxyProviderBuildItems.stream().map(bi -> bi.getProvider().name())\n                            .collect(\n                                    Collectors.joining(\",\"));\n                    throw new RuntimeException(\"Multiple providers found for REST Client '\" + toStart.getClassName()\n                            + \"'. Please specify one by setting 'quarkus.rest-client.\\\"\" + toStart.getClassName()\n                            + \"\\\".local-proxy-provider' to one the following providers: \" + availableProviders);\n                }\n            }\n\n            biToProviderMap.put(toStart, provider);\n        }\n\n        // here is where we set up providers\n        var providersToRun = new HashSet<>(biToProviderMap.values());\n        providersToRun.removeAll(runningProviders.get());\n        for (var provider : providersToRun) {\n            Closeable closeable = provider.setup();\n            if (closeable != null) {\n                providerCloseables.get().add(closeable);\n            }\n            runningProviders.get().add(provider);\n        }","sourceCodeStart":126,"sourceCodeEnd":162,"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#L126-L162","documentation":"When a REST Client's proxy provider is not explicitly configured and multiple non-default providers are registered, Dev Services cannot decide which one to use and throws a RuntimeException listing all candidates. Resolution requires setting `quarkus.rest-client.\"<client>\".local-proxy-provider` to one of the listed names.","triggerScenarios":"Two or more extensions register RestClientProxyProviderBuildItems, none is marked default, and no `local-proxy-provider` is set for the client.","commonSituations":"Adding a second provider extension (e.g. both Kafka and another proxy provider) to a project that previously had one; upgrading Quarkus where a previously-default provider lost its default status.","solutions":["Set `quarkus.rest-client.\"<client-class>\".local-proxy-provider` to one of the provider names listed in the message","Remove one of the competing provider extensions if it is unneeded","Check if one provider extension offers default configuration that should be preferred"],"exampleFix":"// before\n(no provider configured; kafka and redis both registered)\n// after\nquarkus.rest-client.\"org.acme.MyClient\".local-proxy-provider=kafka","handlingStrategy":"validation","validationCode":"// Guard: ensure at most one proxy-provider extension per client when no explicit provider is set\nString explicit = config.getValue(\"quarkus.rest-client.\\\"org.acme.MyClient\\\".local-proxy-provider\", String.class, null);\nint providerExtensions = 2; // count registered provider extensions in the project\nif (explicit == null && providerExtensions > 1) {\n  throw new IllegalStateException(\"Set quarkus.rest-client.\\\"org.acme.MyClient\\\".local-proxy-provider\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Explicitly set local-proxy-provider whenever multiple provider extensions are present","Avoid adding redundant provider extensions to the same project","Read the runtime error's provider list and pick one rather than guessing"],"tags":["dev-services","rest-client","config","ambiguous"],"backgroundTag":"ambiguous-provider-configuration","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"}