Skip to content

Commit 3caeb08

Browse files
authored
Merge pull request #45097 from geoand/#45084
Ensure that jakarta json types can be deserialized in native mode
2 parents 74ce405 + 0879ce4 commit 3caeb08

File tree

6 files changed

+94
-4
lines changed

6 files changed

+94
-4
lines changed

independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/jsonp/ServerJsonArrayHandler.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jboss.resteasy.reactive.server.providers.serialisers.jsonp;
22

33
import java.io.ByteArrayOutputStream;
4+
import java.io.IOException;
45
import java.lang.reflect.Type;
56

67
import jakarta.json.JsonArray;
@@ -11,10 +12,12 @@
1112
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonArrayHandler;
1213
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonpUtil;
1314
import org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo;
15+
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader;
1416
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter;
1517
import org.jboss.resteasy.reactive.server.spi.ServerRequestContext;
1618

17-
public class ServerJsonArrayHandler extends JsonArrayHandler implements ServerMessageBodyWriter<JsonArray> {
19+
public class ServerJsonArrayHandler extends JsonArrayHandler
20+
implements ServerMessageBodyWriter<JsonArray>, ServerMessageBodyReader<JsonArray> {
1821

1922
@Override
2023
public boolean isWriteable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo target, MediaType mediaType) {
@@ -30,4 +33,15 @@ public void writeResponse(JsonArray o, Type genericType, ServerRequestContext co
3033
context.serverResponse().end(out.toByteArray());
3134
}
3235

36+
@Override
37+
public boolean isReadable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo lazyMethod,
38+
MediaType mediaType) {
39+
return JsonArray.class.isAssignableFrom(type);
40+
}
41+
42+
@Override
43+
public JsonArray readFrom(Class<JsonArray> type, Type genericType, MediaType mediaType,
44+
ServerRequestContext context) throws WebApplicationException, IOException {
45+
return JsonpUtil.reader(context.getInputStream(), mediaType).readArray();
46+
}
3347
}

independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/jsonp/ServerJsonObjectHandler.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonObjectHandler;
1212
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonpUtil;
1313
import org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo;
14+
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader;
1415
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter;
1516
import org.jboss.resteasy.reactive.server.spi.ServerRequestContext;
1617

17-
public class ServerJsonObjectHandler extends JsonObjectHandler implements ServerMessageBodyWriter<JsonObject> {
18+
public class ServerJsonObjectHandler extends JsonObjectHandler
19+
implements ServerMessageBodyWriter<JsonObject>, ServerMessageBodyReader<JsonObject> {
1820

1921
@Override
2022
public boolean isWriteable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo target, MediaType mediaType) {
@@ -30,4 +32,15 @@ public void writeResponse(JsonObject o, Type genericType, ServerRequestContext c
3032
context.serverResponse().end(out.toByteArray());
3133
}
3234

35+
@Override
36+
public boolean isReadable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo lazyMethod,
37+
MediaType mediaType) {
38+
return JsonObject.class.isAssignableFrom(type);
39+
}
40+
41+
@Override
42+
public JsonObject readFrom(Class<JsonObject> type, Type genericType, MediaType mediaType,
43+
ServerRequestContext context) throws WebApplicationException {
44+
return JsonpUtil.reader(context.getInputStream(), mediaType).readObject();
45+
}
3346
}

independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/jsonp/ServerJsonStructureHandler.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jboss.resteasy.reactive.server.providers.serialisers.jsonp;
22

33
import java.io.ByteArrayOutputStream;
4+
import java.io.IOException;
45
import java.lang.reflect.Type;
56

67
import jakarta.json.JsonObject;
@@ -12,11 +13,12 @@
1213
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonStructureHandler;
1314
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonpUtil;
1415
import org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo;
16+
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader;
1517
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter;
1618
import org.jboss.resteasy.reactive.server.spi.ServerRequestContext;
1719

