Quarkus Microprofile Rest Client ResponseExceptionMapper no detecta errores

Oct 06 2020

Tengo un cliente de descanso en un servicio de Quarkus (1.8.1) definido así:

@RegisterRestClient
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {
    @POST
    @Path("/{entity}")
    Response postEntity(@HeaderParam(value = "Authorization") String auth, 
            @PathParam("entity") String entity, Object payload) throws MyException;
}

Y lo he implementado ResponseExceptionMapperen el mismo paquete como este:

public class MyExceptionMapper implements ResponseExceptionMapper<MyException> {
    @Override
    public MyException toThrowable(Response r) {
        return new DynamicsException(r.getStatus() + " - " + r.readEntity(String.class));
    }
}

Cuando llamo al servicio, actualmente está devolviendo un error 404 y esperaba MyExceptionMapperque se llamara al código de la clase. Sin embargo, no lo hace y en su lugar javax.ws.rs.WebApplicationExceptionse lanza a. El seguimiento de la pila incluye una llamada a DefaultResponseExceptionMapper. Parece que mi mapeador no se ha registrado.

¿Cómo puedo registrar mi controlador para respuestas no válidas de llamadas al servicio?

Respuestas

2 Haroon Oct 06 2020 at 14:02

Debe registrar MyExceptionMapper como proveedor del resto del cliente con @RegisterProvider(MyExceptionMapper.class).

@RegisterRestClient
@RegisterProvider(MyExceptionMapper.class)
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {