Java源码示例:software.amazon.awssdk.awscore.AwsResponse
示例1
<O extends AwsResponse, R extends AwsRequest, S> void enrichSimple(
Asset asset, String key, Function<R, O> function, Function<O, S> valueFunction, R builder) {
try {
var response = function.apply(builder);
asset.setProperty(key, valueFunction.apply(response));
} catch (AwsServiceException ex) {
// ignore if error is 404, since this just means that the value is empty
if (ex.awsErrorDetails().sdkHttpResponse().statusCode() != 404) {
LOGGER.info(
"Got exception from {} while retrieving info for {}: {}",
this.getClass(),
key,
ex.getMessage());
}
}
}
示例2
<O extends AwsResponse, R extends AwsRequest, S extends ToCopyableBuilder> void enrich(
AssetProperties properties,
String key,
Function<R, O> listFunction,
Function<O, S> valueFunction,
R builder) {
try {
var response = listFunction.apply(builder);
properties.put(
key,
MAPPER.convertValue(valueFunction.apply(response).toBuilder(), AssetProperties.class));
} catch (AwsServiceException ex) {
// ignore if error is 404, since this just means that the value is empty
if (ex.statusCode() != 404) {
LOGGER.info(
"Got exception from {} while retrieving info for {}: {}",
this.getClass(),
key,
ex.getMessage());
}
}
}
示例3
public <RequestT extends AwsRequest, ResultT extends AwsResponse>
ResultT
injectCredentialsAndInvokeV2(final RequestT request, final Function<RequestT, ResultT> requestFunction) {
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
.credentialsProvider(v2CredentialsProvider).build();
@SuppressWarnings("unchecked")
RequestT wrappedRequest = (RequestT) request.toBuilder().overrideConfiguration(overrideConfiguration).build();
try {
ResultT response = requestFunction.apply(wrappedRequest);
logRequestMetadataV2(request, response);
return response;
} catch (final Throwable e) {
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
throw e;
}
}
示例4
public <RequestT extends AwsRequest, ResultT extends AwsResponse>
CompletableFuture<ResultT>
injectCredentialsAndInvokeV2Async(final RequestT request,
final Function<RequestT, CompletableFuture<ResultT>> requestFunction) {
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
.credentialsProvider(v2CredentialsProvider).build();
@SuppressWarnings("unchecked")
RequestT wrappedRequest = (RequestT) request.toBuilder().overrideConfiguration(overrideConfiguration).build();
try {
CompletableFuture<ResultT> response = requestFunction.apply(wrappedRequest).thenApplyAsync(resultT -> {
logRequestMetadataV2(request, resultT);
return resultT;
});
return response;
} catch (final Throwable e) {
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
throw e;
}
}
示例5
public <RequestT extends AwsRequest, ResultT extends AwsResponse, IterableT extends SdkIterable<ResultT>>
IterableT
injectCredentialsAndInvokeIterableV2(final RequestT request, final Function<RequestT, IterableT> requestFunction) {
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
.credentialsProvider(v2CredentialsProvider).build();
@SuppressWarnings("unchecked")
RequestT wrappedRequest = (RequestT) request.toBuilder().overrideConfiguration(overrideConfiguration).build();
try {
IterableT response = requestFunction.apply(wrappedRequest);
response.forEach(r -> logRequestMetadataV2(request, r));
return response;
} catch (final Throwable e) {
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
throw e;
}
}
示例6
public <RequestT extends AwsRequest, ResultT extends AwsResponse>
ResponseInputStream<ResultT>
injectCredentialsAndInvokeV2InputStream(final RequestT request,
final Function<RequestT, ResponseInputStream<ResultT>> requestFunction) {
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
.credentialsProvider(v2CredentialsProvider).build();
@SuppressWarnings("unchecked")
RequestT wrappedRequest = (RequestT) request.toBuilder().overrideConfiguration(overrideConfiguration).build();
try {
ResponseInputStream<ResultT> response = requestFunction.apply(wrappedRequest);
logRequestMetadataV2(request, response.response());
return response;
} catch (final Throwable e) {
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
throw e;
}
}
示例7
public <RequestT extends AwsRequest, ResultT extends AwsResponse>
ResponseBytes<ResultT>
injectCredentialsAndInvokeV2Bytes(final RequestT request,
final Function<RequestT, ResponseBytes<ResultT>> requestFunction) {
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
.credentialsProvider(v2CredentialsProvider).build();
@SuppressWarnings("unchecked")
RequestT wrappedRequest = (RequestT) request.toBuilder().overrideConfiguration(overrideConfiguration).build();
try {
ResponseBytes<ResultT> response = requestFunction.apply(wrappedRequest);
logRequestMetadataV2(request, response.response());
return response;
} catch (final Throwable e) {
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
throw e;
}
}
示例8
@Override
public TypeSpec poetSpec() {
MethodSpec.Builder constructorBuilder =
MethodSpec.constructorBuilder()
.addModifiers(Modifier.PROTECTED)
.addParameter(className().nestedClass("Builder"), "builder")
.addStatement("super(builder)");
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className())
.addAnnotation(PoetUtils.generatedAnnotation())
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.superclass(ClassName.get(AwsResponse.class))
.addType(builderInterfaceSpec())
.addType(builderImplSpec());
addResponseMetadata(classBuilder, constructorBuilder);
classBuilder.addMethod(constructorBuilder.build());
return classBuilder.build();
}
示例9
private TypeSpec builderImplSpec() {
MethodSpec.Builder constructorBuilder = MethodSpec.constructorBuilder()
.addModifiers(Modifier.PROTECTED)
.addParameter(className(), "response")
.addStatement("super(response)")
.addStatement("this.responseMetadata = response.responseMetadata()");
TypeSpec.Builder classBuilder = TypeSpec.classBuilder("BuilderImpl")
.addModifiers(Modifier.PROTECTED, Modifier.STATIC, Modifier.ABSTRACT)
.addSuperinterface(className().nestedClass("Builder"))
.superclass(ClassName.get(AwsResponse.class).nestedClass("BuilderImpl"))
.addMethod(MethodSpec.constructorBuilder()
.addModifiers(Modifier.PROTECTED)
.build())
.addMethod(constructorBuilder.build());
addResponseMetadataToImpl(classBuilder);
return classBuilder.build();
}
示例10
<O extends AwsResponse, R extends AwsRequest, S extends ToCopyableBuilder> void enrich(
Asset asset,
String key,
Function<R, O> listFunction,
Function<O, S> valueFunction,
R builder) {
this.enrich(asset.getProperties(), key, listFunction, valueFunction, builder);
}
示例11
<O extends AwsResponse, R extends AwsRequest, S extends ToCopyableBuilder> void enrichList(
Asset asset,
String key,
Function<R, O> listFunction,
Function<O, List<S>> valueFunction,
R builder) {
try {
var response = listFunction.apply(builder);
var list = valueFunction.apply(response);
asset.setProperty(
key,
list.stream()
.map(x -> MAPPER.convertValue(x.toBuilder(), AssetProperties.class))
.collect(Collectors.toList()));
} catch (AwsServiceException ex) {
// ignore if error is 404, since this just means that the value is empty
if (ex.statusCode() != 404) {
LOGGER.info(
"Got exception from {} while retrieving info for {}: {}",
this.getClass(),
key,
ex.getMessage());
}
}
}
示例12
/**
* Translates resource object from sdk into a resource model
* @param awsResponse the aws service describe resource response
* @return model resource model
*/
static ResourceModel translateFromReadResponse(final AwsResponse awsResponse) {
// e.g. https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs/blob/2077c92299aeb9a68ae8f4418b5e932b12a8b186/aws-logs-loggroup/src/main/java/com/aws/logs/loggroup/Translator.java#L58-L73
return ResourceModel.builder()
//.someProperty(response.property())
.build();
}
示例13
/**
* Translates resource objects from sdk into a resource model (primary identifier only)
* @param awsResponse the aws service describe resource response
* @return list of resource models
*/
static List<ResourceModel> translateFromListRequest(final AwsResponse awsResponse) {
// e.g. https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs/blob/2077c92299aeb9a68ae8f4418b5e932b12a8b186/aws-logs-loggroup/src/main/java/com/aws/logs/loggroup/Translator.java#L75-L82
return streamOfOrEmpty(Lists.newArrayList())
.map(resource -> ResourceModel.builder()
// include only primary identifier
.build())
.collect(Collectors.toList());
}
示例14
private <RequestT extends AwsRequest, ResultT extends AwsResponse> void logRequestMetadataV2(final RequestT request,
final ResultT response) {
try {
String requestName = request.getClass().getSimpleName();
String requestId = (response == null || response.responseMetadata() == null)
? ""
: response.responseMetadata().requestId();
loggerProxy
.log(String.format("{\"apiRequest\": {\"requestId\": \"%s\", \"requestName\": \"%s\"}}", requestId, requestName));
} catch (final Exception e) {
loggerProxy.log(e.getMessage());
}
}
示例15
@Test
public <ResultT extends AwsResponse, IterableT extends SdkIterable<ResultT>> void testInjectCredentialsAndInvokeV2Iterable() {
final LoggerProxy loggerProxy = mock(LoggerProxy.class);
final Credentials credentials = new Credentials("accessKeyId", "secretAccessKey", "sessionToken");
final ListObjectsV2Iterable response = mock(ListObjectsV2Iterable.class);
final AmazonWebServicesClientProxy proxy = new AmazonWebServicesClientProxy(loggerProxy, credentials, () -> 1000L);
final software.amazon.awssdk.services.s3.model.ListObjectsV2Request wrappedRequest = mock(
software.amazon.awssdk.services.s3.model.ListObjectsV2Request.class);
final software.amazon.awssdk.services.s3.model.ListObjectsV2Request.Builder builder = mock(
software.amazon.awssdk.services.s3.model.ListObjectsV2Request.Builder.class);
when(builder.overrideConfiguration(any(AwsRequestOverrideConfiguration.class))).thenReturn(builder);
when(builder.build()).thenReturn(wrappedRequest);
final software.amazon.awssdk.services.s3.model.ListObjectsV2Request request = mock(
software.amazon.awssdk.services.s3.model.ListObjectsV2Request.class);
when(request.toBuilder()).thenReturn(builder);
final S3Client client = mock(S3Client.class);
when(client.listObjectsV2Paginator(any(software.amazon.awssdk.services.s3.model.ListObjectsV2Request.class)))
.thenReturn(response);
final ListObjectsV2Iterable result = proxy.injectCredentialsAndInvokeIterableV2(request, client::listObjectsV2Paginator);
// verify request is rebuilt for injection
verify(request).toBuilder();
// verify the wrapped request is sent over the initiate
verify(client).listObjectsV2Paginator(wrappedRequest);
// ensure the return type matches
assertThat(result).isEqualTo(response);
}
示例16
private String extractRequestIdFromResponse(SdkResponse response) {
if (response instanceof AwsResponse) {
return ((AwsResponse) response).responseMetadata().requestId();
}
return null;
}
示例17
private TypeSpec builderInterfaceSpec() {
TypeSpec.Builder builder = TypeSpec.interfaceBuilder("Builder")
.addModifiers(Modifier.PUBLIC)
.addSuperinterface(ClassName.get(AwsResponse.class).nestedClass("Builder"))
.addMethod(MethodSpec.methodBuilder("build")
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.returns(className())
.build());
addResponseMetadataToInterface(builder);
return builder.build();
}
示例18
public String getSdkBaseResponseFqcn() {
if (metadata.getProtocol() == Protocol.API_GATEWAY) {
return "software.amazon.awssdk.opensdk.BaseResult";
} else {
return String.format("%s<%s>",
AwsResponse.class.getName(),
getResponseMetadataClassName());
}
}
示例19
private <T extends AwsResponse> HttpResponseHandler<Response<T>> createErrorCouldBeInBodyResponseHandler(
Supplier<SdkPojo> pojoSupplier, XmlOperationMetadata staxOperationMetadata) {
return new AwsXmlPredicatedResponseHandler<>(r -> pojoSupplier.get(),
createResponseTransformer(pojoSupplier),
createErrorTransformer(),
DecorateErrorFromResponseBodyUnmarshaller.of(this::getErrorRoot),
staxOperationMetadata.isHasStreamingSuccessResponse());
}
示例20
@Override
@SuppressWarnings("unchecked")
public T handle(SdkHttpFullResponse response, ExecutionAttributes executionAttributes) throws Exception {
T result = responseHandler.handle(response, executionAttributes);
// As T is not bounded to AwsResponse, we need to do explicitly cast here.
if (result instanceof AwsResponse) {
AwsResponseMetadata responseMetadata = generateResponseMetadata(response);
return (T) ((AwsResponse) result).toBuilder().responseMetadata(responseMetadata).build();
}
return result;
}
示例21
protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<SdkClient> proxyClient,
final Logger logger) {
this.logger = logger;
// TODO: Adjust Progress Chain according to your implementation
// https://github.com/aws-cloudformation/cloudformation-cli-java-plugin/blob/master/src/main/java/software/amazon/cloudformation/proxy/CallChain.java
// STEP 1 [initialize a proxy context]
return proxy.initiate("{{ call_graph }}::{{ operation }}", proxyClient, request.getDesiredResourceState(), callbackContext)
// STEP 2 [TODO: construct a body of a request]
.translateToServiceRequest(Translator::translateToReadRequest)
// STEP 3 [TODO: make an api call]
// Implement client invocation of the read request through the proxyClient, which is already initialised with
// caller credentials, correct region and retry settings
.makeServiceCall((awsRequest, client) -> {
AwsResponse awsResponse = null;
try {
// TODO: add custom read resource logic
} catch (final AwsServiceException e) { // ResourceNotFoundException
/*
* While the handler contract states that the handler must always return a progress event,
* you may throw any instance of BaseHandlerException, as the wrapper map it to a progress event.
* Each BaseHandlerException maps to a specific error code, and you should map service exceptions as closely as possible
* to more specific error codes
*/
throw new CfnGeneralServiceException(ResourceModel.TYPE_NAME, e); // e.g. https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs/commit/2077c92299aeb9a68ae8f4418b5e932b12a8b186#diff-5761e3a9f732dc1ef84103dc4bc93399R56-R63
}
logger.log(String.format("%s has successfully been read.", ResourceModel.TYPE_NAME));
return awsResponse;
})
// STEP 4 [TODO: gather all properties of the resource]
// Implement client invocation of the read request through the proxyClient, which is already initialised with
// caller credentials, correct region and retry settings
.done(awsResponse -> ProgressEvent.defaultSuccessHandler(Translator.translateFromReadResponse(awsResponse)));
}
示例22
private void verifySdkHttpResponse(AwsResponse response) {
SdkHttpResponse sdkHttpResponse = response.sdkHttpResponse();
assertThat(sdkHttpResponse.statusCode()).isEqualTo(200);
assertThat(sdkHttpResponse.statusText().get()).isEqualTo(STATUS_TEXT);
EXPECTED_HEADERS.entrySet().forEach(entry -> assertThat(sdkHttpResponse.headers()).contains(entry));
}
示例23
public <T extends AwsResponse> HttpResponseHandler<T> createResponseHandler(Supplier<SdkPojo> pojoSupplier,
XmlOperationMetadata staxOperationMetadata) {
return new AwsXmlResponseHandler<>(
XML_PROTOCOL_UNMARSHALLER, r -> pojoSupplier.get(),
staxOperationMetadata.isHasStreamingSuccessResponse());
}
示例24
protected <T extends AwsResponse> Function<AwsXmlUnmarshallingContext, T> createResponseTransformer(
Supplier<SdkPojo> pojoSupplier) {
return new AwsXmlResponseTransformer<>(
XML_PROTOCOL_UNMARSHALLER, r -> pojoSupplier.get());
}
示例25
public <T extends AwsResponse> HttpResponseHandler<Response<T>> createCombinedResponseHandler(
Supplier<SdkPojo> pojoSupplier, XmlOperationMetadata staxOperationMetadata) {
return new CombinedResponseHandler<>(createResponseHandler(pojoSupplier, staxOperationMetadata),
createErrorResponseHandler());
}
示例26
@Override
public <T extends AwsResponse> HttpResponseHandler<Response<T>> createCombinedResponseHandler(
Supplier<SdkPojo> pojoSupplier, XmlOperationMetadata staxOperationMetadata) {
return createErrorCouldBeInBodyResponseHandler(pojoSupplier, staxOperationMetadata);
}
示例27
/**
* This is a synchronous version of making API calls which implement
* ResponseInputStream in the SDKv2
*
* @param request, the AWS service request that we need to make
* @param requestFunction, this is a Lambda closure that provide the actual API
* that needs to be invoked.
* @param <RequestT> the request type
* @param <ResponseT> the response from the request
* @return the response if successful. Else it will propagate all
* {@link software.amazon.awssdk.awscore.exception.AwsServiceException}
* that is thrown or
* {@link software.amazon.awssdk.core.exception.SdkClientException} if
* there is client side problem
*/
default <RequestT extends AwsRequest, ResponseT extends AwsResponse>
ResponseInputStream<ResponseT>
injectCredentialsAndInvokeV2InputStream(RequestT request,
Function<RequestT, ResponseInputStream<ResponseT>> requestFunction) {
throw new UnsupportedOperationException();
}
示例28
/**
* Creates the success response handler to unmarshall the response into a POJO.
*
* @param pojoSupplier Supplier of the POJO builder we are unmarshalling into.
* @param <T> Type being unmarshalled.
* @return New {@link HttpResponseHandler} for success responses.
*/
public final <T extends AwsResponse> HttpResponseHandler<T> createResponseHandler(Supplier<SdkPojo> pojoSupplier) {
return new AwsQueryResponseHandler<>(QueryProtocolUnmarshaller.builder()
.hasResultWrapper(!isEc2())
.build(),
r -> pojoSupplier.get());
}
示例29
/**
* This is the synchronous version of making API calls.
*
* @param request, the AWS service request that we need to make
* @param requestFunction, this is a Lambda closure that provide the actual API
* that needs to be invoked.
* @param <RequestT> the request type
* @param <ResponseT> the response from the request
* @return the response if successful. Else it will propagate all
* {@link software.amazon.awssdk.awscore.exception.AwsServiceException}
* that is thrown or
* {@link software.amazon.awssdk.core.exception.SdkClientException} if
* there is client side problem
*
*/
<RequestT extends AwsRequest, ResponseT extends AwsResponse>
ResponseT
injectCredentialsAndInvokeV2(RequestT request, Function<RequestT, ResponseT> requestFunction);
示例30
/**
* This is the asynchronous version of making API calls.
*
* @param request, the AWS service request that we need to make
* @param requestFunction, this is a Lambda closure that provide the actual API
* that needs to be invoked.
* @param <RequestT> the request type
* @param <ResponseT> the response from the request
* @return the response if successful. Else it will propagate all
* {@link software.amazon.awssdk.awscore.exception.AwsServiceException}
* that is thrown or
* {@link software.amazon.awssdk.core.exception.SdkClientException} if
* there is client side problem
*/
default <RequestT extends AwsRequest, ResponseT extends AwsResponse>
CompletableFuture<ResponseT>
injectCredentialsAndInvokeV2Async(RequestT request, Function<RequestT, CompletableFuture<ResponseT>> requestFunction) {
throw new UnsupportedOperationException();
}