/** * Attempt to parse the error code from the response headers. Returns null if information is not * present in the header. */ private String parseErrorCodeFromHeader(SdkHttpFullResponse response) { Map<String, List<String>> filteredHeaders = response.headers().entrySet().stream() .filter(e -> errorCodeHeaders.stream() .anyMatch(e.getKey()::equalsIgnoreCase)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (filteredHeaders.isEmpty()) { return null; } if (filteredHeaders.size() > 1) { log.warn("Response contains multiple headers representing the error code: " + filteredHeaders.keySet()); } String headerKey = filteredHeaders.keySet().stream().findFirst().get(); String headerValue = filteredHeaders.get(headerKey).get(0); if (X_AMZN_ERROR_TYPE.equalsIgnoreCase(headerKey)) { return parseErrorCodeFromXAmzErrorType(headerValue); } return headerValue; }
/** * Attempt to parse the error code from the response headers. Returns null if information is not * present in the header. */ private String parseErrorCodeFromHeader(SdkHttpFullResponse response) { Map<String, List<String>> filteredHeaders = response.headers().entrySet().stream() .filter(e -> errorCodeHeaders.stream() .anyMatch(e.getKey()::equalsIgnoreCase)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (filteredHeaders.isEmpty()) { return null; } if (filteredHeaders.size() > 1) { log.warn("Response contains multiple headers representing the error code: " + filteredHeaders.keySet()); } String headerKey = filteredHeaders.keySet().stream().findFirst().get(); String headerValue = filteredHeaders.get(headerKey).get(0); if (X_AMZN_ERROR_TYPE.equalsIgnoreCase(headerKey)) { return parseErrorCodeFromXAmzErrorType(headerValue); } return headerValue; }
private AwsServiceException unmarshall(SdkHttpFullResponse response, ExecutionAttributes executionAttributes) { JsonContent jsonContent = JsonContent.createJsonContent(response, jsonFactory); String errorCode = errorCodeParser.parseErrorCode(response, jsonContent); Optional<ExceptionMetadata> modeledExceptionMetadata = exceptions.stream() .filter(e -> e.errorCode().equals(errorCode)) .findAny(); SdkPojo sdkPojo = modeledExceptionMetadata.map(ExceptionMetadata::exceptionBuilderSupplier) .orElse(defaultExceptionSupplier) .get(); AwsServiceException.Builder exception = ((AwsServiceException) jsonProtocolUnmarshaller .unmarshall(sdkPojo, response, jsonContent.getJsonNode())).toBuilder(); String errorMessage = errorMessageParser.parseErrorMessage(response, jsonContent.getJsonNode()); exception.awsErrorDetails(extractAwsErrorDetails(response, executionAttributes, jsonContent, errorCode, errorMessage)); // Status code and request id are sdk level fields exception.message(errorMessage); exception.statusCode(statusCode(response, modeledExceptionMetadata)); exception.requestId(getRequestIdFromHeaders(response.headers())); return exception.build(); }
private AwsServiceException unmarshall(SdkHttpFullResponse response, ExecutionAttributes executionAttributes) { JsonContent jsonContent = JsonContent.createJsonContent(response, jsonFactory); String errorCode = errorCodeParser.parseErrorCode(response, jsonContent); Optional<ExceptionMetadata> modeledExceptionMetadata = exceptions.stream() .filter(e -> e.errorCode().equals(errorCode)) .findAny(); SdkPojo sdkPojo = modeledExceptionMetadata.map(ExceptionMetadata::exceptionBuilderSupplier) .orElse(defaultExceptionSupplier) .get(); AwsServiceException.Builder exception = ((AwsServiceException) jsonProtocolUnmarshaller .unmarshall(sdkPojo, response, jsonContent.getJsonNode())).toBuilder(); String errorMessage = errorMessageParser.parseErrorMessage(response, jsonContent.getJsonNode()); exception.awsErrorDetails(extractAwsErrorDetails(response, executionAttributes, jsonContent, errorCode, errorMessage)); // Status code and request id are sdk level fields exception.message(errorMessage); exception.statusCode(statusCode(response, modeledExceptionMetadata)); exception.requestId(getRequestIdFromHeaders(response.headers())); return exception.build(); }