Skip to content

Commit 37655e2

Browse files
rudygtwangzlei
andauthored
use jackson to snake case for better performance (#382)
* optimize string replace * use snake case from jackson * fix checkstyle --------- Co-authored-by: Lei Wang <[email protected]>
1 parent 4103ea0 commit 37655e2

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

aws-xray-recorder-sdk-aws-sdk-core/src/main/java/com/amazonaws/xray/utils/StringTransform.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@Deprecated
2424
@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
2525
public class StringTransform {
26-
private static final Pattern REGEX = Pattern.compile("([a-z])([A-Z]+)");
26+
private static final Pattern REGEX = Pattern.compile("([a-z])([A-Z])");
2727
private static final String REPLACE = "$1_$2";
2828

2929
public static String toSnakeCase(String camelCase) {

aws-xray-recorder-sdk-aws-sdk-v2/src/main/java/com/amazonaws/xray/interceptors/TracingInterceptor.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@
2626
import com.amazonaws.xray.handlers.config.AWSOperationHandler;
2727
import com.amazonaws.xray.handlers.config.AWSOperationHandlerManifest;
2828
import com.amazonaws.xray.handlers.config.AWSServiceHandlerManifest;
29-
import com.amazonaws.xray.utils.StringTransform;
3029
import com.fasterxml.jackson.core.JsonParser;
3130
import com.fasterxml.jackson.databind.DeserializationFeature;
3231
import com.fasterxml.jackson.databind.ObjectMapper;
33-
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
32+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
3433
import java.io.IOException;
3534
import java.net.URL;
3635
import java.util.Arrays;
@@ -68,10 +67,13 @@ public class TracingInterceptor implements ExecutionInterceptor {
6867
private static final Log logger = LogFactory.getLog(TracingInterceptor.class);
6968

7069
private static final ObjectMapper MAPPER = new ObjectMapper()
71-
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)
70+
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE)
7271
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
7372
.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
7473

74+
private static final PropertyNamingStrategies.NamingBase
75+
SNAKE_CASE_NAMING_STRATEGY = (PropertyNamingStrategies.NamingBase) PropertyNamingStrategies.SNAKE_CASE;
76+
7577
private static final URL DEFAULT_OPERATION_PARAMETER_WHITELIST =
7678
TracingInterceptor.class.getResource("/com/amazonaws/xray/interceptors/DefaultOperationParameterWhitelist.json");
7779

@@ -147,7 +149,7 @@ private HashMap<String, Object> extractRequestParameters(
147149
SdkRequest request = context.request();
148150
Optional<Object> parameterValue = request.getValueForField(parameterName, Object.class);
149151
if (parameterValue.isPresent()) {
150-
parameters.put(StringTransform.toSnakeCase(parameterName), parameterValue.get());
152+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue.get());
151153
}
152154
});
153155
}
@@ -159,14 +161,14 @@ private HashMap<String, Object> extractRequestParameters(
159161
Optional<Map> parameterValue = request.getValueForField(key, Map.class);
160162
if (parameterValue.isPresent()) {
161163
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
162-
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().keySet());
164+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.get().keySet());
163165
}
164166
} else if (descriptor.isList() && descriptor.shouldGetCount()) {
165167
SdkRequest request = context.request();
166168
Optional<List> parameterValue = request.getValueForField(key, List.class);
167169
if (parameterValue.isPresent()) {
168170
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
169-
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().size());
171+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.get().size());
170172
}
171173
}
172174
});
@@ -189,7 +191,7 @@ private HashMap<String, Object> extractResponseParameters(
189191
SdkResponse response = context.response();
190192
Optional<Object> parameterValue = response.getValueForField(parameterName, Object.class);
191193
if (parameterValue.isPresent()) {
192-
parameters.put(StringTransform.toSnakeCase(parameterName), parameterValue.get());
194+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue.get());
193195
}
194196
});
195197
}
@@ -201,14 +203,14 @@ private HashMap<String, Object> extractResponseParameters(
201203
Optional<Map> parameterValue = response.getValueForField(key, Map.class);
202204
if (parameterValue.isPresent()) {
203205
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
204-
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().keySet());
206+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.get().keySet());
205207
}
206208
} else if (descriptor.isList() && descriptor.shouldGetCount()) {
207209
SdkResponse response = context.response();
208210
Optional<List> parameterValue = response.getValueForField(key, List.class);
209211
if (parameterValue.isPresent()) {
210212
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
211-
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().size());
213+
parameters.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.get().size());
212214
}
213215
}
214216
});

aws-xray-recorder-sdk-aws-sdk/src/main/java/com/amazonaws/xray/handlers/TracingHandler.java

