From 78b1cb468a9b32fdfebc1f4391e39c58446f2b73 Mon Sep 17 00:00:00 2001 From: Marat Radchenko Date: Sun, 12 May 2019 16:49:36 +0300 Subject: [PATCH] Use a single ObjectMapper instance because it is thread-safe --- .../java/ru/bozaro/gitlfs/client/Client.java | 2 +- .../client/auth/ExternalAuthProvider.java | 2 +- .../bozaro/gitlfs/client/ClientBatchTest.java | 6 ++--- .../ru/bozaro/gitlfs/common/JsonHelper.java | 22 ++++--------------- .../bozaro/gitlfs/server/PointerServlet.java | 6 ++--- .../server/internal/ObjectResponse.java | 2 +- 6 files changed, 13 insertions(+), 27 deletions(-) diff --git a/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/Client.java b/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/Client.java index 32f7e7e..afbd232 100644 --- a/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/Client.java +++ b/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/Client.java @@ -60,7 +60,7 @@ public Client(@NotNull AuthProvider authProvider, @NotNull final HttpClient http public Client(@NotNull AuthProvider authProvider, @NotNull HttpExecutor http) { this.authProvider = authProvider; - this.mapper = JsonHelper.createMapper(); + this.mapper = JsonHelper.mapper; this.http = http; } diff --git a/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/auth/ExternalAuthProvider.java b/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/auth/ExternalAuthProvider.java index 64ac78e..15e68c1 100644 --- a/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/auth/ExternalAuthProvider.java +++ b/gitlfs-client/src/main/java/ru/bozaro/gitlfs/client/auth/ExternalAuthProvider.java @@ -81,7 +81,7 @@ protected Link getAuthUncached(@NotNull Operation operation) throws IOException, if (exitValue != 0) { throw new IOException("Command returned with non-zero exit code " + exitValue + ": " + Arrays.toString(builder.command().toArray())); } - return JsonHelper.createMapper().readValue(stdoutData.toByteArray(), Link.class); + return JsonHelper.mapper.readValue(stdoutData.toByteArray(), Link.class); } @NotNull diff --git a/gitlfs-client/src/test/java/ru/bozaro/gitlfs/client/ClientBatchTest.java b/gitlfs-client/src/test/java/ru/bozaro/gitlfs/client/ClientBatchTest.java index 401bfcf..42a94a3 100644 --- a/gitlfs-client/src/test/java/ru/bozaro/gitlfs/client/ClientBatchTest.java +++ b/gitlfs-client/src/test/java/ru/bozaro/gitlfs/client/ClientBatchTest.java @@ -5,8 +5,8 @@ import org.testng.Assert; import org.testng.annotations.Test; import ru.bozaro.gitlfs.common.JsonHelper; -import ru.bozaro.gitlfs.common.data.*; import ru.bozaro.gitlfs.common.data.Error; +import ru.bozaro.gitlfs.common.data.*; import java.io.IOException; import java.net.URI; @@ -44,7 +44,7 @@ private void batchUpload(@NotNull String path) throws IOException { new Meta("1cbec737f863e4922cee63cc2ebbfaafcd1cff8b790d8cfd2e6a5d550b648afa", 3) ) )); - Assert.assertEquals(JsonHelper.toString(result), JsonHelper.toString(new BatchRes( + Assert.assertEquals(JsonHelper.mapper.writeValueAsString(result), JsonHelper.mapper.writeValueAsString(new BatchRes( Arrays.asList( new BatchItem( new Meta("b810bbe954d51e380f395de0c301a0a42d16f115453f2feb4188ca9f7189074e", 28), @@ -104,7 +104,7 @@ private void batchDownload(@NotNull String path) throws IOException { new Meta("1cbec737f863e4922cee63cc2ebbfaafcd1cff8b790d8cfd2e6a5d550b648afa", 3) ) )); - Assert.assertEquals(JsonHelper.toString(result), JsonHelper.toString(new BatchRes( + Assert.assertEquals(JsonHelper.mapper.writeValueAsString(result), JsonHelper.mapper.writeValueAsString(new BatchRes( Arrays.asList( new BatchItem( new Meta("b810bbe954d51e380f395de0c301a0a42d16f115453f2feb4188ca9f7189074e", 28), diff --git a/gitlfs-common/src/main/java/ru/bozaro/gitlfs/common/JsonHelper.java b/gitlfs-common/src/main/java/ru/bozaro/gitlfs/common/JsonHelper.java index b90dc03..80ac4ba 100644 --- a/gitlfs-common/src/main/java/ru/bozaro/gitlfs/common/JsonHelper.java +++ b/gitlfs-common/src/main/java/ru/bozaro/gitlfs/common/JsonHelper.java @@ -1,7 +1,6 @@ package ru.bozaro.gitlfs.common; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.util.DefaultIndenter; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.databind.ObjectMapper; @@ -17,15 +16,11 @@ * @author Artem V. Navrotskiy */ public final class JsonHelper { - private JsonHelper() { - } - /** - * Creating mapper for serialize/deserialize data to JSON. - */ @NotNull - public static ObjectMapper createMapper() { - final ObjectMapper mapper = new ObjectMapper(); + public static final ObjectMapper mapper = new ObjectMapper(); + + static { mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.setDateFormat(new StdDateFormat()); @@ -36,17 +31,8 @@ public static ObjectMapper createMapper() { .withObjectIndenter(new DefaultIndenter(" ", "\n"))); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - return mapper; } - /** - * Convert object to string. - * - * @param data Object. - * @return JSON data. - */ - @NotNull - public static String toString(@NotNull Object data) throws JsonProcessingException { - return createMapper().writeValueAsString(data); + private JsonHelper() { } } diff --git a/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/PointerServlet.java b/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/PointerServlet.java index f389edd..27e9cca 100644 --- a/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/PointerServlet.java +++ b/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/PointerServlet.java @@ -5,8 +5,8 @@ import org.jetbrains.annotations.Nullable; import ru.bozaro.gitlfs.common.Constants; import ru.bozaro.gitlfs.common.JsonHelper; -import ru.bozaro.gitlfs.common.data.*; import ru.bozaro.gitlfs.common.data.Error; +import ru.bozaro.gitlfs.common.data.*; import ru.bozaro.gitlfs.server.internal.ObjectResponse; import ru.bozaro.gitlfs.server.internal.ResponseWriter; @@ -60,7 +60,7 @@ public PointerServlet(@NotNull ContentManager manager, @NotNull String contentLo public PointerServlet(@NotNull PointerManager manager) { this.manager = manager; - this.mapper = JsonHelper.createMapper(); + this.mapper = JsonHelper.mapper; this.accessCheckerVisitor = new AccessCheckerVisitor(manager); } @@ -135,7 +135,7 @@ protected void doPost(@NotNull HttpServletRequest req, @NotNull HttpServletRespo } catch (ServerError e) { resp.setStatus(e.getStatusCode()); resp.setContentType(Constants.MIME_LFS_JSON); - JsonHelper.createMapper().writeValue(resp.getOutputStream(), new Error(e.getStatusCode(), e.getMessage())); + JsonHelper.mapper.writeValue(resp.getOutputStream(), new Error(e.getStatusCode(), e.getMessage())); return; } super.doPost(req, resp); diff --git a/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/internal/ObjectResponse.java b/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/internal/ObjectResponse.java index 5f95371..477744a 100644 --- a/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/internal/ObjectResponse.java +++ b/gitlfs-server/src/main/java/ru/bozaro/gitlfs/server/internal/ObjectResponse.java @@ -27,6 +27,6 @@ public ObjectResponse(int status, @NotNull Object value) { public void write(@NotNull HttpServletResponse response) throws IOException { response.setStatus(status); response.setContentType(MIME_LFS_JSON); - JsonHelper.createMapper().writeValue(response.getOutputStream(), value); + JsonHelper.mapper.writeValue(response.getOutputStream(), value); } }