Q: Kumuluzee microprofile rest client - cannot get response body in error responses I am trying to get error response body in java application runnig on Kumuluzee 3.9.0. I dont know, why it is not possible to get response from response with HTTP status 4xx. I tried to get response body via casting entity to InputStream and read bytes in loop, but no bytes returned. IDE debugger shows entity with byteArrayInputStrem in.
Thanks for you help.
@Path("/rest")
public interface MyClient {

    @GET
    @Path("/{value}")
    @Consumes(MediaType.APPLICATION_JSON)
    MyResponse getValue(@PathParam("value") String value);

@ApplicationScoped
public class MyRestClient {
    
    private MyClient client;

    @PostConstruct
    public void init() throws Exception{
        try {
            URI uri = new URI("http://localhost:8080/myservice/");
            
            client = RestClientBuilder.newBuilder()
                    .baseUri(uri)
                    .build(MyClient.class);
            
        }catch(Exception e){
            log.error("", e);
            throw e;
        }
    }

    public String getValue(String data) {
        try {
            MyResponse myResponse = client.getMyResponse(String data);
            if (myResponse != null) {
                return myResponse.getValue();  //this works perfectly
            }
        } catch(WebApplicationException e){
            Response response =  e.getResponse();  //in case of 4xx responses I cannot get response body

            if(response.hasEntity()){ //always return false, but response body is there 
                log.error("response body: " + response.getEntity());
            }
            Object entity = response.getEntity(); //IDE debug shows entity with bytearray in, but not able to read bytes programatically
            String body = new BufferedReader(new InputStreamReader((FilterInputStream) e.getResponse().getEntity()))
                    .lines().collect(Collectors.joining("\n")); //does not work, returns empty string
            String body2 = response.readEntity(String.class) //even this does not work
            log.error("Unable to response..", e);
        }catch (Exception e) {
            log.error("Unable to get response.", e);
        }
        return null;
    }


A: This work for me:
private void logWebApplicationException(WebApplicationException e) {
    final Response response = e.getResponse();
    final int status = response.getStatus();

    if (response.hasEntity()) {
        final Object entity = response.getEntity();
        if (entity instanceof ByteArrayInputStream) {
            ByteArrayInputStream erroIs = (ByteArrayInputStream) entity;
            String error = new String(erroIs.readAllBytes(), StandardCharsets.UTF_8);

            log.error("Erro ao tentar obter arquivos RCO do SIMPI. Status: {}. Descricao: {} ",
                    status, error);
        }
    } else {
        log.error("Erro ao tentar obter arquivos RCO do SIMPI. Status: {}. Descricao: {}",
                status, response.getStatusInfo().getReasonPhrase());
    }
}

