private HashMap extractRequestParameters()

in aws-xray-recorder-sdk-aws-sdk/src/main/java/com/amazonaws/xray/handlers/TracingHandler.java [219:284]


    private HashMap<String, Object> extractRequestParameters(Request<?> request) {
        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;
        }

        Object originalRequest = request.getOriginalRequest();

        if (null != operationHandler.getRequestParameters()) {
            operationHandler.getRequestParameters().forEach(parameterName -> {
                try {
                    Object parameterValue = originalRequest
                        .getClass().getMethod(GETTER_METHOD_NAME_PREFIX + parameterName).invoke(originalRequest);
                    if (null != parameterValue) {
                        ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(parameterName), parameterValue);
                    }
                } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                    logger.error("Error getting request parameter: " + parameterName, e);
                }
            });
        }

        if (null != operationHandler.getRequestDescriptors()) {
            operationHandler.getRequestDescriptors().forEach((requestKeyName, requestDescriptor) -> {
                try {
                    if (requestDescriptor.isMap() && requestDescriptor.shouldGetKeys()) {
                        @SuppressWarnings("unchecked")
                        Map<String, Object> parameterValue =
                            (Map<String, Object>) originalRequest
                                .getClass()
                                .getMethod(GETTER_METHOD_NAME_PREFIX + requestKeyName).invoke(originalRequest);
                        if (null != parameterValue) {
                            String renameTo =
                                null != requestDescriptor.getRenameTo() ? requestDescriptor.getRenameTo() : requestKeyName;
                            ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.keySet());
                        }
                    } else if (requestDescriptor.isList() && requestDescriptor.shouldGetCount()) {
                        @SuppressWarnings("unchecked")
                        List<Object> parameterValue =
                            (List<Object>) originalRequest
                                .getClass().getMethod(GETTER_METHOD_NAME_PREFIX + requestKeyName).invoke(originalRequest);
                        if (null != parameterValue) {
                            String renameTo =
                                null != requestDescriptor.getRenameTo() ? requestDescriptor.getRenameTo() : requestKeyName;
                            ret.put(SNAKE_CASE_NAMING_STRATEGY.translate(renameTo), parameterValue.size());
                        }
                    }
                } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassCastException e) {
                    logger.error("Error getting request parameter: " + requestKeyName, e);
                }
            });
        }

        return ret;
    }