diff --git a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/NullBodyTest.java b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/NullBodyTest.java new file mode 100644 index 0000000000000..3ed9a009948d6 --- /dev/null +++ b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/NullBodyTest.java @@ -0,0 +1,45 @@ +package io.quarkus.rest.client.reactive; + +import java.net.URI; + +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; + +import org.assertj.core.api.Assertions; +import org.eclipse.microprofile.rest.client.RestClientBuilder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.quarkus.test.common.http.TestHTTPResource; + +public class NullBodyTest { + + @RegisterExtension + static final QuarkusUnitTest config = new QuarkusUnitTest() + .withApplicationRoot((jar) -> jar.addClasses(Client.class)); + + @TestHTTPResource + URI baseUri; + + @Test + void withBody() { + Client client = RestClientBuilder.newBuilder().baseUri(baseUri).build(Client.class); + + Assertions.assertThatThrownBy(() -> client.call("test")).hasMessageContaining("404"); + } + + @Test + void withoutBody() { + Client client = RestClientBuilder.newBuilder().baseUri(baseUri).build(Client.class); + + Assertions.assertThatThrownBy(() -> client.call(null)).hasMessageContaining("404"); + } + + public interface Client { + + @Path("/") + @POST + void call(String body); + } +} diff --git a/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/RestClientRequestContext.java b/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/RestClientRequestContext.java index 6bdffa8d8e405..eaeabf31dd328 100644 --- a/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/RestClientRequestContext.java +++ b/independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/RestClientRequestContext.java @@ -241,6 +241,10 @@ public ClientRequestContextImpl getOrCreateClientRequestContext() { public Buffer writeEntity(Entity entity, MultivaluedMap headerMap, WriterInterceptor[] interceptors) throws IOException { Object entityObject = entity.getEntity(); + if (entityObject == null) { + return AsyncInvokerImpl.EMPTY_BUFFER; + } + Class entityClass; Type entityType; if (entityObject instanceof GenericEntity) {