From 5422d6cc6ea2acbab15921965fef8a56b0ea3e28 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Wed, 16 Feb 2022 16:53:49 +0200 Subject: [PATCH] Fix reading body as int in native mode --- .../DefaultTextPlainBodyHandler.java | 6 +++++- .../ServerDefaultTextPlainBodyHandler.java | 21 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/providers/serialisers/DefaultTextPlainBodyHandler.java b/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/providers/serialisers/DefaultTextPlainBodyHandler.java index b1735b68f52a1..520adb4c749da 100644 --- a/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/providers/serialisers/DefaultTextPlainBodyHandler.java +++ b/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/providers/serialisers/DefaultTextPlainBodyHandler.java @@ -25,9 +25,13 @@ public boolean isReadable(Class type, Type genericType, Annotation[] annotations return !String.class.equals(type) && TypeConverter.isConvertable(type); } - @SuppressWarnings("unchecked") public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { + return doReadFrom(type, mediaType, entityStream); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected Object doReadFrom(Class type, MediaType mediaType, InputStream entityStream) throws IOException { String input = MessageReaderUtil.readString(entityStream, mediaType); validateInput(input); return TypeConverter.getType(type, input); diff --git a/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/ServerDefaultTextPlainBodyHandler.java b/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/ServerDefaultTextPlainBodyHandler.java index 165ab34b5e609..97169acf86363 100644 --- a/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/ServerDefaultTextPlainBodyHandler.java +++ b/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/ServerDefaultTextPlainBodyHandler.java @@ -1,15 +1,22 @@ package org.jboss.resteasy.reactive.server.providers.serialisers; +import java.io.IOException; +import java.lang.reflect.Type; import javax.ws.rs.BadRequestException; import javax.ws.rs.Consumes; import javax.ws.rs.ProcessingException; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.ext.Provider; import org.jboss.resteasy.reactive.common.providers.serialisers.DefaultTextPlainBodyHandler; +import org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo; +import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader; +import org.jboss.resteasy.reactive.server.spi.ServerRequestContext; @Provider @Consumes("text/plain") -public class ServerDefaultTextPlainBodyHandler extends DefaultTextPlainBodyHandler { +public class ServerDefaultTextPlainBodyHandler extends DefaultTextPlainBodyHandler implements ServerMessageBodyReader { @Override protected void validateInput(String input) throws ProcessingException { @@ -19,4 +26,16 @@ protected void validateInput(String input) throws ProcessingException { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST).entity("").build()); } } + + @Override + public boolean isReadable(Class type, Type genericType, ResteasyReactiveResourceInfo lazyMethod, + MediaType mediaType) { + return super.isReadable(type, genericType, null, mediaType); + } + + @Override + public Object readFrom(Class type, Type genericType, MediaType mediaType, ServerRequestContext context) + throws WebApplicationException, IOException { + return doReadFrom(type, mediaType, context.getInputStream()); + } }