diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingAsyncClientClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingAsyncClientClass.java index e21fbda9f88..d772f7691d8 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingAsyncClientClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingAsyncClientClass.java @@ -20,15 +20,20 @@ import static javax.lang.model.element.Modifier.ABSTRACT; import static javax.lang.model.element.Modifier.FINAL; import static javax.lang.model.element.Modifier.PRIVATE; +import static javax.lang.model.element.Modifier.PROTECTED; import static javax.lang.model.element.Modifier.PUBLIC; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.FieldSpec; import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterSpec; +import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.TypeVariableName; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.function.Function; import java.util.stream.Stream; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.codegen.model.config.customization.UtilitiesMethod; @@ -88,14 +93,9 @@ protected void addFields(TypeSpec.Builder type) { @Override protected void addAdditionalMethods(TypeSpec.Builder type) { - MethodSpec delegate = MethodSpec.methodBuilder("delegate") - .addModifiers(PUBLIC) - .addStatement("return this.delegate") - .returns(SdkClient.class) - .build(); - type.addMethod(nameMethod()) - .addMethod(delegate); + .addMethod(delegateMethod()) + .addMethod(invokeMethod()); } private MethodSpec nameMethod() { @@ -107,6 +107,34 @@ private MethodSpec nameMethod() { .build(); } + private MethodSpec delegateMethod() { + return MethodSpec.methodBuilder("delegate") + .addModifiers(PUBLIC) + .addStatement("return this.delegate") + .returns(SdkClient.class) + .build(); + } + + private MethodSpec invokeMethod() { + TypeVariableName requestTypeVariableName = + TypeVariableName.get("T", poetExtensions.getModelClass(model.getSdkRequestBaseClassName())); + + TypeVariableName responseTypeVariableName = STREAMING_TYPE_VARIABLE; + + ParameterizedTypeName functionTypeName = ParameterizedTypeName + .get(ClassName.get(Function.class), requestTypeVariableName, responseTypeVariableName); + + return MethodSpec.methodBuilder("invokeOperation") + .addModifiers(PROTECTED) + .addParameter(requestTypeVariableName, "request") + .addParameter(functionTypeName, "operation") + .addTypeVariable(requestTypeVariableName) + .addTypeVariable(responseTypeVariableName) + .returns(responseTypeVariableName) + .addStatement("return operation.apply(request)") + .build(); + } + @Override protected MethodSpec serviceClientConfigMethod() { return MethodSpec.methodBuilder("serviceClientConfiguration") @@ -164,9 +192,19 @@ protected MethodSpec.Builder operationBody(MethodSpec.Builder builder, Operation builder.addModifiers(PUBLIC) .addAnnotation(Override.class); - builder.addStatement("return delegate.$N($L)", + if (builder.parameters.size() < 1) { + throw new IllegalStateException("All client methods must have an argument"); + } + + List parameters = new ArrayList<>(builder.parameters); + String requestParameter = parameters.remove(0).name; + String additionalParameters = String.format(", %s", parameters.stream().map(p -> p.name).collect(joining(", "))); + + builder.addStatement("return invokeOperation($N, request -> delegate.$N(request$N))", + requestParameter, opModel.getMethodName(), - builder.parameters.stream().map(p -> p.name).collect(joining(", "))); + parameters.isEmpty() ? "" : additionalParameters); + return builder; } @@ -175,7 +213,9 @@ protected MethodSpec.Builder paginatedMethodBody(MethodSpec.Builder builder, Ope String methodName = PaginatorUtils.getPaginatedMethodName(opModel.getMethodName()); return builder.addModifiers(PUBLIC) .addAnnotation(Override.class) - .addStatement("return delegate.$N($N)", methodName, opModel.getInput().getVariableName()); + .addStatement("return invokeOperation($N, request -> delegate.$N(request))", + opModel.getInput().getVariableName(), + methodName); } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingSyncClientClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingSyncClientClass.java index 07278ab6928..d59802b644a 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingSyncClientClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/DelegatingSyncClientClass.java @@ -19,13 +19,20 @@ import static javax.lang.model.element.Modifier.ABSTRACT; import static javax.lang.model.element.Modifier.FINAL; import static javax.lang.model.element.Modifier.PRIVATE; +import static javax.lang.model.element.Modifier.PROTECTED; import static javax.lang.model.element.Modifier.PUBLIC; +import static software.amazon.awssdk.codegen.poet.client.AsyncClientInterface.STREAMING_TYPE_VARIABLE; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.FieldSpec; import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterSpec; +import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.TypeVariableName; +import java.util.ArrayList; import java.util.List; +import java.util.function.Function; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.codegen.docs.SimpleMethodOverload; import software.amazon.awssdk.codegen.model.config.customization.UtilitiesMethod; @@ -89,14 +96,9 @@ protected void addConsumerMethod(List specs, MethodSpec spec, Simple @Override protected void addAdditionalMethods(TypeSpec.Builder type) { - MethodSpec delegate = MethodSpec.methodBuilder("delegate") - .addModifiers(PUBLIC) - .addStatement("return this.delegate") - .returns(SdkClient.class) - .build(); - type.addMethod(nameMethod()) - .addMethod(delegate); + .addMethod(delegateMethod()) + .addMethod(invokeMethod()); } @Override @@ -125,9 +127,19 @@ protected MethodSpec.Builder operationBody(MethodSpec.Builder builder, Operation builder.addModifiers(PUBLIC) .addAnnotation(Override.class); - builder.addStatement("return delegate.$N($L)", + if (builder.parameters.size() < 1) { + throw new IllegalStateException("All client methods must have an argument"); + } + + List operationParameters = new ArrayList<>(builder.parameters); + String requestParameter = operationParameters.remove(0).name; + String additionalParameters = String.format(", %s", operationParameters.stream().map(p -> p.name).collect(joining(", "))); + + builder.addStatement("return invokeOperation($N, request -> delegate.$N(request$N))", + requestParameter, opModel.getMethodName(), - builder.parameters.stream().map(p -> p.name).collect(joining(", "))); + operationParameters.isEmpty() ? "" : additionalParameters); + return builder; } @@ -136,7 +148,9 @@ protected MethodSpec.Builder paginatedMethodBody(MethodSpec.Builder builder, Ope String methodName = PaginatorUtils.getPaginatedMethodName(opModel.getMethodName()); return builder.addModifiers(PUBLIC) .addAnnotation(Override.class) - .addStatement("return delegate.$N($N)", methodName, opModel.getInput().getVariableName()); + .addStatement("return invokeOperation($N, request -> delegate.$N(request))", + opModel.getInput().getVariableName(), + methodName); } @Override @@ -167,6 +181,34 @@ private MethodSpec nameMethod() { .build(); } + private MethodSpec delegateMethod() { + return MethodSpec.methodBuilder("delegate") + .addModifiers(PUBLIC) + .addStatement("return this.delegate") + .returns(SdkClient.class) + .build(); + } + + private MethodSpec invokeMethod() { + TypeVariableName requestTypeVariableName = + TypeVariableName.get("T", poetExtensions.getModelClass(model.getSdkRequestBaseClassName())); + + TypeVariableName responseTypeVariableName = STREAMING_TYPE_VARIABLE; + + ParameterizedTypeName functionTypeName = ParameterizedTypeName + .get(ClassName.get(Function.class), requestTypeVariableName, responseTypeVariableName); + + return MethodSpec.methodBuilder("invokeOperation") + .addModifiers(PROTECTED) + .addParameter(requestTypeVariableName, "request") + .addParameter(functionTypeName, "operation") + .addTypeVariable(requestTypeVariableName) + .addTypeVariable(responseTypeVariableName) + .returns(responseTypeVariableName) + .addStatement("return operation.apply(request)") + .build(); + } + @Override protected MethodSpec serviceClientConfigMethod() { return MethodSpec.methodBuilder("serviceClientConfiguration") diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-async-client-class.java index a8e143b21cc..edf451eb17b 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-async-client-class.java @@ -1,6 +1,7 @@ package software.amazon.awssdk.services.json; import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import org.reactivestreams.Publisher; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; @@ -25,6 +26,7 @@ import software.amazon.awssdk.services.json.model.GetWithoutRequiredMembersResponse; import software.amazon.awssdk.services.json.model.InputEventStream; import software.amazon.awssdk.services.json.model.InputEventStreamTwo; +import software.amazon.awssdk.services.json.model.JsonRequest; import software.amazon.awssdk.services.json.model.OperationWithChecksumRequiredRequest; import software.amazon.awssdk.services.json.model.OperationWithChecksumRequiredResponse; import software.amazon.awssdk.services.json.model.PaginatedOperationWithResultKeyRequest; @@ -86,7 +88,7 @@ public JsonUtilities utilities() { */ @Override public CompletableFuture aPostOperation(APostOperationRequest aPostOperationRequest) { - return delegate.aPostOperation(aPostOperationRequest); + return invokeOperation(aPostOperationRequest, request -> delegate.aPostOperation(request)); } /** @@ -115,7 +117,7 @@ public CompletableFuture aPostOperation(APostOperationRe @Override public CompletableFuture aPostOperationWithOutput( APostOperationWithOutputRequest aPostOperationWithOutputRequest) { - return delegate.aPostOperationWithOutput(aPostOperationWithOutputRequest); + return invokeOperation(aPostOperationWithOutputRequest, request -> delegate.aPostOperationWithOutput(request)); } /** @@ -140,7 +142,7 @@ public CompletableFuture aPostOperationWithOut @Override public CompletableFuture bearerAuthOperation( BearerAuthOperationRequest bearerAuthOperationRequest) { - return delegate.bearerAuthOperation(bearerAuthOperationRequest); + return invokeOperation(bearerAuthOperationRequest, request -> delegate.bearerAuthOperation(request)); } /** @@ -165,7 +167,8 @@ public CompletableFuture bearerAuthOperation( @Override public CompletableFuture eventStreamOperation(EventStreamOperationRequest eventStreamOperationRequest, Publisher requestStream, EventStreamOperationResponseHandler asyncResponseHandler) { - return delegate.eventStreamOperation(eventStreamOperationRequest, requestStream, asyncResponseHandler); + return invokeOperation(eventStreamOperationRequest, + request -> delegate.eventStreamOperation(request, requestStream, asyncResponseHandler)); } /** @@ -192,7 +195,8 @@ public CompletableFuture eventStreamOperation(EventStreamOperationRequest public CompletableFuture eventStreamOperationWithOnlyInput( EventStreamOperationWithOnlyInputRequest eventStreamOperationWithOnlyInputRequest, Publisher requestStream) { - return delegate.eventStreamOperationWithOnlyInput(eventStreamOperationWithOnlyInputRequest, requestStream); + return invokeOperation(eventStreamOperationWithOnlyInputRequest, + request -> delegate.eventStreamOperationWithOnlyInput(request, requestStream)); } /** @@ -219,7 +223,8 @@ public CompletableFuture eventStreamO public CompletableFuture eventStreamOperationWithOnlyOutput( EventStreamOperationWithOnlyOutputRequest eventStreamOperationWithOnlyOutputRequest, EventStreamOperationWithOnlyOutputResponseHandler asyncResponseHandler) { - return delegate.eventStreamOperationWithOnlyOutput(eventStreamOperationWithOnlyOutputRequest, asyncResponseHandler); + return invokeOperation(eventStreamOperationWithOnlyOutputRequest, + request -> delegate.eventStreamOperationWithOnlyOutput(request, asyncResponseHandler)); } /** @@ -244,7 +249,7 @@ public CompletableFuture eventStreamOperationWithOnlyOutput( @Override public CompletableFuture getOperationWithChecksum( GetOperationWithChecksumRequest getOperationWithChecksumRequest) { - return delegate.getOperationWithChecksum(getOperationWithChecksumRequest); + return invokeOperation(getOperationWithChecksumRequest, request -> delegate.getOperationWithChecksum(request)); } /** @@ -273,7 +278,7 @@ public CompletableFuture getOperationWithCheck @Override public CompletableFuture getWithoutRequiredMembers( GetWithoutRequiredMembersRequest getWithoutRequiredMembersRequest) { - return delegate.getWithoutRequiredMembers(getWithoutRequiredMembersRequest); + return invokeOperation(getWithoutRequiredMembersRequest, request -> delegate.getWithoutRequiredMembers(request)); } /** @@ -299,7 +304,7 @@ public CompletableFuture getWithoutRequiredMe @Override public CompletableFuture operationWithChecksumRequired( OperationWithChecksumRequiredRequest operationWithChecksumRequiredRequest) { - return delegate.operationWithChecksumRequired(operationWithChecksumRequiredRequest); + return invokeOperation(operationWithChecksumRequiredRequest, request -> delegate.operationWithChecksumRequired(request)); } /** @@ -325,7 +330,8 @@ public CompletableFuture operationWithChe @Override public CompletableFuture paginatedOperationWithResultKey( PaginatedOperationWithResultKeyRequest paginatedOperationWithResultKeyRequest) { - return delegate.paginatedOperationWithResultKey(paginatedOperationWithResultKeyRequest); + return invokeOperation(paginatedOperationWithResultKeyRequest, + request -> delegate.paginatedOperationWithResultKey(request)); } /** @@ -403,7 +409,8 @@ public CompletableFuture paginatedOpera @Override public PaginatedOperationWithResultKeyPublisher paginatedOperationWithResultKeyPaginator( PaginatedOperationWithResultKeyRequest paginatedOperationWithResultKeyRequest) { - return delegate.paginatedOperationWithResultKeyPaginator(paginatedOperationWithResultKeyRequest); + return invokeOperation(paginatedOperationWithResultKeyRequest, + request -> delegate.paginatedOperationWithResultKeyPaginator(request)); } /** @@ -429,7 +436,8 @@ public PaginatedOperationWithResultKeyPublisher paginatedOperationWithResultKeyP @Override public CompletableFuture paginatedOperationWithoutResultKey( PaginatedOperationWithoutResultKeyRequest paginatedOperationWithoutResultKeyRequest) { - return delegate.paginatedOperationWithoutResultKey(paginatedOperationWithoutResultKeyRequest); + return invokeOperation(paginatedOperationWithoutResultKeyRequest, + request -> delegate.paginatedOperationWithoutResultKey(request)); } /** @@ -507,7 +515,8 @@ public CompletableFuture paginatedOp @Override public PaginatedOperationWithoutResultKeyPublisher paginatedOperationWithoutResultKeyPaginator( PaginatedOperationWithoutResultKeyRequest paginatedOperationWithoutResultKeyRequest) { - return delegate.paginatedOperationWithoutResultKeyPaginator(paginatedOperationWithoutResultKeyRequest); + return invokeOperation(paginatedOperationWithoutResultKeyRequest, + request -> delegate.paginatedOperationWithoutResultKeyPaginator(request)); } /** @@ -551,7 +560,8 @@ public PaginatedOperationWithoutResultKeyPublisher paginatedOperationWithoutResu public CompletableFuture putOperationWithChecksum( PutOperationWithChecksumRequest putOperationWithChecksumRequest, AsyncRequestBody requestBody, AsyncResponseTransformer asyncResponseTransformer) { - return delegate.putOperationWithChecksum(putOperationWithChecksumRequest, requestBody, asyncResponseTransformer); + return invokeOperation(putOperationWithChecksumRequest, + request -> delegate.putOperationWithChecksum(request, requestBody, asyncResponseTransformer)); } /** @@ -581,7 +591,7 @@ public CompletableFuture putOperationWithChecksum( @Override public CompletableFuture streamingInputOperation( StreamingInputOperationRequest streamingInputOperationRequest, AsyncRequestBody requestBody) { - return delegate.streamingInputOperation(streamingInputOperationRequest, requestBody); + return invokeOperation(streamingInputOperationRequest, request -> delegate.streamingInputOperation(request, requestBody)); } /** @@ -617,8 +627,8 @@ public CompletableFuture streamingInputOperatio public CompletableFuture streamingInputOutputOperation( StreamingInputOutputOperationRequest streamingInputOutputOperationRequest, AsyncRequestBody requestBody, AsyncResponseTransformer asyncResponseTransformer) { - return delegate - .streamingInputOutputOperation(streamingInputOutputOperationRequest, requestBody, asyncResponseTransformer); + return invokeOperation(streamingInputOutputOperationRequest, + request -> delegate.streamingInputOutputOperation(request, requestBody, asyncResponseTransformer)); } /** @@ -649,7 +659,8 @@ public CompletableFuture streamingInputOutputOperation( public CompletableFuture streamingOutputOperation( StreamingOutputOperationRequest streamingOutputOperationRequest, AsyncResponseTransformer asyncResponseTransformer) { - return delegate.streamingOutputOperation(streamingOutputOperationRequest, asyncResponseTransformer); + return invokeOperation(streamingOutputOperationRequest, + request -> delegate.streamingOutputOperation(request, asyncResponseTransformer)); } @Override @@ -666,6 +677,10 @@ public SdkClient delegate() { return this.delegate; } + protected ReturnT invokeOperation(T request, Function operation) { + return operation.apply(request); + } + @Override public void close() { delegate.close(); diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-sync-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-sync-client-class.java index 4d6847402dc..6a125e955d5 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-sync-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-abstract-sync-client-class.java @@ -1,6 +1,7 @@ package software.amazon.awssdk.services.json; import java.nio.file.Path; +import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.awscore.exception.AwsServiceException; @@ -22,6 +23,7 @@ import software.amazon.awssdk.services.json.model.GetWithoutRequiredMembersResponse; import software.amazon.awssdk.services.json.model.InvalidInputException; import software.amazon.awssdk.services.json.model.JsonException; +import software.amazon.awssdk.services.json.model.JsonRequest; import software.amazon.awssdk.services.json.model.OperationWithChecksumRequiredRequest; import software.amazon.awssdk.services.json.model.OperationWithChecksumRequiredResponse; import software.amazon.awssdk.services.json.model.PaginatedOperationWithResultKeyRequest; @@ -76,7 +78,7 @@ public DelegatingJsonClient(JsonClient delegate) { @Deprecated public APostOperationResponse aPostOperation(APostOperationRequest aPostOperationRequest) throws InvalidInputException, AwsServiceException, SdkClientException, JsonException { - return delegate.aPostOperation(aPostOperationRequest); + return invokeOperation(aPostOperationRequest, request -> delegate.aPostOperation(request)); } /** @@ -103,7 +105,7 @@ public APostOperationResponse aPostOperation(APostOperationRequest aPostOperatio public APostOperationWithOutputResponse aPostOperationWithOutput( APostOperationWithOutputRequest aPostOperationWithOutputRequest) throws InvalidInputException, AwsServiceException, SdkClientException, JsonException { - return delegate.aPostOperationWithOutput(aPostOperationWithOutputRequest); + return invokeOperation(aPostOperationWithOutputRequest, request -> delegate.aPostOperationWithOutput(request)); } /** @@ -125,7 +127,7 @@ public APostOperationWithOutputResponse aPostOperationWithOutput( @Override public BearerAuthOperationResponse bearerAuthOperation(BearerAuthOperationRequest bearerAuthOperationRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.bearerAuthOperation(bearerAuthOperationRequest); + return invokeOperation(bearerAuthOperationRequest, request -> delegate.bearerAuthOperation(request)); } /** @@ -148,7 +150,7 @@ public BearerAuthOperationResponse bearerAuthOperation(BearerAuthOperationReques public GetOperationWithChecksumResponse getOperationWithChecksum( GetOperationWithChecksumRequest getOperationWithChecksumRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.getOperationWithChecksum(getOperationWithChecksumRequest); + return invokeOperation(getOperationWithChecksumRequest, request -> delegate.getOperationWithChecksum(request)); } /** @@ -175,7 +177,7 @@ public GetOperationWithChecksumResponse getOperationWithChecksum( public GetWithoutRequiredMembersResponse getWithoutRequiredMembers( GetWithoutRequiredMembersRequest getWithoutRequiredMembersRequest) throws InvalidInputException, AwsServiceException, SdkClientException, JsonException { - return delegate.getWithoutRequiredMembers(getWithoutRequiredMembersRequest); + return invokeOperation(getWithoutRequiredMembersRequest, request -> delegate.getWithoutRequiredMembers(request)); } /** @@ -198,7 +200,7 @@ public GetWithoutRequiredMembersResponse getWithoutRequiredMembers( public OperationWithChecksumRequiredResponse operationWithChecksumRequired( OperationWithChecksumRequiredRequest operationWithChecksumRequiredRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.operationWithChecksumRequired(operationWithChecksumRequiredRequest); + return invokeOperation(operationWithChecksumRequiredRequest, request -> delegate.operationWithChecksumRequired(request)); } /** @@ -243,7 +245,8 @@ public PaginatedOperationWithResultKeyResponse paginatedOperationWithResultKey() public PaginatedOperationWithResultKeyResponse paginatedOperationWithResultKey( PaginatedOperationWithResultKeyRequest paginatedOperationWithResultKeyRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.paginatedOperationWithResultKey(paginatedOperationWithResultKeyRequest); + return invokeOperation(paginatedOperationWithResultKeyRequest, + request -> delegate.paginatedOperationWithResultKey(request)); } /** @@ -398,7 +401,8 @@ public PaginatedOperationWithResultKeyIterable paginatedOperationWithResultKeyPa public PaginatedOperationWithResultKeyIterable paginatedOperationWithResultKeyPaginator( PaginatedOperationWithResultKeyRequest paginatedOperationWithResultKeyRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.paginatedOperationWithResultKeyPaginator(paginatedOperationWithResultKeyRequest); + return invokeOperation(paginatedOperationWithResultKeyRequest, + request -> delegate.paginatedOperationWithResultKeyPaginator(request)); } /** @@ -421,7 +425,8 @@ public PaginatedOperationWithResultKeyIterable paginatedOperationWithResultKeyPa public PaginatedOperationWithoutResultKeyResponse paginatedOperationWithoutResultKey( PaginatedOperationWithoutResultKeyRequest paginatedOperationWithoutResultKeyRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.paginatedOperationWithoutResultKey(paginatedOperationWithoutResultKeyRequest); + return invokeOperation(paginatedOperationWithoutResultKeyRequest, + request -> delegate.paginatedOperationWithoutResultKey(request)); } /** @@ -499,7 +504,8 @@ public PaginatedOperationWithoutResultKeyResponse paginatedOperationWithoutResul public PaginatedOperationWithoutResultKeyIterable paginatedOperationWithoutResultKeyPaginator( PaginatedOperationWithoutResultKeyRequest paginatedOperationWithoutResultKeyRequest) throws AwsServiceException, SdkClientException, JsonException { - return delegate.paginatedOperationWithoutResultKeyPaginator(paginatedOperationWithoutResultKeyRequest); + return invokeOperation(paginatedOperationWithoutResultKeyRequest, + request -> delegate.paginatedOperationWithoutResultKeyPaginator(request)); } /** @@ -548,7 +554,8 @@ public PaginatedOperationWithoutResultKeyIterable paginatedOperationWithoutResul public ReturnT putOperationWithChecksum(PutOperationWithChecksumRequest putOperationWithChecksumRequest, RequestBody requestBody, ResponseTransformer responseTransformer) throws AwsServiceException, SdkClientException, JsonException { - return delegate.putOperationWithChecksum(putOperationWithChecksumRequest, requestBody, responseTransformer); + return invokeOperation(putOperationWithChecksumRequest, + request -> delegate.putOperationWithChecksum(request, requestBody, responseTransformer)); } /** @@ -624,7 +631,7 @@ public PutOperationWithChecksumResponse putOperationWithChecksum( @Override public StreamingInputOperationResponse streamingInputOperation(StreamingInputOperationRequest streamingInputOperationRequest, RequestBody requestBody) throws AwsServiceException, SdkClientException, JsonException { - return delegate.streamingInputOperation(streamingInputOperationRequest, requestBody); + return invokeOperation(streamingInputOperationRequest, request -> delegate.streamingInputOperation(request, requestBody)); } /** @@ -694,7 +701,8 @@ public ReturnT streamingInputOutputOperation( StreamingInputOutputOperationRequest streamingInputOutputOperationRequest, RequestBody requestBody, ResponseTransformer responseTransformer) throws AwsServiceException, SdkClientException, JsonException { - return delegate.streamingInputOutputOperation(streamingInputOutputOperationRequest, requestBody, responseTransformer); + return invokeOperation(streamingInputOutputOperationRequest, + request -> delegate.streamingInputOutputOperation(request, requestBody, responseTransformer)); } /** @@ -759,7 +767,8 @@ public StreamingInputOutputOperationResponse streamingInputOutputOperation( public ReturnT streamingOutputOperation(StreamingOutputOperationRequest streamingOutputOperationRequest, ResponseTransformer responseTransformer) throws AwsServiceException, SdkClientException, JsonException { - return delegate.streamingOutputOperation(streamingOutputOperationRequest, responseTransformer); + return invokeOperation(streamingOutputOperationRequest, + request -> delegate.streamingOutputOperation(request, responseTransformer)); } /** @@ -863,6 +872,10 @@ public SdkClient delegate() { return this.delegate; } + protected ReturnT invokeOperation(T request, Function operation) { + return operation.apply(request); + } + @Override public final JsonServiceClientConfiguration serviceClientConfiguration() { return delegate.serviceClientConfiguration();