+11-15
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import com.fasterxml.jackson.core.JsonParser;
4040
import com.fasterxml.jackson.databind.DeserializationFeature;
4141
import com.fasterxml.jackson.databind.ObjectMapper;
42-
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
42+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
4343
import java.io.IOException;
4444
import java.lang.reflect.InvocationTargetException;
4545
import java.net.URL;
@@ -60,7 +60,7 @@ public class TracingHandler extends RequestHandler2 {
6060
private static final Log logger = LogFactory.getLog(TracingHandler.class);
6161

6262
private static final ObjectMapper MAPPER = new ObjectMapper()
63-
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)
63+
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE)
6464
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
6565
.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
6666

@@ -81,9 +81,9 @@ public class TracingHandler extends RequestHandler2 {
8181

8282
private static final HandlerContextKey<Entity> ENTITY_KEY = new HandlerContextKey<>("AWS X-Ray Entity");
8383
private static final HandlerContextKey<Long> EXECUTING_THREAD_KEY = new HandlerContextKey<>("AWS X-Ray Executing Thread ID");
84-
85-
private static final String TO_SNAKE_CASE_REGEX = "([a-z])([A-Z]+)";
86-
private static final String TO_SNAKE_CASE_REPLACE = "$1_$2";
84+
85+
private static final PropertyNamingStrategies.NamingBase
86+
SNAKE_CASE_NAMING_STRATEGY = (PropertyNamingStrategies.NamingBase) PropertyNamingStrategies.SNAKE_CASE;
8787

8888
private final String accountId;
8989

@@ -206,10 +206,6 @@ private String extractOperationName(Request<?> request) {
206206
return ret;
207207
}
208208

209-
private static String toSnakeCase(String camelCase) {
210-
return camelCase.replaceAll(TO_SNAKE_CASE_REGEX, TO_SNAKE_CASE_REPLACE).toLowerCase();
211-
}
212-
213209
private HashMap<String, Object> extractRequestParameters(Request<?> request) {
214210
HashMap<String, Object> ret = new HashMap<>();
215211
if (null == awsServiceHandlerManifest) {
@@ -235,7 +231,7 @@ private HashMap<String, Object> extractRequestParameters(Request<?> request) {
235231
Object parameterValue = originalRequest
236232
.getClass().getMethod(GETTER_METHOD_NAME_PREFIX + parameterName).invoke(originalRequest);
237233
if (null != parameterValue) {
238-
ret.put(TracingHandler.toSnakeCase(parameterName), parameterValue);
234+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue);
239235
}
240236
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
241237
logger.error("Error getting request parameter: " + parameterName, e);
@@ -255,7 +251,7 @@ private HashMap<String, Object> extractRequestParameters(Request<?> request) {
255251
if (null != parameterValue) {
256252
String renameTo =
257253
null != requestDescriptor.getRenameTo() ? requestDescriptor.getRenameTo() : requestKeyName;
258-
ret.put(TracingHandler.toSnakeCase(renameTo), parameterValue.keySet());
254+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.keySet());
259255
}
260256
} else if (requestDescriptor.isList() && requestDescriptor.shouldGetCount()) {
261257
@SuppressWarnings("unchecked")
@@ -265,7 +261,7 @@ private HashMap<String, Object> extractRequestParameters(Request<?> request) {
265261
if (null != parameterValue) {
266262
String renameTo =
267263
null != requestDescriptor.getRenameTo() ? requestDescriptor.getRenameTo() : requestKeyName;
268-
ret.put(TracingHandler.toSnakeCase(renameTo), parameterValue.size());
264+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.size());
269265
}
270266
}
271267
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassCastException e) {
@@ -300,7 +296,7 @@ private HashMap<String, Object> extractResponseParameters(Request<?> request, Ob
300296
Object parameterValue = response
301297
.getClass().getMethod(GETTER_METHOD_NAME_PREFIX + parameterName).invoke(response);
302298
if (null != parameterValue) {
303-
ret.put(TracingHandler.toSnakeCase(parameterName), parameterValue);
299+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue);
304300
}
305301
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
306302
logger.error("Error getting response parameter: " + parameterName, e);
@@ -319,7 +315,7 @@ private HashMap<String, Object> extractResponseParameters(Request<?> request, Ob
319315
if (null != parameterValue) {
320316
String renameTo =
321317
null != responseDescriptor.getRenameTo() ? responseDescriptor.getRenameTo() : responseKeyName;
322-
ret.put(TracingHandler.toSnakeCase(renameTo), parameterValue.keySet());
318+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.keySet());
323319
}
324320
} else if (responseDescriptor.isList() && responseDescriptor.shouldGetCount()) {
325321
@SuppressWarnings("unchecked")
@@ -329,7 +325,7 @@ private HashMap<String, Object> extractResponseParameters(Request<?> request, Ob
329325
if (null != parameterValue) {
330326
String renameTo =
331327
null != responseDescriptor.getRenameTo() ? responseDescriptor.getRenameTo() : responseKeyName;
332-
ret.put(TracingHandler.toSnakeCase(renameTo), parameterValue.size());
328+
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.size());
333329
}
334330
}
335331
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassCastException e) {

0 commit comments

Comments
 (0)