Retain all ClientRequestFilter and ClientResponseFilter impls in case of programmatic registration

This commit is contained in:
Andrew Guibert
2020-02-14 21:04:54 -06:00
parent 3f3fbe169b
commit fc1f9bd1d2
3 changed files with 24 additions and 2 deletions

View File

@@ -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) {

View File

@@ -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());

View File

@@ -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;
}
}