@SdkInternalApi
    final ListKeyGroupsResult executeListKeyGroups(ListKeyGroupsRequest listKeyGroupsRequest) {

        ExecutionContext executionContext = createExecutionContext(listKeyGroupsRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<ListKeyGroupsRequest> request = null;
        Response<ListKeyGroupsResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new ListKeyGroupsRequestMarshaller().marshall(super.beforeMarshalling(listKeyGroupsRequest));
                // 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, "CloudFront");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "ListKeyGroups");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

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

            StaxResponseHandler<ListKeyGroupsResult> responseHandler = new StaxResponseHandler<ListKeyGroupsResult>(new ListKeyGroupsResultStaxUnmarshaller());

            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
Gets a list of key groups.
</p>
<p>
You can optionally specify the maximum number of items to receive in the response. If the total number of items
in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the
next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current
response as the <code>Marker</code> value in the subsequent request.
</p>

@param listKeyGroupsRequest
@return Result of the ListKeyGroups operation returned by the service.
@throws InvalidArgumentException
        An argument is invalid.
@sample AmazonCloudFront.ListKeyGroups
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/cloudfront-2020-05-31/ListKeyGroups" target="_top">AWS API
     Documentation</a>
aws-java-sdk-cloudfront/src/main/java/com/amazonaws/services/cloudfront/AmazonCloudFrontClient.java