You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2022/11/06 14:37:27 UTC
[cxf] branch 3.4.x-fixes updated: CXF-8785: Make Jsonb lazy initializable in the JsrJsonbProvider
This is an automated email from the ASF dual-hosted git repository.
reta pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/3.4.x-fixes by this push:
new 79dfce65c5 CXF-8785: Make Jsonb lazy initializable in the JsrJsonbProvider
79dfce65c5 is described below
commit 79dfce65c516fbe2fffdf8e1e08044885b051eeb
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Sat Nov 5 12:32:09 2022 -0400
CXF-8785: Make Jsonb lazy initializable in the JsrJsonbProvider
(cherry picked from commit eac13c71f065fbf384aecfc54992140de7b8ae02)
(cherry picked from commit f2721d3ae67c9ed35064729a85f60e243905990e)
---
.../jaxrs/provider/jsrjsonb/JsrJsonbProvider.java | 34 +++++++++++++++++++---
1 file changed, 30 insertions(+), 4 deletions(-)
diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java
index 621d667c8a..2c4a037904 100644
--- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java
+++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java
@@ -31,11 +31,14 @@ import javax.json.bind.JsonbBuilder;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
+import javax.ws.rs.ext.Providers;
import org.apache.cxf.jaxrs.utils.ExceptionUtils;
@@ -54,9 +57,17 @@ import org.apache.cxf.jaxrs.utils.ExceptionUtils;
@Provider
public class JsrJsonbProvider implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
private final Jsonb jsonb;
+ @Context private Providers providers;
+
+ /**
+ * Create and capture only singleton instance of the Jsonb, if needed.
+ */
+ private static class DefaultJsonbSupplier {
+ private static final Jsonb INSTANCE = JsonbBuilder.create();
+ }
public JsrJsonbProvider() {
- this(JsonbBuilder.create());
+ this(null);
}
public JsrJsonbProvider(Jsonb jsonb) {
@@ -72,7 +83,7 @@ public class JsrJsonbProvider implements MessageBodyReader<Object>, MessageBodyW
public void writeTo(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
throws IOException, WebApplicationException {
- jsonb.toJson(t, type, entityStream);
+ jsonbFor(type).toJson(t, type, entityStream);
}
@Override
@@ -86,9 +97,9 @@ public class JsrJsonbProvider implements MessageBodyReader<Object>, MessageBodyW
throws IOException, WebApplicationException {
try {
if (genericType == null) {
- return jsonb.fromJson(entityStream, type);
+ return jsonbFor(type).fromJson(entityStream, type);
} else {
- return jsonb.fromJson(entityStream, genericType);
+ return jsonbFor(type).fromJson(entityStream, genericType);
}
} catch (JsonException ex) {
throw ExceptionUtils.toBadRequestException(ex, null);
@@ -105,4 +116,19 @@ public class JsrJsonbProvider implements MessageBodyReader<Object>, MessageBodyW
}
}
+ private Jsonb jsonbFor(Class<?> type) {
+ if (providers != null) {
+ final ContextResolver<Jsonb> contextResolver = providers
+ .getContextResolver(Jsonb.class, MediaType.APPLICATION_JSON_TYPE);
+ if (contextResolver != null) {
+ return contextResolver.getContext(type);
+ }
+ }
+
+ if (jsonb != null) {
+ return jsonb;
+ } else {
+ return DefaultJsonbSupplier.INSTANCE;
+ }
+ }
}