Java源码示例:com.amazonaws.Response
示例1
@Override
public final void collectMetrics(Request<?> request, Response<?> response)
{
TimingInfo timingInfo = request.getAWSRequestMetrics().getTimingInfo();
Number requestCounts = timingInfo.getCounter(RequestCount.name());
if (requestCounts != null) {
recordRequestCount(requestCounts.longValue());
}
Number retryCounts = timingInfo.getCounter(HttpClientRetryCount.name());
if (retryCounts != null) {
recordRetryCount(retryCounts.longValue());
}
Number throttleExceptions = timingInfo.getCounter(ThrottleException.name());
if (throttleExceptions != null) {
recordThrottleExceptionCount(throttleExceptions.longValue());
}
recordSubTimingDurations(timingInfo, HttpRequestTime, this::recordHttpRequestTime);
recordSubTimingDurations(timingInfo, ClientExecuteTime, this::recordClientExecutionTime);
recordSubTimingDurations(timingInfo, RetryPauseTime, this::recordRetryPauseTime);
}
示例2
@Test
void testGetTestCustomersInfoAPI() {
JSONArray expectedTestCustomersResponse = TestUtil.parseJSONFileFromResourceToJSONArray(
"GetTestCustomers.json");
Response<JSONArray> actualTestCustomersResponse = GettingStarted.getTestCustomers();
assertThat(actualTestCustomersResponse.getHttpResponse().getStatusCode())
.as("Test if status code is 200/OK").isEqualTo(200);
JSONArray actualTestCustomersJSONResponse = actualTestCustomersResponse.getAwsResponse();
assertThat(actualTestCustomersJSONResponse.length())
.as("Check if objects have same amount of fields")
.isEqualTo(expectedTestCustomersResponse.length());
JSONAssert.assertEquals(expectedTestCustomersResponse, actualTestCustomersJSONResponse , false);
}
示例3
@Test
void testGetCurrencyConversion() {
Response<JSONObject> response = GettingStarted.getCurrencyConversion("NOK", "EUR");
assertThat(response.getHttpResponse().getStatusCode())
.as("Test if status code is 200/OK").isEqualTo(200);
JSONObject json = response.getAwsResponse();
assertThat(json.length()).as("Check that object contains correct amount of parameters").isEqualTo(12);
Set<String> keySet;
keySet = json.keySet();
assertThat(keySet.contains("quoteCurrency")).as("That object contains quoteCurrency").isTrue();
assertThat(keySet.contains("country")).as("That object contains country").isTrue();
assertThat(keySet.contains("amount")).as("That object contains amount").isTrue();
assertThat(keySet.contains("buyRateTransfer")).as("That object contains buyRateTransfer").isTrue();
assertThat(keySet.contains("midRate")).as("That object contains midRate").isTrue();
assertThat(keySet.contains("sellRateTransfer")).as("That object contains sellRateTransfer").isTrue();
assertThat(keySet.contains("sellRateCash")).as("That object contains sellRateCash").isTrue();
assertThat(keySet.contains("changeInMidRate")).as("That object contains changeInMidRate").isTrue();
assertThat(keySet.contains("buyRateCash")).as("That object contains buyRateCash").isTrue();
assertThat(keySet.contains("updatedDate")).as("That object contains updatedDate").isTrue();
assertThat(keySet.contains("previousMidRate")).as("That object contains previousMidRate").isTrue();
assertThat(keySet.contains("baseCurrency")).as("That object contains baseCurrency").isTrue();
}
示例4
@Test
public void verifyAfterResponseClearsSecret() {
// given
final ByteBuffer secretBinary = ByteBuffer.wrap(new byte[] { 1, 1, 2, 3, 5, 8 });
assertTrue(Arrays.equals(secretBinary.array(), new byte[] { 1, 1, 2, 3, 5, 8}));
final PutSecretValueRequest originalRequest = new PutSecretValueRequest();
originalRequest.setSecretBinary(secretBinary);
final Request<PutSecretValueRequest> request = new DefaultRequest<PutSecretValueRequest>(originalRequest,
"AWSSecretsManager");
final PutSecretValueResult result = mock(PutSecretValueResult.class);
final HttpResponse httpResponse = mock(HttpResponse.class);
final Response<PutSecretValueResult> response = new Response<PutSecretValueResult>(result, httpResponse);
// when
handler.afterResponse(request, response);
// then
assertFalse(Arrays.equals(secretBinary.array(), new byte[] { 1, 1, 2, 3, 5, 8}));
}
示例5
@Test
public void verifyAfterErrorClearsSecret() {
// given
final ByteBuffer secretBinary = ByteBuffer.wrap(new byte[] { 1, 1, 2, 3, 5, 8 });
assertTrue(Arrays.equals(secretBinary.array(), new byte[] { 1, 1, 2, 3, 5, 8}));
final PutSecretValueRequest originalRequest = new PutSecretValueRequest();
originalRequest.setSecretBinary(secretBinary);
final Request<PutSecretValueRequest> request = new DefaultRequest<PutSecretValueRequest>(originalRequest,
"AWSSecretsManager");
final PutSecretValueResult result = mock(PutSecretValueResult.class);
final HttpResponse httpResponse = mock(HttpResponse.class);
final Response<PutSecretValueResult> response = new Response<PutSecretValueResult>(result, httpResponse);
// when
handler.afterError(request, response, new Exception());
// then
assertFalse(Arrays.equals(secretBinary.array(), new byte[] { 1, 1, 2, 3, 5, 8}));
}
示例6
private void populateAndEndSubsegment(
Subsegment currentSubsegment, Request<?> request, Response<?> response, AmazonServiceException ase) {
if (null != response) {
populateAndEndSubsegment(currentSubsegment, request, response);
return;
} else if (null != ase) {
if (null != ase.getRequestId()) {
currentSubsegment.putAws(REQUEST_ID_SUBSEGMENT_KEY, ase.getRequestId());
}
if (null != ase.getHttpHeaders() &&
null != ase.getHttpHeaders().get(EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER)) {
currentSubsegment.putAws(EntityDataKeys.AWS.EXTENDED_REQUEST_ID_KEY,
ase.getHttpHeaders().get(EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER));
}
if (null != ase.getErrorMessage()) {
currentSubsegment.getCause().setMessage(ase.getErrorMessage());
}
currentSubsegment.putAllHttp(extractHttpResponseInformation(ase));
}
finalizeSubsegment(request);
}
示例7
static void tagSpanWithRequestId(Span span, Response response) {
String requestId = null;
if (response != null) {
if (response.getAwsResponse() instanceof AmazonWebServiceResult<?>) {
ResponseMetadata metadata =
((AmazonWebServiceResult<?>) response.getAwsResponse()).getSdkResponseMetadata();
if (null != metadata) {
requestId = metadata.getRequestId();
}
} else if (response.getHttpResponse() != null) {
if (response.getHttpResponse().getHeader("x-amz-request-id") != null) {
requestId = response.getHttpResponse().getHeader("x-amz-request-id");
}
}
}
if (requestId != null) {
span.tag("aws.request_id", requestId);
}
}
示例8
private void execRequest(String endpoint, int status) {
AWSRequestMetrics metrics = new AWSRequestMetricsFullSupport();
metrics.addProperty(AWSRequestMetrics.Field.ServiceName, "AmazonCloudWatch");
metrics.addProperty(AWSRequestMetrics.Field.ServiceEndpoint, endpoint);
metrics.addProperty(AWSRequestMetrics.Field.StatusCode, "" + status);
if (status == 503) {
metrics.addProperty(AWSRequestMetrics.Field.AWSErrorCode, "Throttled");
}
String counterName = "BytesProcessed";
String timerName = "ClientExecuteTime";
metrics.setCounter(counterName, 12345);
metrics.getTimingInfo().addSubMeasurement(timerName, TimingInfo.unmodifiableTimingInfo(100000L, 200000L));
Request<?> req = new DefaultRequest(new ListMetricsRequest(), "AmazonCloudWatch");
req.setAWSRequestMetrics(metrics);
req.setEndpoint(URI.create(endpoint));
HttpResponse hr = new HttpResponse(req, new HttpPost(endpoint));
hr.setStatusCode(status);
Response<?> resp = new Response<>(null, new HttpResponse(req, new HttpPost(endpoint)));
collector.collectMetrics(req, resp);
}
示例9
@Test
void testGetCurrencyConversions() {
Response<JSONArray> actualCardDetailsResponse = GettingStarted.getCurrencyConversions("NOK");
assertThat(actualCardDetailsResponse.getHttpResponse().getStatusCode())
.as("Test if status code is 200/OK").isEqualTo(200);
JSONArray actualCardDetailsJSONResponse = actualCardDetailsResponse.getAwsResponse();
assertThat(actualCardDetailsJSONResponse.length())
.as("Expecting 46 different currencies")
.isEqualTo(46);
JSONObject jsonObject;
Set<String> keySet;
for (int i = 0 ; i < actualCardDetailsJSONResponse.length() ; i++) {
jsonObject = actualCardDetailsJSONResponse.getJSONObject(i);
keySet = jsonObject.keySet();
assertThat(keySet.size()).as("Check that object contains correct amount of parameters").isEqualTo(12);
assertThat(keySet.contains("quoteCurrency")).as("That object contains quoteCurrency").isTrue();
assertThat(keySet.contains("country")).as("That object contains country").isTrue();
assertThat(keySet.contains("amount")).as("That object contains amount").isTrue();
assertThat(keySet.contains("buyRateTransfer")).as("That object contains buyRateTransfer").isTrue();
assertThat(keySet.contains("midRate")).as("That object contains midRate").isTrue();
assertThat(keySet.contains("sellRateTransfer")).as("That object contains sellRateTransfer").isTrue();
assertThat(keySet.contains("sellRateCash")).as("That object contains sellRateCash").isTrue();
assertThat(keySet.contains("changeInMidRate")).as("That object contains changeInMidRate").isTrue();
assertThat(keySet.contains("buyRateCash")).as("That object contains buyRateCash").isTrue();
assertThat(keySet.contains("updatedDate")).as("That object contains updatedDate").isTrue();
assertThat(keySet.contains("previousMidRate")).as("That object contains previousMidRate").isTrue();
assertThat(keySet.contains("baseCurrency")).as("That object contains baseCurrency").isTrue();
}
}
示例10
public void afterResponse(final Request<?> request, final Response<?> response) {
final Object requestObject = request.getOriginalRequestObject();
if (requestObject instanceof PutSecretValueRequest) {
final PutSecretValueRequest putRequest = (PutSecretValueRequest) requestObject;
overwriteSecret(putRequest);
}
}
示例11
public void afterError(final Request<?> request, final Response<?> response, final Exception exception) {
final Object requestObject = request.getOriginalRequestObject();
if (requestObject instanceof PutSecretValueRequest) {
final PutSecretValueRequest putRequest = (PutSecretValueRequest) requestObject;
overwriteSecret(putRequest);
}
}
示例12
@Override
public void afterResponse(Request<?> request, Response<?> response) {
if (isSubsegmentDuplicate(recorder.getCurrentSubsegmentOptional(), request)) {
Optional<Subsegment> currentSubsegmentOptional = recorder.getCurrentSubsegmentOptional();
if (!currentSubsegmentOptional.isPresent()) {
return;
}
Subsegment currentSubsegment = currentSubsegmentOptional.get();
populateAndEndSubsegment(currentSubsegment, request, response, null);
}
}
示例13
private void populateAndEndSubsegment(Subsegment currentSubsegment, Request<?> request, Response<?> response) {
if (null != response) {
String requestId = null;
if (response.getAwsResponse() instanceof AmazonWebServiceResult<?>) {
// Not all services return responses extending AmazonWebServiceResult (e.g. S3)
ResponseMetadata metadata = ((AmazonWebServiceResult<?>) response.getAwsResponse()).getSdkResponseMetadata();
if (null != metadata) {
requestId = metadata.getRequestId();
if (null != requestId) {
currentSubsegment.putAws(REQUEST_ID_SUBSEGMENT_KEY, requestId);
}
}
} else if (null != response.getHttpResponse()) { // S3 does not follow request id header convention
if (null != response.getHttpResponse().getHeader(S3_REQUEST_ID_HEADER_KEY)) {
currentSubsegment.putAws(REQUEST_ID_SUBSEGMENT_KEY,
response.getHttpResponse().getHeader(S3_REQUEST_ID_HEADER_KEY));
}
if (null != response.getHttpResponse().getHeader(EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER)) {
currentSubsegment.putAws(EntityDataKeys.AWS.EXTENDED_REQUEST_ID_KEY,
response.getHttpResponse().getHeader(
EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER));
}
}
currentSubsegment.putAllAws(extractResponseParameters(request, response.getAwsResponse()));
currentSubsegment.putAllHttp(extractHttpResponseInformation(response.getHttpResponse()));
}
finalizeSubsegment(request);
}
示例14
@Override public final void afterError(Request<?> request, Response<?> response, Exception e) {
Span applicationSpan = request.getHandlerContext(APPLICATION_SPAN);
if (applicationSpan != null) {
applicationSpan.error(e);
applicationSpan.finish();
}
}
示例15
@Override
public void afterResponse(Request<?> request, Response<?> response) {
/*
* The following is a hit and miss for multi-threaded clients as the
* cache size is only 50 entries
*/
String awsRequestId = dynamoDBClient.getCachedResponseMetadata(request.getOriginalRequest()).getRequestId();
logger.info("AWS RequestID: " + awsRequestId);
/*
* Here you could inspect and alter the response object to see how your
* application behaves for specific data
*/
if (request.getOriginalRequest() instanceof GetItemRequest) {
GetItemResult result = (GetItemResult) response.getAwsResponse();
Map<String, AttributeValue> item = result.getItem();
if (item.get("name").getS().equals("Airplane")) {
// Alter the item
item.put("name", new AttributeValue("newAirplane"));
item.put("new attr", new AttributeValue("new attr"));
// Add some delay
try {
Thread.sleep(500);
}
catch (InterruptedException ie) {
logger.info(ie);
throw new RuntimeException(ie);
}
}
}
}
示例16
@Override public void afterError(final Request<?> request, final Response<?> response, final Exception e) {
if (ranBefore_) return;
if (e instanceof AmazonServiceException) {
ranBefore_ = true;
cache_.putIfAbsent(region_, client_);
}
}
示例17
/**
* Perform this request.
*/
@Override
public T perform() {
final Response<T> rsp = new AmazonHttpClient(new ClientConfiguration())
.requestExecutionBuilder()
.executionContext(new ExecutionContext(true))
.request(this.request)
.errorResponseHandler(this.errHandler)
.execute(this.respHandler);
return rsp.getAwsResponse();
}
示例18
@Override
public void collectMetrics(Request<?> request, Response<?> response) {
final AWSRequestMetrics metrics = request.getAWSRequestMetrics();
if (metrics.isEnabled()) {
final Map<String, String> allTags = getAllTags(request);
final TimingInfo timing = metrics.getTimingInfo();
for (Field counter : COUNTERS) {
Optional.ofNullable(timing.getCounter(counter.name()))
.filter(v -> v.longValue() > 0)
.ifPresent(v -> registry.counter(metricId(counter, allTags)).increment(v.longValue()));
}
for (Field timer : TIMERS) {
Optional.ofNullable(timing.getLastSubMeasurement(timer.name()))
.filter(TimingInfo::isEndTimeKnown)
.ifPresent(t -> registry.timer(metricId(timer, allTags))
.record(t.getEndTimeNano() - t.getStartTimeNano(), TimeUnit.NANOSECONDS));
}
notEmpty(metrics.getProperty(Field.ThrottleException)).ifPresent(throttleExceptions -> {
final Id throttling = metricId("throttling", allTags);
throttleExceptions.forEach(ex ->
registry.counter(throttling.withTag(TAG_THROTTLE_EXCEPTION,
ex.getClass().getSimpleName())).increment());
});
}
}
示例19
@Override
public CreateSpeechResult createSpeech(CreateSpeechRequest createSpeechRequest) throws AmazonServiceException,
AmazonClientException {
ExecutionContext executionContext = createExecutionContext(createSpeechRequest);
Request<CreateSpeechRequest> request = CreateSpeechRequestMarshallerFactory.getMarshaller(
createSpeechRequest.getMethodType()).marshall(createSpeechRequest);
CreateSpeechResultUnmarshaller unmarshaller = new CreateSpeechResultUnmarshaller();
StreamResponseHandler<CreateSpeechResult> responseHandler =
new StreamResponseHandler<CreateSpeechResult>(unmarshaller);
Response<CreateSpeechResult> response = invoke(request, responseHandler, executionContext);
return response.getAwsResponse();
}
示例20
@Override
public ListVoicesResult listVoices(ListVoicesRequest listVoicesRequest) throws AmazonServiceException,
AmazonClientException {
ExecutionContext executionContext = createExecutionContext(listVoicesRequest);
Request<ListVoicesRequest> request = ListVoicesRequestMarshallerFactory.getMarshaller(
listVoicesRequest.getMethodType()).marshall(listVoicesRequest);
Unmarshaller<ListVoicesResult, JsonUnmarshallerContext> unmarshaller = new ListVoicesResultJsonUnmarshaller();
JsonResponseHandler<ListVoicesResult> responseHandler =
new JsonResponseHandler<ListVoicesResult>(unmarshaller);
Response<ListVoicesResult> response = invoke(request, responseHandler, executionContext);
return response.getAwsResponse();
}
示例21
@Override
public GetLexiconResult getLexicon(GetLexiconRequest getLexiconRequest)
throws AmazonServiceException, AmazonClientException {
ExecutionContext executionContext = createExecutionContext(getLexiconRequest);
GetLexiconRequestMarshaller marshaller = new GetLexiconPostRequestMarshaller();
Request<GetLexiconRequest> request = marshaller.marshall(getLexiconRequest);
Unmarshaller<GetLexiconResult, JsonUnmarshallerContext> unmarshaller = new GetLexiconResultJsonUnmarshaller();
JsonResponseHandler<GetLexiconResult> responseHandler = new JsonResponseHandler<GetLexiconResult>(unmarshaller);
Response<GetLexiconResult> response = invoke(request, responseHandler, executionContext);
return response.getAwsResponse();
}
示例22
@Override
public ListLexiconsResult listLexicons() {
ListLexiconsRequest listLexiconsRequest = new ListLexiconsRequest();
ExecutionContext executionContext = createExecutionContext(listLexiconsRequest);
ListLexiconsRequestMarshaller marshaller = new ListLexiconsPostRequestMarshaller();
Request<ListLexiconsRequest> request = marshaller.marshall(listLexiconsRequest);
Unmarshaller<ListLexiconsResult, JsonUnmarshallerContext> unmarshaller =
new ListLexiconsResultJsonUnmarshaller();
JsonResponseHandler<ListLexiconsResult> responseHandler =
new JsonResponseHandler<ListLexiconsResult>(unmarshaller);
Response<ListLexiconsResult> response = invoke(request, responseHandler, executionContext);
return response.getAwsResponse();
}
示例23
private <X, Y extends AmazonWebServiceRequest> Response<X> invoke(
Request<Y> request,
HttpResponseHandler<AmazonWebServiceResponse<X>> responseHandler,
ExecutionContext executionContext) {
JsonErrorResponseHandler errorResponseHandler = new JsonErrorResponseHandler(exceptionUnmarshallers);
Response<X> result = client.execute(
prepareRequest(request, executionContext),
responseHandler,
errorResponseHandler,
executionContext);
return result;
}
示例24
@Override
public void afterResponse(Request<?> request, Response<?> response)
{
/*
* The following is a hit and miss for multi-threaded clients as the
* cache size is only 50 entries
*/
String awsRequestId = dynamoDBClient.getCachedResponseMetadata(request.getOriginalRequest()).getRequestId();
logger.info("AWS RequestID: " + awsRequestId);
/*
* Here you could inspect and alter the response object to see how your
* application behaves for specific data
*/
if (request.getOriginalRequest() instanceof GetItemRequest)
{
GetItemResult result = (GetItemResult) response.getAwsResponse();
Map<String, AttributeValue> item = result.getItem();
if (item.get("name").getS().equals("Airplane"))
{
// Alter the item
item.put("name", new AttributeValue("newAirplane"));
item.put("new attr", new AttributeValue("new attr"));
// Add some delay
try
{
Thread.sleep(500);
}
catch (InterruptedException ie)
{
logger.info(ie);
throw new RuntimeException(ie);
}
}
}
}
示例25
public static Response<JSONArray> getTestCustomers() {
final Request currenciesRequest = createRequest(HttpMethodName.GET, "/test-customers/v0");
return buildRequest(currenciesRequest).execute(new ResponseHandlerJSONArray(false));
}
示例26
public static Response<JSONArray> getCurrencyConversions(String quoteCurrency) {
final Request currenciesRequest = createRequest(HttpMethodName.GET, "/currencies/v1/convert/" + quoteCurrency);
return buildRequest(currenciesRequest).execute(new ResponseHandlerJSONArray(false));
}
示例27
public static Response<JSONObject> getCurrencyConversion(String quoteCurrency, String baseCurrency) {
final Request currenciesRequest = createRequest(HttpMethodName.GET,
"/currencies/v1/" + baseCurrency + "/convert/" + quoteCurrency);
return buildRequest(currenciesRequest).execute(new ResponseHandlerJSONObject(false));
}
示例28
@Override
public void afterError(Request<?> request, Response<?> response, Exception e) {
if (isSubsegmentDuplicate(recorder.getCurrentSubsegmentOptional(), request)) {
Optional<Subsegment> currentSubsegmentOptional = recorder.getCurrentSubsegmentOptional();
if (!currentSubsegmentOptional.isPresent()) {
return;
}
Subsegment currentSubsegment = currentSubsegmentOptional.get();
int statusCode = -1;
if (null != response) {
statusCode = response.getHttpResponse().getStatusCode();
} else {
if (e instanceof AmazonServiceException) {
AmazonServiceException ase = (AmazonServiceException) e;
statusCode = ase.getStatusCode();
// The S3 client will throw and re-swallow AmazonServiceExceptions if they have these status codes. Customers
// will never see the exceptions in their application code but they still travel through our
// TracingHandler#afterError method. We special case these status codes in order to prevent addition of the
// full exception object to the current subsegment. Instead, we'll just add any exception error message to the
// current subsegment's cause's message.
if ((304 == statusCode || 412 == statusCode) && S3_SERVICE_NAME.equals(ase.getServiceName())) {
populateAndEndSubsegment(currentSubsegment, request, response, ase);
return;
}
if (RetryUtils.isThrottlingException(ase)) {
currentSubsegment.setError(true);
currentSubsegment.setThrottle(true);
}
}
}
if (-1 != statusCode) {
int statusCodePrefix = statusCode / 100;
if (4 == statusCodePrefix) {
currentSubsegment.setError(true);
if (429 == statusCode) {
currentSubsegment.setThrottle(true);
}
}
}
currentSubsegment.addException(e);
if (e instanceof AmazonServiceException) {
populateAndEndSubsegment(currentSubsegment, request, response, (AmazonServiceException) e);
} else {
populateAndEndSubsegment(currentSubsegment, request, response);
}
}
}
示例29
@Override public final void afterResponse(Request<?> request, Response<?> response) {
Span applicationSpan = request.getHandlerContext(APPLICATION_SPAN);
if (applicationSpan != null) {
applicationSpan.finish();
}
}
示例30
@Override
public void afterError(Request<?> request, Response<?> response, Exception e) {
// TODO Auto-generated method stub
}