From 1303f3e6a92b406a3a591a65fa3d4010052254e6 Mon Sep 17 00:00:00 2001 From: Jan Martiska Date: Tue, 27 Aug 2024 10:17:03 +0200 Subject: [PATCH] Get rid of calls to Json static methods --- .../VertxTypesafeGraphQLClientProxy.java | 38 +++++++++---------- .../GraphQLTransportWSSubprotocolHandler.java | 7 ++-- .../GraphQLWSSubprotocolHandler.java | 7 ++-- .../client/impl/JsonProviderHolder.java | 11 ++++++ .../graphql/client/impl/RequestImpl.java | 7 ++-- .../graphql/client/impl/ResponseReader.java | 5 ++- .../client/impl/typesafe/ResultBuilder.java | 9 +++-- .../graphql/execution/CdiExecutionTest.java | 4 +- .../graphql/entry/http/ExecutionServlet.java | 14 ++++--- .../entry/http/HttpServletResponseWriter.java | 5 ++- .../smallrye/graphql/JsonProviderHolder.java | 11 ++++++ .../smallrye/graphql/bootstrap/Bootstrap.java | 4 +- .../graphql/execution/ExecutionResponse.java | 25 ++++++------ .../execution/JsonObjectResponseWriter.java | 7 ++-- .../context/SmallRyeContextManager.java | 5 ++- .../error/ErrorCodeExtensionProvider.java | 4 +- .../ExceptionNameErrorExtensionProvider.java | 5 ++- .../error/ExecutionErrorsService.java | 9 +++-- .../AbstractGraphQLWebsocketHandler.java | 9 +++-- .../GraphQLTransportWSSubprotocolHandler.java | 5 ++- .../GraphQLWSSubprotocolHandler.java | 5 ++- 21 files changed, 116 insertions(+), 80 deletions(-) create mode 100644 client/implementation/src/main/java/io/smallrye/graphql/client/impl/JsonProviderHolder.java create mode 100644 server/implementation/src/main/java/io/smallrye/graphql/JsonProviderHolder.java diff --git a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/typesafe/VertxTypesafeGraphQLClientProxy.java b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/typesafe/VertxTypesafeGraphQLClientProxy.java index 7b3b09ac1..649f0684a 100644 --- a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/typesafe/VertxTypesafeGraphQLClientProxy.java +++ b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/typesafe/VertxTypesafeGraphQLClientProxy.java @@ -1,5 +1,6 @@ package io.smallrye.graphql.client.vertx.typesafe; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.toList; @@ -24,7 +25,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Stream; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonBuilderFactory; @@ -64,7 +64,7 @@ class VertxTypesafeGraphQLClientProxy { private static final Logger log = Logger.getLogger(VertxTypesafeGraphQLClientProxy.class); - private static final JsonBuilderFactory jsonObjectFactory = Json.createBuilderFactory(null); + private static final JsonBuilderFactory jsonObjectFactory = JSON_PROVIDER.createBuilderFactory(null); private final ConcurrentMap queryCache = new ConcurrentHashMap<>(); @@ -342,60 +342,60 @@ private JsonValue value(Object value) { private JsonValue scalarValue(Object value) { if (value instanceof String) { - return Json.createValue((String) value); + return JSON_PROVIDER.createValue((String) value); } if (value instanceof java.sql.Date) { - return Json.createValue(value.toString()); + return JSON_PROVIDER.createValue(value.toString()); } if (value instanceof Date) { - return Json.createValue(((Date) value).toInstant().toString()); + return JSON_PROVIDER.createValue(((Date) value).toInstant().toString()); } if (value instanceof Calendar) { - return Json.createValue(((Calendar) value).toInstant().toString()); + return JSON_PROVIDER.createValue(((Calendar) value).toInstant().toString()); } if (value instanceof Enum) { - return Json.createValue(((Enum) value).name()); + return JSON_PROVIDER.createValue(((Enum) value).name()); } if (value instanceof Boolean) { return ((Boolean) value) ? JsonValue.TRUE : JsonValue.FALSE; } if (value instanceof Byte) { - return Json.createValue((Byte) value); + return JSON_PROVIDER.createValue((Byte) value); } if (value instanceof Short) { - return Json.createValue((Short) value); + return JSON_PROVIDER.createValue((Short) value); } if (value instanceof Integer) { - return Json.createValue((Integer) value); + return JSON_PROVIDER.createValue((Integer) value); } if (value instanceof Long) { - return Json.createValue((Long) value); + return JSON_PROVIDER.createValue((Long) value); } if (value instanceof Double) { - return Json.createValue((Double) value); + return JSON_PROVIDER.createValue((Double) value); } if (value instanceof Float) { - return Json.createValue((Float) value); + return JSON_PROVIDER.createValue((Float) value); } if (value instanceof BigInteger) { - return Json.createValue((BigInteger) value); + return JSON_PROVIDER.createValue((BigInteger) value); } if (value instanceof BigDecimal) { - return Json.createValue((BigDecimal) value); + return JSON_PROVIDER.createValue((BigDecimal) value); } if (value instanceof OptionalInt) { OptionalInt optionalValue = ((OptionalInt) value); - return ((optionalValue.isPresent()) ? Json.createValue(optionalValue.getAsInt()) : JsonValue.NULL); + return ((optionalValue.isPresent()) ? JSON_PROVIDER.createValue(optionalValue.getAsInt()) : JsonValue.NULL); } if (value instanceof OptionalLong) { OptionalLong optionalValue = ((OptionalLong) value); - return ((optionalValue.isPresent()) ? Json.createValue(optionalValue.getAsLong()) : JsonValue.NULL); + return ((optionalValue.isPresent()) ? JSON_PROVIDER.createValue(optionalValue.getAsLong()) : JsonValue.NULL); } if (value instanceof OptionalDouble) { OptionalDouble optionalValue = ((OptionalDouble) value); - return ((optionalValue.isPresent()) ? Json.createValue(optionalValue.getAsDouble()) : JsonValue.NULL); + return ((optionalValue.isPresent()) ? JSON_PROVIDER.createValue(optionalValue.getAsDouble()) : JsonValue.NULL); } - return Json.createValue(value.toString()); + return JSON_PROVIDER.createValue(value.toString()); } private JsonArray arrayValue(Object value) { diff --git a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java index 8ea2984bb..d1b051fc6 100644 --- a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java +++ b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.client.vertx.websocket.graphqltransportws; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.time.Duration; import java.util.HashMap; @@ -9,7 +11,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; @@ -43,8 +44,8 @@ public class GraphQLTransportWSSubprotocolHandler implements WebSocketSubprotocolHandler { private static final Logger log = Logger.getLogger(GraphQLTransportWSSubprotocolHandler.class); - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); private final Integer connectionInitializationTimeout; diff --git a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqlws/GraphQLWSSubprotocolHandler.java b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqlws/GraphQLWSSubprotocolHandler.java index 74eb1d5f9..63a70d591 100644 --- a/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqlws/GraphQLWSSubprotocolHandler.java +++ b/client/implementation-vertx/src/main/java/io/smallrye/graphql/client/vertx/websocket/graphqlws/GraphQLWSSubprotocolHandler.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.client.vertx.websocket.graphqlws; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.time.Duration; import java.util.HashMap; @@ -7,7 +9,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import jakarta.json.Json; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -40,8 +41,8 @@ public class GraphQLWSSubprotocolHandler implements WebSocketSubprotocolHandler { private static final Logger log = Logger.getLogger(GraphQLWSSubprotocolHandler.class); - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); private final Integer subscriptionInitializationTimeout; diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/JsonProviderHolder.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/JsonProviderHolder.java new file mode 100644 index 000000000..ea4a041da --- /dev/null +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/JsonProviderHolder.java @@ -0,0 +1,11 @@ +package io.smallrye.graphql.client.impl; + +import jakarta.json.spi.JsonProvider; + +// A central place to get the JsonProvider to avoid calling `JsonProvider.provider()` many times +// due to associated performance costs. +public class JsonProviderHolder { + + public static final JsonProvider JSON_PROVIDER = JsonProvider.provider(); + +} diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java index f9cddb323..c4ba60f98 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java @@ -1,11 +1,12 @@ package io.smallrye.graphql.client.impl; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import jakarta.json.Json; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -16,7 +17,7 @@ import io.smallrye.graphql.client.Request; public class RequestImpl implements Request { - private static final JsonBuilderFactory JSON = Json.createBuilderFactory(null); + private static final JsonBuilderFactory JSON = JSON_PROVIDER.createBuilderFactory(null); private static final Jsonb JSONB = JsonbBuilder.create(); private final String document; @@ -72,7 +73,7 @@ private JsonObject _formatJsonVariables() { } else if (v == null) { varBuilder.addNull(k); } else { - varBuilder.add(k, Json.createReader(new StringReader(JSONB.toJson(v))).read()); + varBuilder.add(k, JSON_PROVIDER.createReader(new StringReader(JSONB.toJson(v))).read()); } }); diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/ResponseReader.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/ResponseReader.java index d4372ba2d..1a53291e8 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/ResponseReader.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/ResponseReader.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.client.impl; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; @@ -7,7 +9,6 @@ import java.util.List; import java.util.Map; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonNumber; import jakarta.json.JsonObject; @@ -23,7 +24,7 @@ public class ResponseReader { private static final Logger LOG = Logger.getLogger(ResponseReader.class.getName()); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); /** * Parse a GraphQL response from the input string. diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/typesafe/ResultBuilder.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/typesafe/ResultBuilder.java index fc16645bb..607b4cd7c 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/typesafe/ResultBuilder.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/typesafe/ResultBuilder.java @@ -1,5 +1,6 @@ package io.smallrye.graphql.client.impl.typesafe; +import static io.smallrye.graphql.client.impl.JsonProviderHolder.JSON_PROVIDER; import static io.smallrye.graphql.client.impl.typesafe.json.JsonUtils.isListOf; import static jakarta.json.stream.JsonCollectors.toJsonArray; import static java.util.stream.Collectors.joining; @@ -8,7 +9,6 @@ import java.util.Map; import java.util.stream.Collectors; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonBuilderFactory; @@ -28,7 +28,7 @@ import io.smallrye.graphql.client.typesafe.api.TypesafeResponse; public class ResultBuilder { - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); private final MethodInvocation method; private final JsonObject response; @@ -115,7 +115,7 @@ private boolean apply(JsonValue error) { List path = getPath(error); if (data == null || path == null) return false; - JsonPointer pointer = Json.createPointer(path.stream().map(Object::toString).collect(joining("/", "/", ""))); + JsonPointer pointer = JSON_PROVIDER.createPointer(path.stream().map(Object::toString).collect(joining("/", "/", ""))); if (!exists(pointer)) return false; JsonArrayBuilder errors = jsonBuilderFactory.createArrayBuilder(); @@ -152,6 +152,7 @@ private static List getPath(JsonValue jsonValue) { return (jsonArray == null) ? null : jsonArray.stream().map(JsonUtils::toValue).collect(Collectors.toList()); } - private static final JsonPatch ERROR_MARK = Json.createPatchBuilder().add("/__typename", ErrorOr.class.getSimpleName()) + private static final JsonPatch ERROR_MARK = JSON_PROVIDER.createPatchBuilder() + .add("/__typename", ErrorOr.class.getSimpleName()) .build(); } diff --git a/server/implementation-cdi/src/test/java/io/smallrye/graphql/execution/CdiExecutionTest.java b/server/implementation-cdi/src/test/java/io/smallrye/graphql/execution/CdiExecutionTest.java index 0666af761..7011325b5 100644 --- a/server/implementation-cdi/src/test/java/io/smallrye/graphql/execution/CdiExecutionTest.java +++ b/server/implementation-cdi/src/test/java/io/smallrye/graphql/execution/CdiExecutionTest.java @@ -1,5 +1,6 @@ package io.smallrye.graphql.execution; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -9,7 +10,6 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.RequestScoped; import jakarta.inject.Inject; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; @@ -365,7 +365,7 @@ private JsonArray executeAndGetError(String graphQL) { } private JsonObject toJsonObject(String graphQL) { - JsonObjectBuilder builder = Json.createObjectBuilder(); + JsonObjectBuilder builder = JSON_PROVIDER.createObjectBuilder(); builder.add("query", graphQL); return builder.build(); } diff --git a/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/ExecutionServlet.java b/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/ExecutionServlet.java index 6db3c25a6..64ef8ce66 100644 --- a/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/ExecutionServlet.java +++ b/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/ExecutionServlet.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.entry.http; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -15,7 +17,6 @@ import java.util.stream.Collectors; import jakarta.inject.Inject; -import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonReader; @@ -37,7 +38,7 @@ public class ExecutionServlet extends HttpServlet { private static final long serialVersionUID = -2859915918802356120L; - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); @Inject ExecutionService executionService; @@ -74,7 +75,8 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) if (request.getQueryString() != null && !request.getQueryString().isEmpty() && config.isAllowPostWithQueryParameters()) { JsonObject jsonObjectFromQueryParameters = getJsonObjectFromQueryParameters(request); - JsonObject mergedJsonObject = Json.createMergePatch(jsonObjectFromQueryParameters).apply(jsonObjectFromBody) + JsonObject mergedJsonObject = JSON_PROVIDER.createMergePatch(jsonObjectFromQueryParameters) + .apply(jsonObjectFromBody) .asJsonObject(); executionService.executeSync(mergedJsonObject, metaData, new HttpServletResponseWriter(response)); } else { @@ -87,7 +89,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) } private JsonObject getJsonObjectFromQueryParameters(HttpServletRequest request) throws UnsupportedEncodingException { - JsonObjectBuilder input = Json.createObjectBuilder(); + JsonObjectBuilder input = JSON_PROVIDER.createObjectBuilder(); // Query String query = request.getParameter(QUERY); if (query != null && !query.isEmpty()) { @@ -123,7 +125,7 @@ private JsonObject getJsonObjectFromBody(HttpServletRequest request) throws IOEx // If the content type is application/graphql, the query is in the body if (contentType != null && contentType.startsWith(APPLICATION_GRAPHQL)) { String query = bufferedReader.lines().collect(Collectors.joining("\n")); - JsonObjectBuilder input = Json.createObjectBuilder(); + JsonObjectBuilder input = JSON_PROVIDER.createObjectBuilder(); input.add(QUERY, query); return input.build(); // Else we expect a Json in the content @@ -139,7 +141,7 @@ private static JsonObject toJsonObject(String jsonString) { if (jsonString == null || jsonString.isEmpty()) { return null; } - try (JsonReader jsonReader = Json.createReader(new StringReader(jsonString))) { + try (JsonReader jsonReader = JSON_PROVIDER.createReader(new StringReader(jsonString))) { return jsonReader.readObject(); } } diff --git a/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/HttpServletResponseWriter.java b/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/HttpServletResponseWriter.java index acfb7b12c..023674d60 100644 --- a/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/HttpServletResponseWriter.java +++ b/server/implementation-servlet/src/main/java/io/smallrye/graphql/entry/http/HttpServletResponseWriter.java @@ -1,8 +1,9 @@ package io.smallrye.graphql.entry.http; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.IOException; -import jakarta.json.Json; import jakarta.json.JsonWriter; import jakarta.json.JsonWriterFactory; import jakarta.servlet.http.HttpServletResponse; @@ -17,7 +18,7 @@ */ public class HttpServletResponseWriter implements ExecutionResponseWriter { private static final String APPLICATION_JSON_UTF8 = "application/json;charset=UTF-8"; - private static final JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(null); + private static final JsonWriterFactory jsonWriterFactory = JSON_PROVIDER.createWriterFactory(null); private final HttpServletResponse response; diff --git a/server/implementation/src/main/java/io/smallrye/graphql/JsonProviderHolder.java b/server/implementation/src/main/java/io/smallrye/graphql/JsonProviderHolder.java new file mode 100644 index 000000000..614aed938 --- /dev/null +++ b/server/implementation/src/main/java/io/smallrye/graphql/JsonProviderHolder.java @@ -0,0 +1,11 @@ +package io.smallrye.graphql; + +import jakarta.json.spi.JsonProvider; + +// A central place to get the JsonProvider to avoid calling `JsonProvider.provider()` many times +// due to associated performance costs. +public class JsonProviderHolder { + + public static final JsonProvider JSON_PROVIDER = JsonProvider.provider(); + +} diff --git a/server/implementation/src/main/java/io/smallrye/graphql/bootstrap/Bootstrap.java b/server/implementation/src/main/java/io/smallrye/graphql/bootstrap/Bootstrap.java index 5d50df3e6..bad83fa88 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/bootstrap/Bootstrap.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/bootstrap/Bootstrap.java @@ -22,7 +22,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jakarta.json.Json; import jakarta.json.JsonReader; import jakarta.json.JsonReaderFactory; import jakarta.json.bind.Jsonb; @@ -55,6 +54,7 @@ import graphql.schema.TypeResolver; import graphql.schema.visibility.BlockedFields; import graphql.schema.visibility.GraphqlFieldVisibility; +import io.smallrye.graphql.JsonProviderHolder; import io.smallrye.graphql.SmallRyeGraphQLServerMessages; import io.smallrye.graphql.execution.Classes; import io.smallrye.graphql.execution.datafetcher.BatchDataFetcher; @@ -1167,7 +1167,7 @@ private Type getTypeForField(Field field) { private static final String COMMA = ","; - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JsonProviderHolder.JSON_PROVIDER.createReaderFactory(null); private static final String CONTEXT = "io.smallrye.graphql.api.Context"; private static final String OBSERVES = "javax.enterprise.event.Observes"; diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/ExecutionResponse.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/ExecutionResponse.java index a76591edc..a40e53f19 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/ExecutionResponse.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/ExecutionResponse.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.execution; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.math.BigDecimal; import java.math.BigInteger; @@ -11,7 +13,6 @@ import java.util.Stack; import java.util.stream.Collectors; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonBuilderFactory; @@ -23,7 +24,6 @@ import jakarta.json.bind.Jsonb; import jakarta.json.bind.JsonbBuilder; import jakarta.json.bind.JsonbConfig; -import jakarta.json.spi.JsonProvider; import graphql.ExecutionResult; import graphql.GraphQLError; @@ -37,9 +37,8 @@ */ public class ExecutionResponse { - private static final JsonProvider jsonProvider = JsonProvider.provider(); - private static final JsonBuilderFactory jsonObjectFactory = Json.createBuilderFactory(null); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonBuilderFactory jsonObjectFactory = JSON_PROVIDER.createBuilderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); private static final Jsonb jsonB = JsonbBuilder.create(new JsonbConfig() .withNullValues(Boolean.TRUE) .withFormatting(Boolean.TRUE)); @@ -188,22 +187,22 @@ private JsonValue toJsonValue(Object pojo) { jsonValue = JsonValue.FALSE; } } else if (pojo instanceof String) { - jsonValue = jsonProvider.createValue(((String) pojo)); + jsonValue = JSON_PROVIDER.createValue(((String) pojo)); } else if (pojo instanceof Double) { - jsonValue = jsonProvider.createValue(((Number) pojo).doubleValue()); + jsonValue = JSON_PROVIDER.createValue(((Number) pojo).doubleValue()); } else if (pojo instanceof Float) { //upcast to double would lead to precision loss - jsonValue = jsonProvider.createValue(new BigDecimal(String.valueOf(((Number) pojo).floatValue()))); + jsonValue = JSON_PROVIDER.createValue(new BigDecimal(String.valueOf(((Number) pojo).floatValue()))); } else if (pojo instanceof Long) { - jsonValue = jsonProvider.createValue(((Long) pojo)); + jsonValue = JSON_PROVIDER.createValue(((Long) pojo)); } else if (pojo instanceof Integer || pojo instanceof Short || pojo instanceof Byte) { - jsonValue = jsonProvider.createValue(((Number) pojo).intValue()); + jsonValue = JSON_PROVIDER.createValue(((Number) pojo).intValue()); } else if (pojo instanceof BigDecimal) { - jsonValue = jsonProvider.createValue(((BigDecimal) pojo)); + jsonValue = JSON_PROVIDER.createValue(((BigDecimal) pojo)); } else if (pojo instanceof BigInteger) { - jsonValue = jsonProvider.createValue(((BigInteger) pojo)); + jsonValue = JSON_PROVIDER.createValue(((BigInteger) pojo)); } else if (pojo instanceof Enum) { - jsonValue = jsonProvider.createValue(((Enum) pojo).name()); + jsonValue = JSON_PROVIDER.createValue(((Enum) pojo).name()); } else { String json = jsonB.toJson(pojo); try (StringReader sr = new StringReader(json); JsonReader reader = jsonReaderFactory.createReader(sr)) { diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/JsonObjectResponseWriter.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/JsonObjectResponseWriter.java index 8dd1147ba..fea066a2f 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/JsonObjectResponseWriter.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/JsonObjectResponseWriter.java @@ -1,11 +1,12 @@ package io.smallrye.graphql.execution; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.IOException; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; -import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonWriter; @@ -75,7 +76,7 @@ public ExecutionResponse getExecutionResponse() { private String getPrettyJson(JsonObject jsonObject) { - JsonWriterFactory writerFactory = Json.createWriterFactory(JSON_PROPERTIES); + JsonWriterFactory writerFactory = JSON_PROVIDER.createWriterFactory(JSON_PROPERTIES); try (StringWriter sw = new StringWriter(); JsonWriter jsonWriter = writerFactory.createWriter(sw)) { @@ -87,7 +88,7 @@ private String getPrettyJson(JsonObject jsonObject) { } private JsonObject toJsonObject(String graphQL) { - JsonObjectBuilder builder = Json.createObjectBuilder(); + JsonObjectBuilder builder = JSON_PROVIDER.createObjectBuilder(); builder.add("query", graphQL); return builder.build(); } diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/context/SmallRyeContextManager.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/context/SmallRyeContextManager.java index 334decdb6..34deb5149 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/context/SmallRyeContextManager.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/context/SmallRyeContextManager.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.execution.context; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -7,7 +9,6 @@ import java.util.Optional; import java.util.Set; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonBuilderFactory; @@ -41,7 +42,7 @@ * @author Phillip Kruger (phillip.kruger@redhat.com) */ public class SmallRyeContextManager { - private static final JsonBuilderFactory jsonbuilder = Json.createBuilderFactory(null); + private static final JsonBuilderFactory jsonbuilder = JSON_PROVIDER.createBuilderFactory(null); private static final InheritableThreadLocal current = new InheritableThreadLocal<>(); public static final String CONTEXT = "context"; diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ErrorCodeExtensionProvider.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ErrorCodeExtensionProvider.java index 82c4fa531..c8afb4fba 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ErrorCodeExtensionProvider.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ErrorCodeExtensionProvider.java @@ -1,8 +1,8 @@ package io.smallrye.graphql.execution.error; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; import static java.util.Locale.ROOT; -import jakarta.json.Json; import jakarta.json.JsonValue; import io.smallrye.graphql.api.ErrorExtensionProvider; @@ -17,7 +17,7 @@ public String getKey() { @Override public JsonValue mapValueFrom(Throwable exception) { - return Json.createValue(errorCode(exception)); + return JSON_PROVIDER.createValue(errorCode(exception)); } private String errorCode(Throwable exception) { diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExceptionNameErrorExtensionProvider.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExceptionNameErrorExtensionProvider.java index d3fc216e5..5438a1b47 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExceptionNameErrorExtensionProvider.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExceptionNameErrorExtensionProvider.java @@ -1,6 +1,7 @@ package io.smallrye.graphql.execution.error; -import jakarta.json.Json; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import jakarta.json.JsonString; import io.smallrye.graphql.api.ErrorExtensionProvider; @@ -14,6 +15,6 @@ public String getKey() { @Override public JsonString mapValueFrom(Throwable exception) { - return Json.createValue(exception.getClass().getName()); + return JSON_PROVIDER.createValue(exception.getClass().getName()); } } diff --git a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExecutionErrorsService.java b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExecutionErrorsService.java index 917ec6715..6bc78d93e 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExecutionErrorsService.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/execution/error/ExecutionErrorsService.java @@ -1,11 +1,12 @@ package io.smallrye.graphql.execution.error; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.StringReader; import java.util.List; import java.util.Map; import java.util.Optional; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonBuilderFactory; @@ -30,8 +31,8 @@ */ public class ExecutionErrorsService { - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); private static final Jsonb JSONB = JsonbBuilder.create(new JsonbConfig() .withNullValues(Boolean.TRUE) .withFormatting(Boolean.TRUE)); @@ -129,7 +130,7 @@ private JsonArray toJsonArray(List list) { } private void addKeyValue(JsonObjectBuilder objectBuilder, String key, String value) { - addKeyValue(objectBuilder, key, Json.createValue(value)); + addKeyValue(objectBuilder, key, JSON_PROVIDER.createValue(value)); } private void addKeyValue(JsonObjectBuilder objectBuilder, String key, JsonValue value) { diff --git a/server/implementation/src/main/java/io/smallrye/graphql/websocket/AbstractGraphQLWebsocketHandler.java b/server/implementation/src/main/java/io/smallrye/graphql/websocket/AbstractGraphQLWebsocketHandler.java index 92d2353f4..d1d14aaee 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/websocket/AbstractGraphQLWebsocketHandler.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/websocket/AbstractGraphQLWebsocketHandler.java @@ -1,5 +1,7 @@ package io.smallrye.graphql.websocket; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.IOException; import java.io.StringReader; import java.time.Duration; @@ -8,7 +10,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; -import jakarta.json.Json; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; import jakarta.json.JsonReader; @@ -34,8 +35,8 @@ public abstract class AbstractGraphQLWebsocketHandler implements GraphQLWebsocketHandler { // TODO: Replace with prepared log messages protected static final Logger LOG = Logger.getLogger(GraphQLWebsocketHandler.class.getName()); - private static final JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(null); - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); + private static final JsonReaderFactory jsonReaderFactory = JSON_PROVIDER.createReaderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); protected final ExecutionService executionService = LookupService.get().getInstance(ExecutionService.class).get(); protected final GraphQLWebSocketSession session; @@ -163,7 +164,7 @@ public void write(ExecutionResponse executionResponse) { } private JsonObject createConnectionAckMessage() { - return Json.createObjectBuilder() + return JSON_PROVIDER.createObjectBuilder() .add("type", "connection_ack") .build(); } diff --git a/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java b/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java index 8a3f15d16..3133583e2 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqltransportws/GraphQLTransportWSSubprotocolHandler.java @@ -1,10 +1,11 @@ package io.smallrye.graphql.websocket.graphqltransportws; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.IOException; import java.util.Collections; import java.util.Map; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; @@ -19,7 +20,7 @@ */ public class GraphQLTransportWSSubprotocolHandler extends AbstractGraphQLWebsocketHandler { - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); private final String pingMessage; private final String pongMessage; diff --git a/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqlws/GraphQLWSSubprotocolHandler.java b/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqlws/GraphQLWSSubprotocolHandler.java index ef10cd61d..927c42e3f 100644 --- a/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqlws/GraphQLWSSubprotocolHandler.java +++ b/server/implementation/src/main/java/io/smallrye/graphql/websocket/graphqlws/GraphQLWSSubprotocolHandler.java @@ -1,10 +1,11 @@ package io.smallrye.graphql.websocket.graphqlws; +import static io.smallrye.graphql.JsonProviderHolder.JSON_PROVIDER; + import java.io.IOException; import java.util.Collections; import java.util.Map; -import jakarta.json.Json; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; @@ -18,7 +19,7 @@ */ public class GraphQLWSSubprotocolHandler extends AbstractGraphQLWebsocketHandler { - private static final JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null); + private static final JsonBuilderFactory jsonBuilderFactory = JSON_PROVIDER.createBuilderFactory(null); private final String pingMessage;