Skip to content

Commit

Permalink
Merge pull request #23721 from pravussum/fix-reactive-rest-client-lis…
Browse files Browse the repository at this point in the history
…teners-discovery

Fix RestClientListener discovery for Reactive REST Client
  • Loading branch information
geoand authored Feb 16, 2022
2 parents f547d1e + 1545894 commit d840d72
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package io.quarkus.rest.client.reactive;

import static io.quarkus.rest.client.reactive.RestClientTestUtil.setUrlForClass;
import static io.quarkus.rest.client.reactive.TestRestClientListener.HEADER_PARAM_NAME;
import static io.quarkus.rest.client.reactive.TestRestClientListener.HEADER_PARAM_VALUE;
import static org.assertj.core.api.Assertions.assertThat;

import java.time.Duration;

import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusUnitTest;
import io.smallrye.mutiny.Uni;

public class RestClientListenerTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(Client.class, Resource.class, TestRestClientListener.class)
.addAsResource(
new StringAsset(setUrlForClass(Client.class)),
"application.properties")
.addAsResource(
new StringAsset(TestRestClientListener.class.getCanonicalName()),
"META-INF/services/org.eclipse.microprofile.rest.client.spi.RestClientListener"));

@RestClient
Client client;

@Test
void shouldCallRegisteredRestClient() {
String result = client.get()
.await().atMost(Duration.ofSeconds(10));
assertThat(result).isEqualTo(HEADER_PARAM_VALUE);
}

@Path("/")
@RegisterRestClient
@Produces(MediaType.TEXT_PLAIN)
interface Client {
@GET
Uni<String> get();
}

@Path("/")
@Produces(MediaType.TEXT_PLAIN)
static class Resource {

@GET
public String get(@HeaderParam(HEADER_PARAM_NAME) String headerParam) {
return headerParam;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.quarkus.rest.client.reactive;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;

import org.eclipse.microprofile.rest.client.RestClientBuilder;
import org.eclipse.microprofile.rest.client.spi.RestClientListener;

public class TestRestClientListener implements RestClientListener {

public static final String HEADER_PARAM_NAME = "filterheader";
public static final String HEADER_PARAM_VALUE = "present";

@Override
public void onNewClient(Class<?> aClass, RestClientBuilder restClientBuilder) {
restClientBuilder.register(new TestRestClientFilter());
}

static class TestRestClientFilter implements ClientRequestFilter {

@Override
public void filter(ClientRequestContext clientRequestContext) {
clientRequestContext.getHeaders().putSingle(HEADER_PARAM_NAME, HEADER_PARAM_VALUE);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ private RestClientListeners() {

static Collection<RestClientListener> get() {
List<RestClientListener> result = new ArrayList<>();
ServiceLoader<RestClientListener> listeners = ServiceLoader.load(RestClientListener.class,
RestClientListeners.class.getClassLoader());
ServiceLoader<RestClientListener> listeners = ServiceLoader.load(RestClientListener.class);
for (RestClientListener listener : listeners) {
result.add(listener);
}
Expand Down

0 comments on commit d840d72

Please sign in to comment.