/* * Copyright 2010-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.textract; import java.util.*; import com.amazonaws.*; import com.amazonaws.auth.*; import com.amazonaws.handlers.*; import com.amazonaws.http.*; import com.amazonaws.internal.*; import com.amazonaws.metrics.*; import com.amazonaws.transform.*; import com.amazonaws.util.*; import com.amazonaws.util.AWSRequestMetrics.Field; import com.amazonaws.services.textract.model.*; import com.amazonaws.services.textract.model.transform.*; /** * Client for accessing Amazon Textract. All service calls made using this * client are blocking, and will not return until the service call completes. *

*

* Amazon Textract detects and analyzes text in documents and converts it into * machine-readable text. This is the API reference documentation for Amazon * Textract. *

*/ public class AmazonTextractClient extends AmazonWebServiceClient implements AmazonTextract { /** Provider for AWS credentials. */ private AWSCredentialsProvider awsCredentialsProvider; /** * List of exception unmarshallers for all Amazon Textract exceptions. */ protected List jsonErrorUnmarshallers; /** * Constructs a new client to invoke service methods on AmazonTextract. A * credentials provider chain will be used that searches for credentials in * this order: * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @see DefaultAWSCredentialsProviderChain */ @Deprecated public AmazonTextractClient() { this(new DefaultAWSCredentialsProviderChain(), new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonTextract. A * credentials provider chain will be used that searches for credentials in * this order: *

*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonTextract (ex: proxy * settings, retry counts, etc.). * @see DefaultAWSCredentialsProviderChain */ @Deprecated public AmazonTextractClient(ClientConfiguration clientConfiguration) { this(new DefaultAWSCredentialsProviderChain(), clientConfiguration); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials. *

* The client requests are authenticated using the {@link AWSCredentials} * provided in this constructor. Static AWSCredentials can be passed for * quick testing. However, it is strongly recommended to use Amazon Cognito * vended temporary credentials for use in production. This can be achieved * by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *

     * AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
     *     @Override
     *     public void onResult(final UserStateDetails details) {
     *         AmazonTextractClient client = new AmazonTextractClient(AWSMobileClient.getInstance());
     *     }
     * 
     *     @Override
     *     public void onError(final Exception e) {
     *         e.printStackTrace();
     *     }
     * });
     * 
*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials The AWS credentials (access key ID and secret key) * to use when authenticating with AWS services. */ public AmazonTextractClient(AWSCredentials awsCredentials) { this(awsCredentials, new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials and client configuration options. *

* The client requests are authenticated using the {@link AWSCredentials} * provided in this constructor. Static AWSCredentials can be passed for * quick testing. However, it is strongly recommended to use Amazon Cognito * vended temporary credentials for use in production. This can be achieved * by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *

     * AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
     *     @Override
     *     public void onResult(final UserStateDetails details) {
     *         AmazonTextractClient client = new AmazonTextractClient(AWSMobileClient.getInstance());
     *     }
     * 
     *     @Override
     *     public void onError(final Exception e) {
     *         e.printStackTrace();
     *     }
     * });
     * 
*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials The AWS credentials (access key ID and secret key) * to use when authenticating with AWS services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonTextract (ex: proxy * settings, retry counts, etc.). */ public AmazonTextractClient(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration) { this(new StaticCredentialsProvider(awsCredentials), clientConfiguration); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials provider. *

* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *

     * AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
     *     @Override
     *     public void onResult(final UserStateDetails details) {
     *         AmazonTextractClient client = new AmazonTextractClient(AWSMobileClient.getInstance());
     *     }
     * 
     *     @Override
     *     public void onError(final Exception e) {
     *         e.printStackTrace();
     *     }
     * });
     * 
*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. */ public AmazonTextractClient(AWSCredentialsProvider awsCredentialsProvider) { this(awsCredentialsProvider, new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials provider and client configuration * options. *

* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *

     * AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
     *     @Override
     *     public void onResult(final UserStateDetails details) {
     *         AmazonTextractClient client = new AmazonTextractClient(AWSMobileClient.getInstance());
     *     }
     * 
     *     @Override
     *     public void onError(final Exception e) {
     *         e.printStackTrace();
     *     }
     * });
     * 
*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonTextract (ex: proxy * settings, retry counts, etc.). */ public AmazonTextractClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration) { this(awsCredentialsProvider, clientConfiguration, new UrlHttpClient(clientConfiguration)); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials provider, client configuration * options and request metric collector. *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonTextract (ex: proxy * settings, retry counts, etc.). * @param requestMetricCollector optional request metric collector */ @Deprecated public AmazonTextractClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration, RequestMetricCollector requestMetricCollector) { super(adjustClientConfiguration(clientConfiguration), requestMetricCollector); this.awsCredentialsProvider = awsCredentialsProvider; init(); } /** * Constructs a new client to invoke service methods on AmazonTextract using * the specified AWS account credentials provider, client configuration * options and request metric collector. *

* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *

     * AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
     *     @Override
     *     public void onResult(final UserStateDetails details) {
     *         AmazonTextractClient client = new AmazonTextractClient(AWSMobileClient.getInstance());
     *     }
     * 
     *     @Override
     *     public void onError(final Exception e) {
     *         e.printStackTrace();
     *     }
     * });
     * 
*

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonTextract (ex: proxy * settings, retry counts, etc.). * @param httpClient A http client */ public AmazonTextractClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration, HttpClient httpClient) { super(adjustClientConfiguration(clientConfiguration), httpClient); this.awsCredentialsProvider = awsCredentialsProvider; init(); } private void init() { jsonErrorUnmarshallers = new ArrayList(); jsonErrorUnmarshallers.add(new AccessDeniedExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new BadDocumentExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new DocumentTooLargeExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new HumanLoopQuotaExceededExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new IdempotentParameterMismatchExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new InternalServerErrorExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new InvalidJobIdExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new InvalidKMSKeyExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new InvalidParameterExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new InvalidS3ObjectExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new LimitExceededExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new ProvisionedThroughputExceededExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new ThrottlingExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new UnsupportedDocumentExceptionUnmarshaller()); jsonErrorUnmarshallers.add(new JsonErrorUnmarshaller()); // calling this.setEndPoint(...) will also modify the signer accordingly this.setEndpoint("textract.us-east-1.amazonaws.com"); this.endpointPrefix = "textract"; HandlerChainFactory chainFactory = new HandlerChainFactory(); requestHandler2s.addAll(chainFactory.newRequestHandlerChain( "/com/amazonaws/services/textract/request.handlers")); requestHandler2s.addAll(chainFactory.newRequestHandler2Chain( "/com/amazonaws/services/textract/request.handler2s")); } private static ClientConfiguration adjustClientConfiguration(ClientConfiguration orig) { ClientConfiguration config = orig; return config; } /** *

* Analyzes an input document for relationships between detected items. *

*

* The types of information returned are as follows: *

* *

* Selection elements such as check boxes and option buttons (radio buttons) * can be detected in form data and in tables. A SELECTION_ELEMENT * Block object contains information about a selection element, * including the selection status. *

*

* You can choose which type of analysis to perform by specifying the * FeatureTypes list. *

*

* The output is returned in a list of Block objects. *

*

* AnalyzeDocument is a synchronous operation. To analyze * documents asynchronously, use StartDocumentAnalysis. *

*

* For more information, see Document Text Analysis. *

* * @param analyzeDocumentRequest * @return analyzeDocumentResult The response from the AnalyzeDocument * service method, as returned by Amazon Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws ThrottlingException * @throws HumanLoopQuotaExceededException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public AnalyzeDocumentResult analyzeDocument(AnalyzeDocumentRequest analyzeDocumentRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(analyzeDocumentRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new AnalyzeDocumentRequestMarshaller().marshall(analyzeDocumentRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new AnalyzeDocumentResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* AnalyzeExpense synchronously analyzes an input document for * financially related relationships between text. *

*

* Information is returned as ExpenseDocuments and seperated as * follows: *

*
    *
  • *

    * LineItemGroups- A data set containing LineItems * which store information about the lines of text, such as an item * purchased and its price on a receipt. *

    *
  • *
  • *

    * SummaryFields- Contains all other information a receipt, * such as header information or the vendors name. *

    *
  • *
* * @param analyzeExpenseRequest * @return analyzeExpenseResult The response from the AnalyzeExpense service * method, as returned by Amazon Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws ThrottlingException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public AnalyzeExpenseResult analyzeExpense(AnalyzeExpenseRequest analyzeExpenseRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(analyzeExpenseRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new AnalyzeExpenseRequestMarshaller().marshall(analyzeExpenseRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new AnalyzeExpenseResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Analyzes identity documents for relevant information. This information is * extracted and returned as IdentityDocumentFields, which * records both the normalized field and value of the extracted text. Unlike * other Amazon Textract operations, AnalyzeID doesn't return * any Geometry data. *

* * @param analyzeIDRequest * @return analyzeIDResult The response from the AnalyzeID service method, * as returned by Amazon Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws ThrottlingException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public AnalyzeIDResult analyzeID(AnalyzeIDRequest analyzeIDRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(analyzeIDRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new AnalyzeIDRequestMarshaller().marshall(analyzeIDRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new AnalyzeIDResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Detects text in the input document. Amazon Textract can detect lines of * text and the words that make up a line of text. The input document must * be in one of the following image formats: JPEG, PNG, PDF, or TIFF. * DetectDocumentText returns the detected text in an array of * Block objects. *

*

* Each document page has as an associated Block of type PAGE. * Each PAGE Block object is the parent of LINE * Block objects that represent the lines of detected text on a * page. A LINE Block object is a parent for each word that * makes up the line. Words are represented by Block objects of * type WORD. *

*

* DetectDocumentText is a synchronous operation. To analyze * documents asynchronously, use StartDocumentTextDetection. *

*

* For more information, see Document Text Detection. *

* * @param detectDocumentTextRequest * @return detectDocumentTextResult The response from the DetectDocumentText * service method, as returned by Amazon Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws ThrottlingException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public DetectDocumentTextResult detectDocumentText( DetectDocumentTextRequest detectDocumentTextRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(detectDocumentTextRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new DetectDocumentTextRequestMarshaller() .marshall(detectDocumentTextRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new DetectDocumentTextResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Gets the results for an Amazon Textract asynchronous operation that * analyzes text in a document. *

*

* You start asynchronous text analysis by calling * StartDocumentAnalysis, which returns a job identifier ( * JobId). When the text analysis operation finishes, Amazon * Textract publishes a completion status to the Amazon Simple Notification * Service (Amazon SNS) topic that's registered in the initial call to * StartDocumentAnalysis. To get the results of the * text-detection operation, first check that the status value published to * the Amazon SNS topic is SUCCEEDED. If so, call * GetDocumentAnalysis, and pass the job identifier ( * JobId) from the initial call to * StartDocumentAnalysis. *

*

* GetDocumentAnalysis returns an array of Block * objects. The following types of information are returned: *

*
    *
  • *

    * Form data (key-value pairs). The related information is returned in two * Block objects, each of type KEY_VALUE_SET: a KEY * Block object and a VALUE Block object. For * example, Name: Ana Silva Carolina contains a key and value. * Name: is the key. Ana Silva Carolina is the value. *

    *
  • *
  • *

    * Table and table cell data. A TABLE Block object contains * information about a detected table. A CELL Block object is * returned for each cell in a table. *

    *
  • *
  • *

    * Lines and words of text. A LINE Block object contains one or * more WORD Block objects. All lines and words that are * detected in the document are returned (including text that doesn't have a * relationship with the value of the StartDocumentAnalysis * FeatureTypes input parameter). *

    *
  • *
  • *

    * Query. A QUERY Block object contains the query text, alias and link to * the associated Query results block object. *

    *
  • *
  • *

    * Query Results. A QUERY_RESULT Block object contains the answer to the * query and an ID that connects it to the query asked. This Block also * contains a confidence score. *

    *
  • *
* *

* While processing a document with queries, look out for * INVALID_REQUEST_PARAMETERS output. This indicates that * either the per page query limit has been exceeded or that the operation * is trying to query a page in the document which doesn’t exist. *

*
*

* Selection elements such as check boxes and option buttons (radio buttons) * can be detected in form data and in tables. A SELECTION_ELEMENT * Block object contains information about a selection element, * including the selection status. *

*

* Use the MaxResults parameter to limit the number of blocks * that are returned. If there are more results than specified in * MaxResults, the value of NextToken in the * operation response contains a pagination token for getting the next set * of results. To get the next page of results, call * GetDocumentAnalysis, and populate the NextToken * request parameter with the token value that's returned from the previous * call to GetDocumentAnalysis. *

*

* For more information, see Document Text Analysis. *

* * @param getDocumentAnalysisRequest * @return getDocumentAnalysisResult The response from the * GetDocumentAnalysis service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InvalidJobIdException * @throws InternalServerErrorException * @throws ThrottlingException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public GetDocumentAnalysisResult getDocumentAnalysis( GetDocumentAnalysisRequest getDocumentAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(getDocumentAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetDocumentAnalysisRequestMarshaller() .marshall(getDocumentAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new GetDocumentAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Gets the results for an Amazon Textract asynchronous operation that * detects text in a document. Amazon Textract can detect lines of text and * the words that make up a line of text. *

*

* You start asynchronous text detection by calling * StartDocumentTextDetection, which returns a job identifier ( * JobId). When the text detection operation finishes, Amazon * Textract publishes a completion status to the Amazon Simple Notification * Service (Amazon SNS) topic that's registered in the initial call to * StartDocumentTextDetection. To get the results of the * text-detection operation, first check that the status value published to * the Amazon SNS topic is SUCCEEDED. If so, call * GetDocumentTextDetection, and pass the job identifier ( * JobId) from the initial call to * StartDocumentTextDetection. *

*

* GetDocumentTextDetection returns an array of Block * objects. *

*

* Each document page has as an associated Block of type PAGE. * Each PAGE Block object is the parent of LINE * Block objects that represent the lines of detected text on a * page. A LINE Block object is a parent for each word that * makes up the line. Words are represented by Block objects of * type WORD. *

*

* Use the MaxResults parameter to limit the number of blocks that are * returned. If there are more results than specified in * MaxResults, the value of NextToken in the * operation response contains a pagination token for getting the next set * of results. To get the next page of results, call * GetDocumentTextDetection, and populate the * NextToken request parameter with the token value that's * returned from the previous call to GetDocumentTextDetection. *

*

* For more information, see Document Text Detection. *

* * @param getDocumentTextDetectionRequest * @return getDocumentTextDetectionResult The response from the * GetDocumentTextDetection service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InvalidJobIdException * @throws InternalServerErrorException * @throws ThrottlingException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public GetDocumentTextDetectionResult getDocumentTextDetection( GetDocumentTextDetectionRequest getDocumentTextDetectionRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(getDocumentTextDetectionRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetDocumentTextDetectionRequestMarshaller() .marshall(getDocumentTextDetectionRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new GetDocumentTextDetectionResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Gets the results for an Amazon Textract asynchronous operation that * analyzes invoices and receipts. Amazon Textract finds contact * information, items purchased, and vendor name, from input invoices and * receipts. *

*

* You start asynchronous invoice/receipt analysis by calling * StartExpenseAnalysis, which returns a job identifier ( * JobId). Upon completion of the invoice/receipt analysis, * Amazon Textract publishes the completion status to the Amazon Simple * Notification Service (Amazon SNS) topic. This topic must be registered in * the initial call to StartExpenseAnalysis. To get the results * of the invoice/receipt analysis operation, first ensure that the status * value published to the Amazon SNS topic is SUCCEEDED. If so, * call GetExpenseAnalysis, and pass the job identifier ( * JobId) from the initial call to * StartExpenseAnalysis. *

*

* Use the MaxResults parameter to limit the number of blocks that are * returned. If there are more results than specified in * MaxResults, the value of NextToken in the * operation response contains a pagination token for getting the next set * of results. To get the next page of results, call * GetExpenseAnalysis, and populate the NextToken * request parameter with the token value that's returned from the previous * call to GetExpenseAnalysis. *

*

* For more information, see Analyzing Invoices and Receipts. *

* * @param getExpenseAnalysisRequest * @return getExpenseAnalysisResult The response from the GetExpenseAnalysis * service method, as returned by Amazon Textract. * @throws InvalidParameterException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InvalidJobIdException * @throws InternalServerErrorException * @throws ThrottlingException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public GetExpenseAnalysisResult getExpenseAnalysis( GetExpenseAnalysisRequest getExpenseAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(getExpenseAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetExpenseAnalysisRequestMarshaller() .marshall(getExpenseAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new GetExpenseAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Gets the results for an Amazon Textract asynchronous operation that * analyzes text in a lending document. *

*

* You start asynchronous text analysis by calling * StartLendingAnalysis, which returns a job identifier ( * JobId). When the text analysis operation finishes, Amazon * Textract publishes a completion status to the Amazon Simple Notification * Service (Amazon SNS) topic that's registered in the initial call to * StartLendingAnalysis. *

*

* To get the results of the text analysis operation, first check that the * status value published to the Amazon SNS topic is SUCCEEDED. If so, call * GetLendingAnalysis, and pass the job identifier (JobId) from * the initial call to StartLendingAnalysis. *

* * @param getLendingAnalysisRequest * @return getLendingAnalysisResult The response from the GetLendingAnalysis * service method, as returned by Amazon Textract. * @throws InvalidParameterException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InvalidJobIdException * @throws InternalServerErrorException * @throws ThrottlingException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public GetLendingAnalysisResult getLendingAnalysis( GetLendingAnalysisRequest getLendingAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(getLendingAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetLendingAnalysisRequestMarshaller() .marshall(getLendingAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new GetLendingAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Gets summarized results for the StartLendingAnalysis * operation, which analyzes text in a lending document. The returned * summary consists of information about documents grouped together by a * common document type. Information like detected signatures, page numbers, * and split documents is returned with respect to the type of grouped * document. *

*

* You start asynchronous text analysis by calling * StartLendingAnalysis, which returns a job identifier ( * JobId). When the text analysis operation finishes, Amazon * Textract publishes a completion status to the Amazon Simple Notification * Service (Amazon SNS) topic that's registered in the initial call to * StartLendingAnalysis. *

*

* To get the results of the text analysis operation, first check that the * status value published to the Amazon SNS topic is SUCCEEDED. If so, call * GetLendingAnalysisSummary, and pass the job identifier ( * JobId) from the initial call to * StartLendingAnalysis. *

* * @param getLendingAnalysisSummaryRequest * @return getLendingAnalysisSummaryResult The response from the * GetLendingAnalysisSummary service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InvalidJobIdException * @throws InternalServerErrorException * @throws ThrottlingException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public GetLendingAnalysisSummaryResult getLendingAnalysisSummary( GetLendingAnalysisSummaryRequest getLendingAnalysisSummaryRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(getLendingAnalysisSummaryRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetLendingAnalysisSummaryRequestMarshaller() .marshall(getLendingAnalysisSummaryRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new GetLendingAnalysisSummaryResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Starts the asynchronous analysis of an input document for relationships * between detected items such as key-value pairs, tables, and selection * elements. *

*

* StartDocumentAnalysis can analyze text in documents that are * in JPEG, PNG, TIFF, and PDF format. The documents are stored in an Amazon * S3 bucket. Use DocumentLocation to specify the bucket name and * file name of the document. *

*

* StartDocumentAnalysis returns a job identifier ( * JobId) that you use to get the results of the operation. * When text analysis is finished, Amazon Textract publishes a completion * status to the Amazon Simple Notification Service (Amazon SNS) topic that * you specify in NotificationChannel. To get the results of * the text analysis operation, first check that the status value published * to the Amazon SNS topic is SUCCEEDED. If so, call * GetDocumentAnalysis, and pass the job identifier ( * JobId) from the initial call to * StartDocumentAnalysis. *

*

* For more information, see Document Text Analysis. *

* * @param startDocumentAnalysisRequest * @return startDocumentAnalysisResult The response from the * StartDocumentAnalysis service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws IdempotentParameterMismatchException * @throws ThrottlingException * @throws LimitExceededException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public StartDocumentAnalysisResult startDocumentAnalysis( StartDocumentAnalysisRequest startDocumentAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(startDocumentAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new StartDocumentAnalysisRequestMarshaller() .marshall(startDocumentAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new StartDocumentAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Starts the asynchronous detection of text in a document. Amazon Textract * can detect lines of text and the words that make up a line of text. *

*

* StartDocumentTextDetection can analyze text in documents * that are in JPEG, PNG, TIFF, and PDF format. The documents are stored in * an Amazon S3 bucket. Use DocumentLocation to specify the bucket * name and file name of the document. *

*

* StartTextDetection returns a job identifier ( * JobId) that you use to get the results of the operation. * When text detection is finished, Amazon Textract publishes a completion * status to the Amazon Simple Notification Service (Amazon SNS) topic that * you specify in NotificationChannel. To get the results of * the text detection operation, first check that the status value published * to the Amazon SNS topic is SUCCEEDED. If so, call * GetDocumentTextDetection, and pass the job identifier ( * JobId) from the initial call to * StartDocumentTextDetection. *

*

* For more information, see Document Text Detection. *

* * @param startDocumentTextDetectionRequest * @return startDocumentTextDetectionResult The response from the * StartDocumentTextDetection service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws IdempotentParameterMismatchException * @throws ThrottlingException * @throws LimitExceededException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public StartDocumentTextDetectionResult startDocumentTextDetection( StartDocumentTextDetectionRequest startDocumentTextDetectionRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(startDocumentTextDetectionRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new StartDocumentTextDetectionRequestMarshaller() .marshall(startDocumentTextDetectionRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new StartDocumentTextDetectionResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Starts the asynchronous analysis of invoices or receipts for data like * contact information, items purchased, and vendor names. *

*

* StartExpenseAnalysis can analyze text in documents that are * in JPEG, PNG, and PDF format. The documents must be stored in an Amazon * S3 bucket. Use the DocumentLocation parameter to specify the name * of your S3 bucket and the name of the document in that bucket. *

*

* StartExpenseAnalysis returns a job identifier ( * JobId) that you will provide to * GetExpenseAnalysis to retrieve the results of the operation. * When the analysis of the input invoices/receipts is finished, Amazon * Textract publishes a completion status to the Amazon Simple Notification * Service (Amazon SNS) topic that you provide to the * NotificationChannel. To obtain the results of the invoice * and receipt analysis operation, ensure that the status value published to * the Amazon SNS topic is SUCCEEDED. If so, call * GetExpenseAnalysis, and pass the job identifier ( * JobId) that was returned by your call to * StartExpenseAnalysis. *

*

* For more information, see Analyzing Invoices and Receipts. *

* * @param startExpenseAnalysisRequest * @return startExpenseAnalysisResult The response from the * StartExpenseAnalysis service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws IdempotentParameterMismatchException * @throws ThrottlingException * @throws LimitExceededException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public StartExpenseAnalysisResult startExpenseAnalysis( StartExpenseAnalysisRequest startExpenseAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(startExpenseAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new StartExpenseAnalysisRequestMarshaller() .marshall(startExpenseAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new StartExpenseAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** *

* Starts the classification and analysis of an input document. * StartLendingAnalysis initiates the classification and * analysis of a packet of lending documents. * StartLendingAnalysis operates on a document file located in * an Amazon S3 bucket. *

*

* StartLendingAnalysis can analyze text in documents that are * in one of the following formats: JPEG, PNG, TIFF, PDF. Use * DocumentLocation to specify the bucket name and the file * name of the document. *

*

* StartLendingAnalysis returns a job identifier ( * JobId) that you use to get the results of the operation. * When the text analysis is finished, Amazon Textract publishes a * completion status to the Amazon Simple Notification Service (Amazon SNS) * topic that you specify in NotificationChannel. To get the * results of the text analysis operation, first check that the status value * published to the Amazon SNS topic is SUCCEEDED. If the status is * SUCCEEDED you can call either GetLendingAnalysis or * GetLendingAnalysisSummary and provide the JobId * to obtain the results of the analysis. *

*

* If using OutputConfig to specify an Amazon S3 bucket, the * output will be contained within the specified prefix in a directory * labeled with the job-id. In the directory there are 3 sub-directories: *

*
    *
  • *

    * detailedResponse (contains the GetLendingAnalysis response) *

    *
  • *
  • *

    * summaryResponse (for the GetLendingAnalysisSummary response) *

    *
  • *
  • *

    * splitDocuments (documents split across logical boundaries) *

    *
  • *
* * @param startLendingAnalysisRequest * @return startLendingAnalysisResult The response from the * StartLendingAnalysis service method, as returned by Amazon * Textract. * @throws InvalidParameterException * @throws InvalidS3ObjectException * @throws InvalidKMSKeyException * @throws UnsupportedDocumentException * @throws DocumentTooLargeException * @throws BadDocumentException * @throws AccessDeniedException * @throws ProvisionedThroughputExceededException * @throws InternalServerErrorException * @throws IdempotentParameterMismatchException * @throws ThrottlingException * @throws LimitExceededException * @throws AmazonClientException If any internal errors are encountered * inside the client while attempting to make the request or * handle the response. For example if a network connection is * not available. * @throws AmazonServiceException If an error response is returned by Amazon * Textract indicating either a problem with the data in the * request, or a server side issue. */ public StartLendingAnalysisResult startLendingAnalysis( StartLendingAnalysisRequest startLendingAnalysisRequest) throws AmazonServiceException, AmazonClientException { ExecutionContext executionContext = createExecutionContext(startLendingAnalysisRequest); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new StartLendingAnalysisRequestMarshaller() .marshall(startLendingAnalysisRequest); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } Unmarshaller unmarshaller = new StartLendingAnalysisResultJsonUnmarshaller(); JsonResponseHandler responseHandler = new JsonResponseHandler( unmarshaller); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { awsRequestMetrics.endEvent(Field.ClientExecuteTime); endClientExecution(awsRequestMetrics, request, response, LOGGING_AWS_REQUEST_METRIC); } } /** * Returns additional metadata for a previously executed successful, * request, typically used for debugging issues where a service isn't acting * as expected. This data isn't considered part of the result data returned * by an operation, so it's available through this separate, diagnostic * interface. *

* Response metadata is only cached for a limited period of time, so if you * need to access this extra diagnostic information for an executed request, * you should use this method to retrieve it as soon as possible after * executing the request. * * @param request The originally executed request * @return The response metadata for the specified request, or null if none * is available. * @deprecated ResponseMetadata cache can hold up to 50 requests and * responses in memory and will cause memory issue. This method * now always returns null. */ @Deprecated public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) { return client.getResponseMetadataForRequest(request); } private Response invoke(Request request, HttpResponseHandler> responseHandler, ExecutionContext executionContext) { request.setEndpoint(endpoint); request.setTimeOffset(timeOffset); AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics(); AWSCredentials credentials; awsRequestMetrics.startEvent(Field.CredentialsRequestTime); try { credentials = awsCredentialsProvider.getCredentials(); } finally { awsRequestMetrics.endEvent(Field.CredentialsRequestTime); } AmazonWebServiceRequest originalRequest = request.getOriginalRequest(); if (originalRequest != null && originalRequest.getRequestCredentials() != null) { credentials = originalRequest.getRequestCredentials(); } executionContext.setCredentials(credentials); JsonErrorResponseHandler errorResponseHandler = new JsonErrorResponseHandler( jsonErrorUnmarshallers); Response result = client.execute(request, responseHandler, errorResponseHandler, executionContext); return result; } }