diff --git a/extensions/rest-client/deployment/src/main/java/io/quarkus/restclient/deployment/RestClientProcessor.java b/extensions/rest-client/deployment/src/main/java/io/quarkus/restclient/deployment/RestClientProcessor.java index 509e8c22c..53a5e0eb1 100644 --- a/extensions/rest-client/deployment/src/main/java/io/quarkus/restclient/deployment/RestClientProcessor.java +++ b/extensions/rest-client/deployment/src/main/java/io/quarkus/restclient/deployment/RestClientProcessor.java @@ -83,6 +83,9 @@ class RestClientProcessor { private static final DotName REGISTER_PROVIDER = DotName.createSimple(RegisterProvider.class.getName()); private static final DotName REGISTER_PROVIDERS = DotName.createSimple(RegisterProviders.class.getName()); + private static final DotName CLIENT_REQUEST_FILTER = DotName.createSimple(ClientRequestFilter.class.getName()); + private static final DotName CLIENT_RESPONSE_FILTER = DotName.createSimple(ClientResponseFilter.class.getName()); + private static final String PROVIDERS_SERVICE_FILE = "META-INF/services/" + Providers.class.getName(); @BuildStep @@ -341,6 +344,15 @@ class RestClientProcessor { reflectiveClass .produce(new ReflectiveClassBuildItem(false, false, annotationInstance.value().asClass().toString())); } + + // now retain all un-annotated implementations of ClientRequestFilter and ClientResponseFilter + // in case they are programmatically registered by applications + for (ClassInfo info : index.getAllKnownImplementors(CLIENT_REQUEST_FILTER)) { + reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, info.name().toString())); + } + for (ClassInfo info : index.getAllKnownImplementors(CLIENT_RESPONSE_FILTER)) { + reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, info.name().toString())); + } } private boolean isRestClientInterface(IndexView index, ClassInfo classInfo) { diff --git a/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientRecorder.java b/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientRecorder.java index 82ec9adbe..43a49cd45 100644 --- a/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientRecorder.java +++ b/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/RestClientRecorder.java @@ -20,6 +20,7 @@ import io.quarkus.runtime.annotations.Recorder; public class RestClientRecorder { public static ResteasyProviderFactory providerFactory; + public static boolean SSL_ENABLED; public void setRestClientBuilderResolver() { RestClientBuilderResolver.setInstance(new BuilderResolver()); diff --git a/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/graal/ClientBuilderReplacement.java b/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/graal/ClientBuilderReplacement.java index 90c05fad8..3a72ea720 100644 --- a/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/graal/ClientBuilderReplacement.java +++ b/extensions/rest-client/runtime/src/main/java/io/quarkus/restclient/runtime/graal/ClientBuilderReplacement.java @@ -2,6 +2,8 @@ package io.quarkus.restclient.runtime.graal; import javax.ws.rs.client.ClientBuilder; +import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; +import org.jboss.resteasy.client.jaxrs.engines.URLConnectionClientEngineBuilder; import org.jboss.resteasy.client.jaxrs.internal.LocalResteasyProviderFactory; import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl; @@ -15,7 +17,14 @@ final class ClientBuilderReplacement { @Substitute public static ClientBuilder newBuilder() { - return new ResteasyClientBuilderImpl() - .providerFactory(new LocalResteasyProviderFactory(RestClientRecorder.providerFactory)); + ResteasyClientBuilder client = new ResteasyClientBuilderImpl(); + client.providerFactory(new LocalResteasyProviderFactory(RestClientRecorder.providerFactory)); + if (!RestClientRecorder.SSL_ENABLED) { + client.httpEngine(new URLConnectionClientEngineBuilder().resteasyClientBuilder(client).build()); + client.sslContext(null); + client.trustStore(null); + client.keyStore(null, ""); + } + return client; } }