Skip to content

Commit 9fcac7c

Browse files
committed
Share ObjectMaper between classes
1 parent ab2db08 commit 9fcac7c

3 files changed

Lines changed: 30 additions & 36 deletions

File tree

src/main/java/com/maxmind/minfraud/AbstractModel.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,14 @@
11
package com.maxmind.minfraud;
22

3-
import com.fasterxml.jackson.annotation.JsonInclude;
4-
import com.fasterxml.jackson.databind.DeserializationFeature;
5-
import com.fasterxml.jackson.databind.MapperFeature;
6-
import com.fasterxml.jackson.databind.ObjectMapper;
7-
import com.fasterxml.jackson.databind.SerializationFeature;
8-
import com.fasterxml.jackson.databind.json.JsonMapper;
9-
import com.fasterxml.jackson.databind.util.StdDateFormat;
10-
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
11-
123
import java.io.IOException;
134

145
public abstract class AbstractModel {
15-
private final static ObjectMapper mapper = JsonMapper.builder()
16-
.addModule(new JavaTimeModule())
17-
.defaultDateFormat(new StdDateFormat().withColonInTimeZone(true))
18-
.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
19-
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
20-
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
21-
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
22-
.serializationInclusion(JsonInclude.Include.NON_NULL)
23-
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
24-
.build();
25-
266
/**
277
* @return JSON representation of this object.
288
* @throws IOException if there is an error serializing the object to JSON.
299
*/
3010
public final String toJson() throws IOException {
31-
return mapper.writeValueAsString(this);
11+
return Mapper.get().writeValueAsString(this);
3212
}
3313

3414
@Override
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.maxmind.minfraud;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.databind.DeserializationFeature;
5+
import com.fasterxml.jackson.databind.MapperFeature;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.SerializationFeature;
8+
import com.fasterxml.jackson.databind.json.JsonMapper;
9+
import com.fasterxml.jackson.databind.util.StdDateFormat;
10+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
11+
12+
class Mapper {
13+
private final static ObjectMapper mapper = JsonMapper.builder()
14+
.addModule(new JavaTimeModule())
15+
.defaultDateFormat(new StdDateFormat().withColonInTimeZone(true))
16+
.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
17+
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
18+
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
19+
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
20+
.serializationInclusion(JsonInclude.Include.NON_NULL)
21+
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
22+
.build();
23+
24+
public static ObjectMapper get() {
25+
return mapper;
26+
}
27+
}

src/main/java/com/maxmind/minfraud/WebServiceClient.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
package com.maxmind.minfraud;
22

33
import com.fasterxml.jackson.core.type.TypeReference;
4-
import com.fasterxml.jackson.databind.DeserializationFeature;
54
import com.fasterxml.jackson.databind.InjectableValues;
65
import com.fasterxml.jackson.databind.InjectableValues.Std;
7-
import com.fasterxml.jackson.databind.MapperFeature;
8-
import com.fasterxml.jackson.databind.ObjectMapper;
9-
import com.fasterxml.jackson.databind.util.StdDateFormat;
10-
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
116
import com.maxmind.minfraud.exception.*;
127
import com.maxmind.minfraud.request.Transaction;
138
import com.maxmind.minfraud.request.TransactionReport;
@@ -42,7 +37,6 @@ public final class WebServiceClient implements Closeable {
4237
private final List<String> locales;
4338
private final Duration requestTimeout;
4439

45-
private final ObjectMapper mapper;
4640
private final HttpClient httpClient;
4741

4842
private WebServiceClient(WebServiceClient.Builder builder) {
@@ -59,12 +53,6 @@ private WebServiceClient(WebServiceClient.Builder builder) {
5953
.encodeToString((builder.accountId + ":" + builder.licenseKey)
6054
.getBytes(StandardCharsets.UTF_8));
6155

62-
mapper = new ObjectMapper();
63-
mapper.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS);
64-
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
65-
mapper.registerModule(new JavaTimeModule());
66-
mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true));
67-
6856
requestTimeout = builder.requestTimeout;
6957
HttpClient.Builder httpClientBuilder = HttpClient.newBuilder()
7058
.proxy(builder.proxy);
@@ -409,7 +397,7 @@ private <T> T handleResponse(HttpResponse<InputStream> response, URI uri, Class<
409397
"locales", locales);
410398

411399
try (InputStream stream = response.body()) {
412-
return mapper.readerFor(cls).with(inject).readValue(stream);
400+
return Mapper.get().readerFor(cls).with(inject).readValue(stream);
413401
} catch (IOException e) {
414402
throw new MinFraudException(
415403
"Received a 200 response but could not decode it as JSON", e);
@@ -429,7 +417,7 @@ private void handle4xxStatus(HttpResponse<InputStream> response, URI uri)
429417

430418
Map<String, String> content;
431419
try {
432-
content = mapper.readValue(body,
420+
content = Mapper.get().readValue(body,
433421
new TypeReference<HashMap<String, String>>() {
434422
});
435423
this.handleErrorWithJsonBody(content, body, status, uri);
@@ -516,7 +504,6 @@ public String toString() {
516504
", port=" + port +
517505
", useHttps=" + useHttps +
518506
", locales=" + locales +
519-
", mapper=" + mapper +
520507
", httpClient=" + httpClient +
521508
'}';
522509
}

0 commit comments

Comments
 (0)