in aws-xray-recorder-sdk-aws-sdk/src/main/java/com/amazonaws/xray/handlers/TracingHandler.java [286:348]
private HashMap<String, Object> extractResponseParameters(Request<?> request, Object response) {
HashMap<String, Object> ret = new HashMap<>();
if (null == awsServiceHandlerManifest) {
return ret;
}
AWSOperationHandlerManifest serviceHandler =
awsServiceHandlerManifest.getOperationHandlerManifest(extractServiceName(request));
if (null == serviceHandler) {
return ret;
}
AWSOperationHandler operationHandler = serviceHandler.getOperationHandler(extractOperationName(request));
if (null == operationHandler) {
return ret;
}
if (null != operationHandler.getResponseParameters()) {
operationHandler.getResponseParameters().forEach(parameterName -> {
try {
Object parameterValue = response
.getClass().getMethod(GETTER_METHOD_NAME_PREFIX + parameterName).invoke(response);
if (null != parameterValue) {
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue);
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
logger.error("Error getting response parameter: " + parameterName, e);
}
});
}
if (null != operationHandler.getResponseDescriptors()) {
operationHandler.getResponseDescriptors().forEach((responseKeyName, responseDescriptor) -> {
try {
if (responseDescriptor.isMap() && responseDescriptor.shouldGetKeys()) {
@SuppressWarnings("unchecked")
Map<String, Object> parameterValue =
(Map<String, Object>) response
.getClass().getMethod(GETTER_METHOD_NAME_PREFIX + responseKeyName).invoke(response);
if (null != parameterValue) {
String renameTo =
null != responseDescriptor.getRenameTo() ? responseDescriptor.getRenameTo() : responseKeyName;
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.keySet());
}
} else if (responseDescriptor.isList() && responseDescriptor.shouldGetCount()) {
@SuppressWarnings("unchecked")
List<Object> parameterValue =
(List<Object>) response
.getClass().getMethod(GETTER_METHOD_NAME_PREFIX + responseKeyName).invoke(response);
if (null != parameterValue) {
String renameTo =
null != responseDescriptor.getRenameTo() ? responseDescriptor.getRenameTo() : responseKeyName;
ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.size());
}
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassCastException e) {
logger.error("Error getting request parameter: " + responseKeyName, e);
}
});
}
return ret;
}