I have a reactive RestEasy client with a method that returns a Uni:
@Path("/api")
@RegisterRestClient(configKey="data-api")
@RegisterProvider(DataClientExceptionMapper.class)
public interface DataClient{
@GET
@Path("/data/{id}")
Uni<Data> get(@RestPath String id);
}
I have my ExceptionMapper like:
@Provider
public class DataClientExceptionMapper implements ResponseExceptionMapper<MyException> {
@Override
public MyException toThrowable(Response response) {
if (response.getStatus() >= 400) {
ErrorMessage error = response.readEntity(ErrorMessage.class);
logger.warning(() -> String.format("The remote service responded with HTTP %s - code=%s - message=%s", response.getStatus(), error.getCode(), error.getMessage()));
throw new MyException(error.getCode(), error.getMessage(), response.getStatusInfo().toEnum());
} else {
return null;
}
}
}
And now, I want to test my mapper with (I have wiremock which returns a HTTP 500):
assertThrows(MyException.class, () -> client.get("1").await().indefinitely());
The problem is: There is a ProcessException that is thrown with MyException as the cause
The failed test result is:
org.opentest4j.AssertionFailedError: Unexpected exception type thrown, expected: <exception.MyException> but was: <jakarta.ws.rs.ProcessingException>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:67)
at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:35)
at org.junit.jupiter.api.Assertions.assertThrows(Assertions.java:3115)
at ExceptionMapperTest.testServerErrorMapping(ExceptionMapperTest.java:34)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:1013)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:827)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: jakarta.ws.rs.ProcessingException: exception.MyException: an unexpected error occurred
at org.jboss.resteasy.reactive.client.handlers.ClientResponseFilterRestHandler.handle(ClientResponseFilterRestHandler.java:25)
at org.jboss.resteasy.reactive.client.handlers.ClientResponseFilterRestHandler.handle(ClientResponseFilterRestHandler.java:10)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.invokeHandler(AbstractResteasyReactiveContext.java:231)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
at io.smallrye.context.impl.wrappers.SlowContextualRunnable.run(SlowContextualRunnable.java:19)
at org.jboss.resteasy.reactive.client.handlers.ClientSwitchToRequestContextRestHandler$1$1.handle(ClientSwitchToRequestContextRestHandler.java:38)
at org.jboss.resteasy.reactive.client.handlers.ClientSwitchToRequestContextRestHandler$1$1.handle(ClientSwitchToRequestContextRestHandler.java:35)
at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:276)
at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:258)
at io.vertx.core.impl.ContextInternal.lambda$runOnContext$0(ContextInternal.java:56)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:566)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: exception.MyException: an unexpected error occurred
at DataClientExceptionMapper .toThrowable(DataClientExceptionMapper.java:22)
at DataClientExceptionMapper .toThrowable(DataClientExceptionMapper .java:11)
at io.quarkus.rest.client.reactive.runtime.MicroProfileRestClientResponseFilter.filter(MicroProfileRestClientResponseFilter.java:52)
at org.jboss.resteasy.reactive.client.handlers.ClientResponseFilterRestHandler.handle(ClientResponseFilterRestHandler.java:21)
... 17 more
Any grateful help on this?