Repository: quarkusio/quarkus
Issue: Response Body in ClientExceptionMapper is always null

### Describe the bug

We implemented a REST-Client using the quarkus-rest-client-reactive dependency. 
For this client we added custom exception handling using the `@ClientExceptionMapper` annotation.
There we could read the body of the response.
e.g.:

```java
@ClientExceptionMapper
static ServiceException handle(Response response) {
    response.bufferEntity();
    Error error = response.readEntity(Error.class);
    return new ServiceException(error.getReason(), error.getMessage(), response.getStatus());
}
```

Now with the new version the entity object is always null. (So error.getMessag will throw a NullPointerException) 
(Also if we jus handle the WebApplicationException we can't read the body because its null) 
For the status everything works fine. 

This works for quarkus-plattform version 2.13.3 but not in version 2.14.1.

### Expected behavior

The error object should be the parsed (json-)-response-object.

### Actual behavior

The error object is null because the entity of response is null.

### How to Reproduce?

1. Create a rest-client
2. Make a request that will fail (400, 404, ...) 
3. Handle the custom/WebApplicationException
4. read the response body from the exception

### Output of `uname -a` or `ver`

_No response_

### Output of `java -version`

openjdk version "17.0.2" 2022-01-18 OpenJDK Runtime Environment (build 17.0.2+8-86) OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

### GraalVM version (if different from Java)

_No response_

### Quarkus version or git rev

_No response_

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

Apache Maven 3.8.2 (ea98e05a04480131370aa0c110b8c54cf726c06f)

### Additional information

_No response_

Changed files:
extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloResource.java
extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloClient2.java
independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java
extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/BasicRestClientTest.java

diff --git a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/BasicRestClientTest.java b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/BasicRestClientTest.java
index ab885f48c38..3148c53acf5 100644
--- a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/BasicRestClientTest.java
+++ b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/BasicRestClientTest.java
@@ -1,10 +1,7 @@
 package io.quarkus.rest.client.reactive;
 
-import static io.restassured.RestAssured.given;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
 
-import java.time.Duration;
 import java.util.Map;
 import java.util.Set;
 
@@ -75,23 +72,4 @@ void shouldMapQueryParamsWithSpecialCharacters() {
         assertThat(map.get("p5")).isEqualTo("5");
         assertThat(map.get("p6")).isEqualTo("6");
     }
-
-    /**
-     * Test to reproduce https://github.com/quarkusio/quarkus/issues/28818.
-     */
-    @Test
-    void shouldCloseConnectionsWhenFailures() {
-        // It's using 30 seconds because it's the default timeout to release connections. This timeout should not be taken into
-        // account when there are failures, and we should be able to call 3 times to the service without waiting.
-        await().atMost(Duration.ofSeconds(30))
-                .until(() -> {
-                    for (int call = 0; call < 3; call++) {
-                        given()
-                                .when().get("/hello/callClientForImageInfo")
-                                .then()
-                                .statusCode(500);
-                    }
-                    return true;
-                });
-    }
 }
diff --git a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloClient2.java b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloClient2.java
index 2c2c31eab34..660c55a0260 100644
--- a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloClient2.java
+++ b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloClient2.java
@@ -4,7 +4,6 @@
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
 import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
@@ -24,10 +23,4 @@ public interface HelloClient2 {
     @GET
     @Path("delay")
     Uni<String> delay();
-
-    @POST
-    @Path("/imageInfo")
-    @Consumes("image/gif")
-    @Produces(MediaType.TEXT_PLAIN)
-    String imageInfo(byte[] imageFile);
 }
diff --git a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloResource.java b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloResource.java
index 65b0dc25760..f298c0b3030 100644
--- a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloResource.java
+++ b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/HelloResource.java
@@ -78,23 +78,4 @@ public Uni<String> delay() {
         return Uni.createFrom().item("Hello")
                 .onItem().delayIt().by(Duration.ofMillis(500));
     }
-
-    @Path("callClientForImageInfo")
-    @GET
-    public String callClientForImageInfo() {
-        int size = 1024 * 1024 * 5;
-
-        byte[] buffer = new byte[size];
-
-        //Should provoke 415 Unsupported Media Type
-        return client2.imageInfo(buffer);
-    }
-
-    @POST
-    @Consumes({ "image/jpeg", "image/png" })
-    @Path("/imageInfo")
-    @Produces(MediaType.TEXT_PLAIN)
-    public String imageInfo(byte[] imageFile) {
-        throw new IllegalStateException("This method should never be invoked");
-    }
 }
diff --git a/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java b/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java
index 2bf3f434ecb..8d1d7d62c3c 100644
--- a/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java
+++ b/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java
@@ -20,7 +20,6 @@
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Variant;
 
 import org.jboss.logging.Logger;
@@ -244,11 +243,6 @@ public void handle(HttpClientResponse clientResponse) {
                         }
                     }
 
-                    if (Response.Status.Family.familyOf(status) != Response.Status.Family.SUCCESSFUL) {
-                        httpClientRequest.connection().close();
-                        requestContext.resume();
-                    }
-
                     if (isResponseMultipart(requestContext)) {
                         QuarkusMultipartResponseDecoder multipartDecoder = new QuarkusMultipartResponseDecoder(
                                 clientResponse);
@@ -372,16 +366,17 @@ public void handle(Buffer buffer) {
                     requestContext.resume(t);
                 }
             }
-        }).onFailure(new Handler<>() {
-            @Override
-            public void handle(Throwable failure) {
-                if (failure instanceof IOException) {
-                    requestContext.resume(new ProcessingException(failure));
-                } else {
-                    requestContext.resume(failure);
-                }
-            }
-        });
+        })
+                .onFailure(new Handler<>() {
+                    @Override
+                    public void handle(Throwable failure) {
+                        if (failure instanceof IOException) {
+                            requestContext.resume(new ProcessingException(failure));
+                        } else {
+                            requestContext.resume(failure);
+                        }
+                    }
+                });
     }
 
     private boolean isResponseMultipart(RestClientRequestContext requestContext) {