All Downloads are FREE. Search and download functionalities are using the official Maven repository.

macros.syncclientclass.common.ClientMethodForOperation.ftl Maven / Gradle / Ivy

<#macro content metadata operationModel customConfig>

    ${operationModel.getSyncDocumentation(metadata)!""}
    @Override

    <#if operationModel.deprecated>
        @Deprecated
    
    public ${operationModel.syncReturnType} ${operationModel.methodName}(${operationModel.input.variableType} request) {
        request = beforeClientExecution(request);
        <#if operationModel.returnType??>
            return execute${operationModel.methodName?cap_first}(request);
        <#else>
            execute${operationModel.methodName?cap_first}(request);
        
    }

    @SdkInternalApi
    final ${operationModel.syncReturnType} execute${operationModel.methodName?cap_first}(${operationModel.input.variableType} ${operationModel.input.variableName}) {

        ExecutionContext executionContext = createExecutionContext(${operationModel.input.variableName});
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<${operationModel.input.variableType}> request = null;
        Response<${operationModel.syncReturnType?cap_first}> response = null;

        <#if operationModel.input.streamPropertyName?has_content >
            final InputStream isOrig = ${operationModel.input.variableName}.get${operationModel.input.streamPropertyName?cap_first}();
        
        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                <#-- This macro is used in s3 control -->
                <#if S3ArnableFieldMacro?has_content>
                    <@S3ArnableFieldMacro.content operationModel customConfig/>
                
                request = <@RequestMarshallerCreation.content operationModel />.marshall(
                    super.beforeMarshalling(${operationModel.input.variableName}));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "${metadata.serviceId}");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "${operationModel.operationName}");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);
                <#if customConfig.s3ArnableFields??&&customConfig.s3ArnableFields["${operationModel.input.variableType}"]??>
                    request.addHandlerContext(S3ControlHandlerContextKey.S3_ARNABLE_FIELD, new S3ArnableField().withArn(arn));
                

                <#if operationModel.hasRequiresLengthInInput() >
                    request.addHandlerContext(HandlerContextKey.REQUIRES_LENGTH, Boolean.TRUE);
                
                <#if operationModel.inputShape?? && operationModel.inputShape.hasStreamingMember >
                    request.addHandlerContext(HandlerContextKey.HAS_STREAMING_INPUT, Boolean.TRUE);
                

            } finally {
                  awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            <#if operationModel.endpointDiscovery?has_content && operationModel.endpointDiscovery.required == true>
                URI cachedEndpoint = null;
                if (endpointDiscoveryEnabled) {
                    DescribeEndpointsRequest discoveryRequest = new DescribeEndpointsRequest();
                    <#if operationModel.inputShape.endpointDiscoveryMembers?has_content>
                    discoveryRequest.setOperation("${operationModel.operationName}");
                    Map discoveryIdentifiers = new HashMap();
                    <#list operationModel.inputShape.endpointDiscoveryMembers as edMember>
                    discoveryIdentifiers.put("${edMember}", ${operationModel.input.variableName}.get${edMember?cap_first}());
                    
                    discoveryRequest.setIdentifiers(discoveryIdentifiers);
                    
                    cachedEndpoint = cache.get(awsCredentialsProvider.getCredentials().getAWSAccessKeyId(), discoveryRequest, ${operationModel.endpointDiscovery.required?c}, endpoint);
                }
            
            <#if operationModel.endpointDiscovery?has_content && operationModel.endpointDiscovery.required == false>
                URI cachedEndpoint = null;
                if (endpointDiscoveryEnabled) {
                    cachedEndpoint = cache.get(awsCredentialsProvider.getCredentials().getAWSAccessKeyId(), false, endpoint);
                }
            


           <#if operationModel.endpointTrait?has_content>
               URI endpointTraitHost = null;
               if (!clientConfiguration.isDisableHostPrefixInjection()) {
                   <#local inputShape = operationModel.inputShape />
                   <#local hostPrefixProcessor = operationModel.getHostPrefixProcessor() />
                   <#list hostPrefixProcessor.c2jNames as memberName>
                       <#local memberShape = inputShape.getMemberByC2jName(memberName) />
                       ValidationUtils.assertStringNotEmpty(${operationModel.input.variableName}.${memberShape.getterMethodName}(), "${memberName}");
                       HostnameValidator.validateHostnameCompliant(${operationModel.input.variableName}.${memberShape.getterMethodName}(), "${memberName}", "${operationModel.input.variableName}");
                   

                   String hostPrefix = "${operationModel.endpointTrait.hostPrefix}";
                   String resolvedHostPrefix = String.format("${hostPrefixProcessor.hostWithStringSpecifier}"
                   <#list hostPrefixProcessor.c2jNames as memberName>
                        <#local memberShape = inputShape.getMemberByC2jName(memberName) />
                        , ${operationModel.input.variableName}.${memberShape.getterMethodName}()
                   
                        );

                   endpointTraitHost = UriResourcePathUtils.updateUriHost(endpoint, resolvedHostPrefix);
               }
           

            <#if operationModel.returnType??>
                <@ResponseHandlerCreation.content customConfig, operationModel, metadata, "new ${operationModel.syncReturnType}${metadata.unmarshallerClassSuffix}()", operationModel.returnType.returnType />
                response = <@ClientInvokeMethodInvocation.content operationModel />


                <#if customConfig.serviceClientHoldInputStream
                     && operationModel.outputShape??
                     && operationModel.outputShape.hasStreamingMember>
                    response.getAwsResponse().${operationModel.outputShape.payloadMember.setterMethodName}(
                    new com.amazonaws.util.ServiceClientHolderInputStream(response.getAwsResponse().${operationModel.outputShape.payloadMember.getterMethodName}(),
                                                     this));

                

                <#if operationModel.outputShape?? && operationModel.outputShape.hasStreamingMember >
                    request.addHandlerContext(HandlerContextKey.HAS_STREAMING_OUTPUT, Boolean.TRUE);
                

                <#-- This macro is used in glacier for wrapping the response streams -->
                <#if WrapResponseStreamMacro?has_content>
                    <@WrapResponseStreamMacro.content operationModel/>
                

                return response.getAwsResponse();
            <#else>
                <@ResponseHandlerCreation.content customConfig, operationModel, metadata, "null", "Void" />
                <@ClientInvokeMethodInvocation.content operationModel />
            

        } finally {
            <#if operationModel.input.streamPropertyName?has_content >
                // Restore the original input stream, so that the caller
                // (who is responsible) can close it
                ${operationModel.input.variableName}.set${operationModel.input.streamPropertyName?cap_first}(isOrig);
            

            endClientExecution(awsRequestMetrics, request, response);
        }
    }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy