diff --git a/extensions/resteasy-classic/rest-client-config/runtime/src/main/java/io/quarkus/restclient/config/RestClientsBuildTimeConfig.java b/extensions/resteasy-classic/rest-client-config/runtime/src/main/java/io/quarkus/restclient/config/RestClientsBuildTimeConfig.java index dd9538c8f0949..192c41fd1c72d 100644 --- a/extensions/resteasy-classic/rest-client-config/runtime/src/main/java/io/quarkus/restclient/config/RestClientsBuildTimeConfig.java +++ b/extensions/resteasy-classic/rest-client-config/runtime/src/main/java/io/quarkus/restclient/config/RestClientsBuildTimeConfig.java @@ -9,11 +9,11 @@ import org.eclipse.microprofile.config.ConfigProvider; import org.eclipse.microprofile.config.spi.ConfigSource; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -import org.jboss.jandex.ClassInfo; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; import io.smallrye.config.ConfigMapping; +import io.smallrye.config.ConfigValue; import io.smallrye.config.SmallRyeConfig; import io.smallrye.config.SmallRyeConfigBuilder; import io.smallrye.config.SmallRyeConfigBuilderCustomizer; @@ -89,25 +89,6 @@ interface RestClientBuildConfig { boolean removesTrailingSlash(); } - /** - * Get the build config for a concrete REST Client implementation. - */ - default Optional getConfigFor(ClassInfo restClientInterface, Optional configKey) { - RestClientBuildConfig config = null; - if (clients().containsKey(restClientInterface.name().toString())) { - // quarkus style config; fully qualified class name - config = clients().get(restClientInterface.name().toString()); - } else if (configKey.isPresent() && clients().containsKey(configKey.get())) { - // quarkus style config; configKey - config = clients().get(configKey.get()); - } else { - // quarkus style config; short class name - config = clients().get(restClientInterface.simpleName()); - } - - return Optional.ofNullable(config); - } - /** * Provides a new {@link RestClientsBuildTimeConfig} with the discovered registered REST Clients configuration * only. This should be preferred once REST Clients are discovered and validated to keep only the required @@ -120,10 +101,15 @@ default Optional getConfigFor(ClassInfo restClientInterfa * @return a {@link RestClientsBuildTimeConfig} with the discovered registered REST Clients configuration only. */ default RestClientsBuildTimeConfig get(List restClients) { - SmallRyeConfig config = new SmallRyeConfigBuilder() + return getConfig(restClients).getConfigMapping(RestClientsBuildTimeConfig.class); + } + + default SmallRyeConfig getConfig(List restClients) { + return new SmallRyeConfigBuilder() .withSources( new ConfigSource() { final SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class); + final ConfigSource defaultsSource = getDefaultsSource(); @Override public Set getPropertyNames() { @@ -134,13 +120,25 @@ public Set getPropertyNames() { @Override public String getValue(final String propertyName) { - return config.getRawValue(propertyName); + ConfigValue configValue = config.getConfigValue(propertyName); + if (configValue != null && !defaultsSource.getName().equals(configValue.getSourceName())) { + return configValue.getValue(); + } + return null; } @Override public String getName() { return "SmallRye Config"; } + + private ConfigSource getDefaultsSource() { + ConfigSource configSource = null; + for (ConfigSource source : config.getConfigSources()) { + configSource = source; + } + return configSource; + } }) .withCustomizers(new SmallRyeConfigBuilderCustomizer() { @Override @@ -156,7 +154,5 @@ public List getRestClients() { .withMapping(RestClientsBuildTimeConfig.class) .withMappingIgnore("quarkus.**") .build(); - - return config.getConfigMapping(RestClientsBuildTimeConfig.class); } } diff --git a/extensions/resteasy-classic/rest-client-config/runtime/src/test/java/io/quarkus/restclient/config/RestClientConfigTest.java b/extensions/resteasy-classic/rest-client-config/runtime/src/test/java/io/quarkus/restclient/config/RestClientConfigTest.java index 86b8fe807f85c..58a7e814b275e 100644 --- a/extensions/resteasy-classic/rest-client-config/runtime/src/test/java/io/quarkus/restclient/config/RestClientConfigTest.java +++ b/extensions/resteasy-classic/rest-client-config/runtime/src/test/java/io/quarkus/restclient/config/RestClientConfigTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -224,6 +225,19 @@ public List getRestClients() { assertNotNull(config); } + @Test + void buildTimeConfig() { + SmallRyeConfig config = ConfigUtils.emptyConfigBuilder() + .withMapping(RestClientsBuildTimeConfig.class) + .build(); + assertNotNull(config); + + RestClientsBuildTimeConfig buildTimeConfig = config.getConfigMapping(RestClientsBuildTimeConfig.class) + .get(List.of(new RegisteredRestClient(ConfigKeyRestClient.class, "key"))); + + assertFalse(buildTimeConfig.clients().get(ConfigKeyRestClient.class.getName()).removesTrailingSlash()); + } + private void verifyConfig(RestClientConfig config) { assertTrue(config.url().isPresent()); assertThat(config.url().get()).isEqualTo("http://localhost:8080"); diff --git a/extensions/resteasy-classic/rest-client-config/runtime/src/test/resources/application.properties b/extensions/resteasy-classic/rest-client-config/runtime/src/test/resources/application.properties index 4e0b736320dd4..4247573d2b793 100644 --- a/extensions/resteasy-classic/rest-client-config/runtime/src/test/resources/application.properties +++ b/extensions/resteasy-classic/rest-client-config/runtime/src/test/resources/application.properties @@ -15,6 +15,7 @@ quarkus.rest-client."io.quarkus.restclient.config.FullNameRestClient".connection quarkus.rest-client."io.quarkus.restclient.config.FullNameRestClient".connection-pool-size=10 quarkus.rest-client."io.quarkus.restclient.config.FullNameRestClient".max-chunk-size=1024 +quarkus.rest-client.key.removes-trailing-slash=false quarkus.rest-client.key.url=http://localhost:8080 quarkus.rest-client.key.uri=http://localhost:8081 quarkus.rest-client.key.scope=Singleton diff --git a/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/RestClientReactiveProcessor.java b/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/RestClientReactiveProcessor.java index 22124d28e26d1..0746d6459930d 100644 --- a/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/RestClientReactiveProcessor.java +++ b/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/RestClientReactiveProcessor.java @@ -109,6 +109,7 @@ import io.quarkus.rest.client.reactive.runtime.RestClientReactiveConfig; import io.quarkus.rest.client.reactive.runtime.RestClientRecorder; import io.quarkus.rest.client.reactive.spi.RestClientAnnotationsTransformerBuildItem; +import io.quarkus.restclient.config.RegisteredRestClient; import io.quarkus.restclient.config.RestClientsBuildTimeConfig; import io.quarkus.restclient.config.RestClientsConfig; import io.quarkus.restclient.config.deployment.RestClientConfigUtils; @@ -173,9 +174,15 @@ void setUpClientBuildTimeProperties(BuildProducer registeredRestClients = toRegisteredRestClients(registeredRestClientBuildItems); + RestClientsBuildTimeConfig buildTimeConfig = configsPerClient.get(registeredRestClients); + List clientsToDisable = new ArrayList<>(); for (RegisteredRestClientBuildItem registeredRestClient : registeredRestClientBuildItems) { - if (removesTrailingSlashIsDisabled(configsPerClient, registeredRestClient)) { + if (!buildTimeConfig.removesTrailingSlash() || + !buildTimeConfig.clients() + .get(registeredRestClient.getClassInfo().name().toString()) + .removesTrailingSlash()) { clientsToDisable.add(registeredRestClient.getClassInfo().name()); } } @@ -855,19 +862,6 @@ private boolean isRestMethod(MethodInfo method) { return false; } - private boolean removesTrailingSlashIsDisabled(RestClientsBuildTimeConfig config, - RegisteredRestClientBuildItem registeredRestClient) { - // is disabled for all the clients - if (!config.removesTrailingSlash()) { - return true; - } - - // is disabled for this concrete client - Optional configForClient = config - .getConfigFor(registeredRestClient.getClassInfo(), registeredRestClient.getConfigKey()); - return configForClient.isPresent() && !configForClient.get().removesTrailingSlash(); - } - private ScopeInfo computeDefaultScope(Capabilities capabilities, Config config, ClassInfo restClientInterface, Optional configKey) { diff --git a/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java b/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java index 913697d6af206..6e2eb61e3f12c 100644 --- a/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java +++ b/extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/devservices/DevServicesRestClientHttpProxyProcessor.java @@ -17,7 +17,6 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.exception.UncheckedException; -import org.eclipse.microprofile.config.ConfigProvider; import org.jboss.jandex.ClassInfo; import org.jboss.jandex.IndexView; import org.jboss.logging.Logger; @@ -32,6 +31,7 @@ import io.quarkus.rest.client.reactive.deployment.RegisteredRestClientBuildItem; import io.quarkus.rest.client.reactive.spi.DevServicesRestClientProxyProvider; import io.quarkus.rest.client.reactive.spi.RestClientHttpProxyBuildItem; +import io.quarkus.restclient.config.RegisteredRestClient; import io.quarkus.restclient.config.RestClientsBuildTimeConfig; import io.quarkus.restclient.config.RestClientsBuildTimeConfig.RestClientBuildConfig; import io.smallrye.config.SmallRyeConfig; @@ -60,14 +60,15 @@ public void determineRequiredProxies( CombinedIndexBuildItem combinedIndexBuildItem, List registeredRestClientBuildItems, BuildProducer producer) { - Map configs = clientsConfig.get(toRegisteredRestClients(registeredRestClientBuildItems)) - .clients(); + + List registeredRestClients = toRegisteredRestClients(registeredRestClientBuildItems); + Map configs = clientsConfig.get(registeredRestClients).clients(); if (configs.isEmpty()) { return; } IndexView index = combinedIndexBuildItem.getIndex(); - SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class); + SmallRyeConfig config = clientsConfig.getConfig(registeredRestClients); for (var configEntry : configs.entrySet()) { if (!configEntry.getValue().enableLocalProxy()) { log.trace("Ignoring config key: '" + configEntry.getKey() + "' because enableLocalProxy is false");