1820
public class ServerJsonStructureHandler extends JsonStructureHandler
19-
implements ServerMessageBodyWriter<JsonStructure> {
21+
implements ServerMessageBodyWriter<JsonStructure>, ServerMessageBodyReader<JsonStructure> {
2022

2123
@Override
2224
public boolean isWriteable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo target, MediaType mediaType) {
@@ -32,4 +34,15 @@ public void writeResponse(JsonStructure o, Type genericType, ServerRequestContex
3234
context.serverResponse().end(out.toByteArray());
3335
}
3436

37+
@Override
38+
public boolean isReadable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo lazyMethod,
39+
MediaType mediaType) {
40+
return JsonStructure.class.isAssignableFrom(type) && !JsonObject.class.isAssignableFrom(type);
41+
}
42+
43+
@Override
44+
public JsonStructure readFrom(Class<JsonStructure> type, Type genericType, MediaType mediaType,
45+
ServerRequestContext context) throws WebApplicationException, IOException {
46+
return JsonpUtil.reader(context.getInputStream(), mediaType).read();
47+
}
3548
}

independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/providers/serialisers/jsonp/ServerJsonValueHandler.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jboss.resteasy.reactive.server.providers.serialisers.jsonp;
22

33
import java.io.ByteArrayOutputStream;
4+
import java.io.IOException;
45
import java.lang.reflect.Type;
56

67
import jakarta.json.JsonValue;
@@ -11,10 +12,12 @@
1112
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonValueHandler;
1213
import org.jboss.resteasy.reactive.common.providers.serialisers.jsonp.JsonpUtil;
1314
import org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo;
15+
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader;
1416
import org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter;
1517
import org.jboss.resteasy.reactive.server.spi.ServerRequestContext;
1618

17-
public class ServerJsonValueHandler extends JsonValueHandler implements ServerMessageBodyWriter<JsonValue> {
19+
public class ServerJsonValueHandler extends JsonValueHandler
20+
implements ServerMessageBodyWriter<JsonValue>, ServerMessageBodyReader<JsonValue> {
1821

1922
@Override
2023
public boolean isWriteable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo target, MediaType mediaType) {
@@ -30,4 +33,15 @@ public void writeResponse(JsonValue o, Type genericType, ServerRequestContext co
3033
context.serverResponse().end(out.toByteArray());
3134
}
3235

36+
@Override
37+
public boolean isReadable(Class<?> type, Type genericType, ResteasyReactiveResourceInfo lazyMethod,
38+
MediaType mediaType) {
39+
return JsonValue.class.isAssignableFrom(type);
40+
}
41+
42+
@Override
43+
public JsonValue readFrom(Class<JsonValue> type, Type genericType, MediaType mediaType,
44+
ServerRequestContext context) throws WebApplicationException, IOException {
45+
return JsonpUtil.reader(context.getInputStream(), mediaType).readValue();
46+
}
3347
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.quarkus.it.qute;
2+
3+
import jakarta.inject.Inject;
4+
import jakarta.json.JsonObject;
5+
import jakarta.ws.rs.POST;
6+
import jakarta.ws.rs.Path;
7+
import jakarta.ws.rs.Produces;
8+
import jakarta.ws.rs.core.MediaType;
9+
10+
import io.quarkus.qute.Template;
11+
import io.quarkus.qute.TemplateInstance;
12+
13+
@Path("json")
14+
public class JsonResource {
15+
16+
@Inject
17+
Template hello;
18+
19+
@POST
20+
@Produces(MediaType.TEXT_HTML)
21+
public TemplateInstance get(JsonObject request) {
22+
return hello.data("name", request.get("name"));
23+
}
24+
}

integration-tests/qute/src/test/java/io/quarkus/it/qute/QuteTestCase.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ public void testTemplates() throws InterruptedException {
2828
.body(containsString("Hello Ciri!"));
2929
RestAssured.when().get("/beer").then().body(containsString("Beer Pilsner, completed: true, done: true"));
3030
RestAssured.when().get("/defaultmethod").then().body(containsString("Hello MK"));
31+
RestAssured
32+
.given()
33+
.contentType("application/json")
34+
.body("""
35+
{
36+
"name": "foo"
37+
}
38+
""")
39+
.when().post("/json")
40+
.then()
41+
.statusCode(200)
42+
.body(containsString("foo"));
3143
}
3244

3345
@Test

0 commit comments

Comments
 (0)