Skip to content

Commit 55f9058

Browse files
committed
[#noissue] Cleanup ObjectMapper
1 parent 98c9a79 commit 55f9058

File tree

9 files changed

+114
-61
lines changed

9 files changed

+114
-61
lines changed

commons-server/src/main/java/com/navercorp/pinpoint/common/server/mapper/MapStructUtils.java

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
import com.fasterxml.jackson.core.JacksonException;
2121
import com.fasterxml.jackson.core.type.TypeReference;
22-
import com.fasterxml.jackson.databind.JavaType;
2322
import com.fasterxml.jackson.databind.ObjectMapper;
23+
import com.fasterxml.jackson.databind.ObjectReader;
2424
import com.navercorp.pinpoint.common.server.util.json.JsonRuntimeException;
2525
import com.navercorp.pinpoint.common.util.CollectionUtils;
2626
import com.navercorp.pinpoint.common.util.StringUtils;
@@ -37,13 +37,19 @@
3737

3838
@Component
3939
public class MapStructUtils {
40+
4041
private final ObjectMapper mapper;
4142

42-
private final JavaType listLongJavaType;
43+
private final ObjectReader integerListReader;
44+
private final ObjectReader longListReader;
45+
private final ObjectReader stringListReader;
4346

4447
public MapStructUtils(ObjectMapper mapper) {
4548
this.mapper = Objects.requireNonNull(mapper, "mapper");
46-
this.listLongJavaType = mapper.getTypeFactory().constructCollectionType(List.class, Long.class);
49+
50+
this.integerListReader = mapper.readerForListOf(Integer.class);
51+
this.longListReader = mapper.readerForListOf(Long.class);
52+
this.stringListReader = mapper.readerForListOf(String.class);
4753
}
4854

4955

@@ -63,23 +69,46 @@ public MapStructUtils(ObjectMapper mapper) {
6369

6470

6571
@JsonStrToList
66-
public <T> List<T> jsonStrToList(String s) {
67-
if (StringUtils.isEmpty(s)) {
72+
@Deprecated
73+
public <T> List<T> jsonStrToList(String json) {
74+
if (StringUtils.isEmpty(json)) {
75+
return Collections.emptyList();
76+
}
77+
try {
78+
return mapper.readValue(json, new TypeReference<>() {});
79+
} catch (JacksonException e) {
80+
throw new JsonRuntimeException("Json read error", e);
81+
}
82+
}
83+
84+
public List<String> jsonToStringList(String json) {
85+
if (StringUtils.isEmpty(json)) {
86+
return Collections.emptyList();
87+
}
88+
try {
89+
return stringListReader.readValue(json);
90+
} catch (JacksonException e) {
91+
throw new JsonRuntimeException("Json read error", e);
92+
}
93+
}
94+
95+
public List<Integer> jsonToIntegerList(String json) {
96+
if (StringUtils.isEmpty(json)) {
6897
return Collections.emptyList();
6998
}
7099
try {
71-
return mapper.readValue(s, new TypeReference<>() {});
100+
return integerListReader.readValue(json);
72101
} catch (JacksonException e) {
73102
throw new JsonRuntimeException("Json read error", e);
74103
}
75104
}
76105

77-
public List<Long> jsonStrToLongList(String s) {
78-
if (StringUtils.isEmpty(s)) {
106+
public List<Long> jsonToLongList(String json) {
107+
if (StringUtils.isEmpty(json)) {
79108
return Collections.emptyList();
80109
}
81110
try {
82-
return mapper.readValue(s, listLongJavaType);
111+
return longListReader.readValue(json);
83112
} catch (JacksonException e) {
84113
throw new JsonRuntimeException("Json read error", e);
85114
}

commons-server/src/test/java/com/navercorp/pinpoint/common/server/mapper/MapStructUtilsTest.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,44 @@
1111
class MapStructUtilsTest {
1212

1313
@Test
14-
void jsonStrToLongList() {
14+
void jsonStrToList() {
1515
ObjectMapper mapper = Jackson.newMapper();
1616
MapStructUtils mapStructUtils = new MapStructUtils(mapper);
1717

18-
List<Long> longs = mapStructUtils.jsonStrToLongList("[1,2,3]");
18+
// List<Long> longs = mapStructUtils.jsonStrToList("[1,2,3]");
19+
// assertThat(longs).containsExactly(1L, 2L, 3L);
20+
21+
List<Integer> integers = mapStructUtils.jsonStrToList("[1,2,3]");
22+
assertThat(integers).containsExactly(1, 2, 3);
23+
24+
List<Integer> objects = mapStructUtils.jsonStrToList("[1,\"abc\",3]");
25+
// assertThat(objects).contains(1, "abc", 3);
26+
}
27+
28+
@Test
29+
void jsonToLongList() {
30+
ObjectMapper mapper = Jackson.newMapper();
31+
MapStructUtils mapStructUtils = new MapStructUtils(mapper);
32+
33+
List<Long> longs = mapStructUtils.jsonToLongList("[1,2,3]");
1934
assertThat(longs).containsExactly(1L, 2L, 3L);
2035
}
36+
37+
@Test
38+
void jsonStrToIntegerList() {
39+
ObjectMapper mapper = Jackson.newMapper();
40+
MapStructUtils mapStructUtils = new MapStructUtils(mapper);
41+
42+
List<Integer> integers = mapStructUtils.jsonToIntegerList("[1,2,3]");
43+
assertThat(integers).containsExactly(1, 2, 3);
44+
}
45+
46+
@Test
47+
void jsonStrToStringList() {
48+
ObjectMapper mapper = Jackson.newMapper();
49+
MapStructUtils mapStructUtils = new MapStructUtils(mapper);
50+
51+
List<String> strings = mapStructUtils.jsonToStringList("[1,2,3]");
52+
assertThat(strings).containsExactly("1", "2", "3");
53+
}
2154
}

exceptiontrace/exceptiontrace-web/src/main/java/com/navercorp/pinpoint/exceptiontrace/web/mapper/StackTraceMapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ public StackTraceMapper(MapStructUtils mapStructUtils) {
5050

5151
@StringsToStackTrace
5252
public List<StackTraceElementWrapper> stackTrace(ExceptionMetaDataEntity entity) {
53-
List<String> classNameIterable = mapStructUtils.jsonStrToList(entity.getStackTraceClassName());
54-
List<String> fileNameIterable = mapStructUtils.jsonStrToList(entity.getStackTraceFileName());
55-
List<Integer> lineNumberIterable = mapStructUtils.jsonStrToList(entity.getStackTraceLineNumber());
56-
List<String> methodNameIterable = mapStructUtils.jsonStrToList(entity.getStackTraceMethodName());
53+
List<String> classNameIterable = mapStructUtils.jsonToStringList(entity.getStackTraceClassName());
54+
List<String> fileNameIterable = mapStructUtils.jsonToStringList(entity.getStackTraceFileName());
55+
List<Integer> lineNumberIterable = mapStructUtils.jsonToIntegerList(entity.getStackTraceLineNumber());
56+
List<String> methodNameIterable = mapStructUtils.jsonToStringList(entity.getStackTraceMethodName());
5757

5858
List<StackTraceElementWrapper> wrappers = new ArrayList<>();
5959
for (int i = 0; i < classNameIterable.size(); i++) {

exceptiontrace/exceptiontrace-web/src/test/java/com/navercorp/pinpoint/exceptiontrace/web/mapper/ExceptionEntityMapperTest.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import com.navercorp.pinpoint.exceptiontrace.web.entity.ExceptionGroupSummaryEntity;
99
import com.navercorp.pinpoint.exceptiontrace.web.entity.ExceptionMetaDataEntity;
1010
import com.navercorp.pinpoint.exceptiontrace.web.entity.GroupedFieldNameEntity;
11-
import com.navercorp.pinpoint.exceptiontrace.web.view.ExceptionChartValueView;
1211
import com.navercorp.pinpoint.exceptiontrace.web.model.ExceptionGroupSummary;
1312
import com.navercorp.pinpoint.exceptiontrace.web.util.GroupByAttributes;
13+
import com.navercorp.pinpoint.exceptiontrace.web.view.ExceptionChartValueView;
1414
import com.navercorp.pinpoint.exceptiontrace.web.view.ExceptionDetailView;
1515
import org.apache.logging.log4j.LogManager;
1616
import org.apache.logging.log4j.Logger;
@@ -82,10 +82,10 @@ public void testEntityToModel() {
8282
String lineNumbers = expected.getStackTraceLineNumber();
8383
String methodNames = expected.getStackTraceMethodName();
8484

85-
List<String> classNameIter = convertToList(classNames);
86-
List<String> fileNameIter = convertToList(fileNames);
87-
List<Integer> lineNumberIter = convertToList(lineNumbers);
88-
List<String> methodNameIter = convertToList(methodNames);
85+
List<String> classNameIter = mapStructUtils.jsonToStringList(classNames);
86+
List<String> fileNameIter = mapStructUtils.jsonToStringList(fileNames);
87+
List<Integer> lineNumberIter = mapStructUtils.jsonToIntegerList(lineNumbers);
88+
List<String> methodNameIter = mapStructUtils.jsonToStringList(methodNames);
8989

9090
List<StackTraceElementWrapper> actualStackTrace = actual.getStackTrace();
9191

@@ -128,10 +128,10 @@ public void testEntityToView() {
128128
String lineNumbers = expected.getStackTraceLineNumber();
129129
String methodNames = expected.getStackTraceMethodName();
130130

131-
List<String> classNameIter = convertToList(classNames);
132-
List<String> fileNameIter = convertToList(fileNames);
133-
List<Integer> lineNumberIter = convertToList(lineNumbers);
134-
List<String> methodNameIter = convertToList(methodNames);
131+
List<String> classNameIter = mapStructUtils.jsonToStringList(classNames);
132+
List<String> fileNameIter = mapStructUtils.jsonToStringList(fileNames);
133+
List<Integer> lineNumberIter = mapStructUtils.jsonToIntegerList(lineNumbers);
134+
List<String> methodNameIter = mapStructUtils.jsonToStringList(methodNames);
135135

136136
List<StackTraceElementWrapper> actualStackTrace = actual.getStackTrace();
137137

@@ -173,10 +173,6 @@ private <T> String toFlattenedString(List<StackTraceElement> elements, Function<
173173
return mapStructUtils.listToJsonStr(collect);
174174
}
175175

176-
public <T> List<T> convertToList(String json) {
177-
return mapStructUtils.jsonStrToList(json);
178-
}
179-
180176
@Test
181177
public void testEntityToValueView() {
182178
ExceptionChartValueViewEntity expected = newExceptionMetaDataEntity();

metric-module/metric-commons/src/main/java/com/navercorp/pinpoint/metric/common/mybatis/typehandler/TagListSerializer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.fasterxml.jackson.core.JsonProcessingException;
2020
import com.fasterxml.jackson.databind.ObjectMapper;
2121
import com.fasterxml.jackson.databind.ObjectReader;
22+
import com.fasterxml.jackson.databind.ObjectWriter;
2223
import com.navercorp.pinpoint.common.server.util.json.JsonRuntimeException;
2324
import com.navercorp.pinpoint.metric.common.model.Tag;
2425
import com.navercorp.pinpoint.metric.common.model.Tags;
@@ -35,18 +36,19 @@ public class TagListSerializer {
3536

3637
private final Logger logger = LogManager.getLogger(this.getClass());
3738

38-
private final ObjectMapper mapper;
39+
private final ObjectWriter writer;
3940
private final ObjectReader reader;
4041

4142
public TagListSerializer(ObjectMapper mapper) {
42-
this.mapper = Objects.requireNonNull(mapper, "mapper");
43-
reader = mapper.readerFor(Tags.class);
43+
Objects.requireNonNull(mapper, "mapper");
44+
this.writer = mapper.writerFor(Tags.class);
45+
this.reader = mapper.readerFor(Tags.class);
4446
}
4547

4648
public String serialize(List<Tag> tagList) {
4749
try {
4850
Tags tags = new Tags(tagList);
49-
return mapper.writeValueAsString(tags);
51+
return writer.writeValueAsString(tags);
5052
} catch (JsonProcessingException e) {
5153
logger.error("Error serializing List<Tag> : {}", tagList, e);
5254
throw new JsonRuntimeException("Error serializing tagList", e);

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/collector/model/serialize/TelegrafJsonDeserializer.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@
2323
import com.fasterxml.jackson.databind.JsonDeserializer;
2424
import com.navercorp.pinpoint.metric.collector.model.TelegrafMetric;
2525
import com.navercorp.pinpoint.metric.collector.model.TelegrafMetrics;
26-
import com.navercorp.pinpoint.metric.common.model.Tag;
27-
import com.navercorp.pinpoint.metric.common.model.TagComparator;
2826
import org.springframework.stereotype.Component;
2927

3028
import java.io.IOException;
3129
import java.util.Collections;
32-
import java.util.Comparator;
3330
import java.util.List;
3431

3532
/**
@@ -38,7 +35,8 @@
3835
@Component
3936
public class TelegrafJsonDeserializer extends JsonDeserializer<TelegrafMetrics> {
4037

41-
private final static Comparator<Tag> TAG_COMPARATOR = TagComparator.INSTANCE;
38+
private static final TypeReference<List<TelegrafMetric>> REF_BATCH = new TypeReference<>() {
39+
};
4240

4341
public TelegrafJsonDeserializer() {
4442
}
@@ -54,9 +52,7 @@ public TelegrafMetrics deserialize(JsonParser jp, DeserializationContext ctxt) t
5452
if (jp.nextToken() != JsonToken.START_ARRAY) {
5553
ctxt.handleUnexpectedToken(TelegrafMetrics.class, jp);
5654
}
57-
TypeReference<List<TelegrafMetric>> batch = new TypeReference<>() {
58-
};
59-
List<TelegrafMetric> metrics = jp.readValueAs(batch);
55+
List<TelegrafMetric> metrics = jp.readValueAs(REF_BATCH);
6056
return new TelegrafMetrics(metrics);
6157
} else {
6258
// standard

otlpmetric/otlpmetric-web/src/main/java/com/navercorp/pinpoint/otlp/web/dao/mysql/MysqlAppMetricDefinitionDao.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import com.fasterxml.jackson.core.JsonProcessingException;
2020
import com.fasterxml.jackson.core.type.TypeReference;
2121
import com.fasterxml.jackson.databind.ObjectMapper;
22+
import com.fasterxml.jackson.databind.ObjectReader;
23+
import com.fasterxml.jackson.databind.ObjectWriter;
2224
import com.navercorp.pinpoint.common.server.util.json.JsonRuntimeException;
2325
import com.navercorp.pinpoint.otlp.common.web.defined.AppMetricDefinition;
2426
import com.navercorp.pinpoint.otlp.web.dao.AppMetricDefinitionDao;
@@ -65,18 +67,18 @@ public void updateAppMetricDefinitionList(String applicationName, List<AppMetric
6567
}
6668

6769
static class Mapper {
68-
private final ObjectMapper mapper;
69-
private final TypeReference<List<AppMetricDefinition>> REF_LIST_APP_METRIC_DEFINITION = new TypeReference<>() {};
70+
private final ObjectWriter writer;
71+
private final ObjectReader reader;
7072

7173
public Mapper(ObjectMapper mapper) {
72-
this.mapper = Objects.requireNonNull(mapper, "mapper");
74+
this.writer = mapper.writerFor(new TypeReference<List<AppMetricDefinition>>() {});
75+
this.reader = mapper.readerForListOf(AppMetricDefinition.class);
7376
}
7477

7578
public AppMetricDefDto toDto(String applicationName, List<AppMetricDefinition> appMetricDefinitionList) {
7679
Objects.requireNonNull(appMetricDefinitionList, "appMetricDefinitionList");
77-
7880
try {
79-
String metricConfigJson = mapper.writeValueAsString(appMetricDefinitionList);
81+
String metricConfigJson = writer.writeValueAsString(appMetricDefinitionList);
8082
return new AppMetricDefDto(applicationName, metricConfigJson, AppMetricDefinition.SCHEMA_VERSION);
8183
} catch (JsonProcessingException e) {
8284
throw new JsonRuntimeException("can not convert appMetricDefinitionList to json :" + appMetricDefinitionList, e);
@@ -89,8 +91,7 @@ public List<AppMetricDefinition> toModel(AppMetricDefDto appMetricDefDto) {
8991
}
9092

9193
try {
92-
List<AppMetricDefinition> appMetricDefinitionList = mapper.readValue(appMetricDefDto.metricDefinition(), REF_LIST_APP_METRIC_DEFINITION);
93-
return appMetricDefinitionList;
94+
return reader.readValue(appMetricDefDto.metricDefinition());
9495
} catch (JsonProcessingException e) {
9596
throw new JsonRuntimeException("can not convert appMetricDefDto to model :" + appMetricDefDto, e);
9697
}

realtime/realtime-common/src/main/java/com/navercorp/pinpoint/realtime/serde/ClusterKeyDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public ClusterKeyDeserializer() {
3636

3737
@Override
3838
public ClusterKey deserialize(JsonParser parser, DeserializationContext ctx) throws IOException {
39-
TreeNode root = parser.getCodec().readTree(parser);
39+
TreeNode root = parser.readValueAsTree();
4040
String applicationName = ((TextNode) root.get("applicationName")).asText();
4141
String agentId = ((TextNode) root.get("agentId")).asText();
4242
long startTimestamp = ((LongNode) root.get("startTimestamp")).asLong();

web/src/main/java/com/navercorp/pinpoint/web/filter/DefaultFilterBuilder.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,24 @@
1616

1717
package com.navercorp.pinpoint.web.filter;
1818

19-
import java.io.IOException;
20-
import java.net.URLDecoder;
21-
import java.nio.charset.StandardCharsets;
22-
import java.util.ArrayList;
23-
import java.util.List;
24-
import java.util.Objects;
25-
19+
import com.fasterxml.jackson.databind.ObjectMapper;
2620
import com.fasterxml.jackson.databind.ObjectReader;
2721
import com.navercorp.pinpoint.common.server.bo.SpanBo;
28-
2922
import com.navercorp.pinpoint.common.util.StringUtils;
3023
import com.navercorp.pinpoint.loader.service.AnnotationKeyRegistryService;
3124
import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService;
32-
33-
import com.fasterxml.jackson.databind.ObjectMapper;
34-
import com.fasterxml.jackson.core.type.TypeReference;
35-
36-
import org.apache.logging.log4j.Logger;
3725
import org.apache.logging.log4j.LogManager;
26+
import org.apache.logging.log4j.Logger;
3827
import org.springframework.stereotype.Component;
3928
import org.springframework.util.Assert;
4029

30+
import java.io.IOException;
31+
import java.net.URLDecoder;
32+
import java.nio.charset.StandardCharsets;
33+
import java.util.ArrayList;
34+
import java.util.List;
35+
import java.util.Objects;
36+
4137
/**
4238
*
4339
* @author netspider
@@ -58,7 +54,7 @@ public class DefaultFilterBuilder implements FilterBuilder<List<SpanBo>> {
5854
public DefaultFilterBuilder(ObjectMapper mapper, ServiceTypeRegistryService serviceTypeRegistryService, AnnotationKeyRegistryService annotationKeyRegistryService) {
5955
Objects.requireNonNull(mapper, "mapper");
6056
this.filterHintReader = mapper.readerFor(FilterHint.class);
61-
this.filterDescriptorReader = mapper.readerFor(new TypeReference<List<FilterDescriptor>>() {});
57+
this.filterDescriptorReader = mapper.readerForListOf(FilterDescriptor.class);
6258

6359
this.serviceTypeRegistryService = Objects.requireNonNull(serviceTypeRegistryService, "serviceTypeRegistryService");
6460
this.annotationKeyRegistryService = Objects.requireNonNull(annotationKeyRegistryService, "annotationKeyRegistryService");

0 commit comments

Comments
 (0)