@SdkInternalApi
    final BatchEvaluateFeatureResult executeBatchEvaluateFeature(BatchEvaluateFeatureRequest batchEvaluateFeatureRequest) {

        ExecutionContext executionContext = createExecutionContext(batchEvaluateFeatureRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<BatchEvaluateFeatureRequest> request = null;
        Response<BatchEvaluateFeatureResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new BatchEvaluateFeatureRequestProtocolMarshaller(protocolFactory).marshall(super.beforeMarshalling(batchEvaluateFeatureRequest));
                // 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, "Evidently");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "BatchEvaluateFeature");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

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

            URI endpointTraitHost = null;
            if (!clientConfiguration.isDisableHostPrefixInjection()) {

                String hostPrefix = "dataplane.";
                String resolvedHostPrefix = String.format("dataplane.");

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

            HttpResponseHandler<AmazonWebServiceResponse<BatchEvaluateFeatureResult>> responseHandler = protocolFactory.createResponseHandler(
                    new JsonOperationMetadata().withPayloadJson(true).withHasStreamingSuccessResponse(false), new BatchEvaluateFeatureResultJsonUnmarshaller());
            response = invoke(request, responseHandler, executionContext, null, endpointTraitHost);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
This operation assigns feature variation to user sessions. For each user session, you pass in an
<code>entityID</code> that represents the user. Evidently then checks the evaluation rules and assigns the
variation.
</p>
<p>
The first rules that are evaluated are the override rules. If the user's <code>entityID</code> matches an
override rule, the user is served the variation specified by that rule.
</p>
<p>
Next, if there is a launch of the feature, the user might be assigned to a variation in the launch. The chance of
this depends on the percentage of users that are allocated to that launch. If the user is enrolled in the launch,
the variation they are served depends on the allocation of the various feature variations used for the launch.
</p>
<p>
If the user is not assigned to a launch, and there is an ongoing experiment for this feature, the user might be
assigned to a variation in the experiment. The chance of this depends on the percentage of users that are
allocated to that experiment. If the user is enrolled in the experiment, the variation they are served depends on
the allocation of the various feature variations used for the experiment.
</p>
<p>
If the user is not assigned to a launch or experiment, they are served the default variation.
</p>

@param batchEvaluateFeatureRequest
@return Result of the BatchEvaluateFeature operation returned by the service.
@throws ThrottlingException
        The request was denied because of request throttling. Retry the request.
@throws ValidationException
        The value of a parameter in the request caused an error.
@throws ResourceNotFoundException
        The request references a resource that does not exist.
@throws AccessDeniedException
        You do not have sufficient permissions to perform this action.
@sample AmazonCloudWatchEvidently.BatchEvaluateFeature
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/BatchEvaluateFeature" target="_top">AWS
     API Documentation</a>
aws-java-sdk-cloudwatchevidently/src/main/java/com/amazonaws/services/cloudwatchevidently/AmazonCloudWatchEvidentlyClient.java