Skip to content

Commit

Permalink
When skipping @Provider auto-discovery for REST clients, take client …
Browse files Browse the repository at this point in the history
…filters into consideration
  • Loading branch information
martin-kofoed-jyskebank-dk committed Nov 24, 2023
1 parent 934f8e1 commit f38fcb5
Showing 1 changed file with 28 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import static io.quarkus.rest.client.reactive.deployment.DotNames.CLIENT_QUERY_PARAM;
import static io.quarkus.rest.client.reactive.deployment.DotNames.CLIENT_QUERY_PARAMS;
import static io.quarkus.rest.client.reactive.deployment.DotNames.CLIENT_REDIRECT_HANDLER;
import static io.quarkus.rest.client.reactive.deployment.DotNames.CLIENT_REQUEST_FILTER;
import static io.quarkus.rest.client.reactive.deployment.DotNames.CLIENT_RESPONSE_FILTER;
import static io.quarkus.rest.client.reactive.deployment.DotNames.REGISTER_CLIENT_HEADERS;
import static io.quarkus.rest.client.reactive.deployment.DotNames.REGISTER_PROVIDER;
import static io.quarkus.rest.client.reactive.deployment.DotNames.REGISTER_PROVIDERS;
Expand Down Expand Up @@ -118,6 +120,7 @@ class RestClientReactiveProcessor {
private static final String ENABLE_COMPRESSION = "quarkus.http.enable-compression";
private static final String KOTLIN_INTERFACE_DEFAULT_IMPL_SUFFIX = "$DefaultImpls";


private static final Set<DotName> SKIP_COPYING_ANNOTATIONS_TO_GENERATED_CLASS = Set.of(
REGISTER_REST_CLIENT,
REGISTER_PROVIDER,
Expand Down Expand Up @@ -297,17 +300,9 @@ void registerProvidersFromAnnotations(CombinedIndexBuildItem indexBuildItem,
}
}

List<DotName> providerInterfaceNames = providerClass.interfaceNames();
// don't register server specific types
if (providerInterfaceNames.contains(ResteasyReactiveDotNames.CONTAINER_REQUEST_FILTER)
|| providerInterfaceNames.contains(ResteasyReactiveDotNames.CONTAINER_RESPONSE_FILTER)
|| providerInterfaceNames.contains(ResteasyReactiveDotNames.EXCEPTION_MAPPER)) {
if (skipAutoDiscoveredProvider(providerClass.interfaceNames())) {
continue;
}

if (providerInterfaceNames.contains(ResteasyReactiveDotNames.FEATURE)) {
continue; // features should not be automatically registered for the client, see javadoc for Feature
}
}

DotName providerDotName = providerClass.name();
int priority = getAnnotatedPriority(index, providerDotName.toString(), Priorities.USER);
Expand Down Expand Up @@ -580,6 +575,29 @@ && isImplementorOf(index, target.asClass(), RESPONSE_EXCEPTION_MAPPER, Set.of(AP
}
}

/**
* Based on a list of interfaces implemented by @Provider class, determine if registration
* should be skipped or not. Server-specific types should be omitted unless implementation
* of a <code>ClientRequestFilter</code> exists on the same class explicitly.
* Features should always be omitted.
*/
private boolean skipAutoDiscoveredProvider(List<DotName> providerInterfaceNames) {
if (providerInterfaceNames.contains(ResteasyReactiveDotNames.FEATURE)) {
return true;
}
if (providerInterfaceNames.contains(ResteasyReactiveDotNames.CONTAINER_REQUEST_FILTER)
|| providerInterfaceNames.contains(ResteasyReactiveDotNames.CONTAINER_RESPONSE_FILTER)
|| providerInterfaceNames.contains(ResteasyReactiveDotNames.EXCEPTION_MAPPER)) {
if (providerInterfaceNames.contains(CLIENT_REQUEST_FILTER)
|| providerInterfaceNames.contains(CLIENT_RESPONSE_FILTER)) {
return false;
} else {
return true;
}
}
return false;
}

private Map<String, GeneratedClassResult> populateClientExceptionMapperFromAnnotations(
BuildProducer<GeneratedClassBuildItem> generatedClasses,
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses, IndexView index) {
Expand Down

0 comments on commit f38fcb5

Please sign in to comment.