Gerenciamento de erros no AWS SDK for Java 2.x - AWS SDK for Java 2.x

Gerenciamento de erros no AWS SDK for Java 2.x

Compreender como e quando o AWS SDK for Java 2.x lança exceções é importante para compilar aplicativos de alta qualidade usando o SDK. As seções a seguir descrevem os casos diferentes de exceções lançadas pelo SDK e como processá-las da maneira apropriada.

Por que exceções desmarcadas?

O AWS SDK para Java usa exceções de tempo de execução (ou desmarcadas), em vez de exceções marcadas por estes motivos:

  • Como permitir que desenvolvedores controlem os erros que desejam processar sem forçá-los a processar casos excepcionais com os quais não estão preocupados (e tornar o código excessivamente detalhado)

  • Para evitar problemas de escalabilidade inerentes a exceções marcadas em aplicativos grandes

Em geral, as exceções marcadas funcionam bem em escalas pequenas, mas podem se tornar problemáticas à medida que os aplicativos crescem e se tornam mais complexos.

AwsServiceException (e subclasses)

AwsServiceException é a exceção mais comum que você experimentará ao usar o AWS SDK para Java. AwsServiceException é uma subclasse da SdkServiceException mais geral. AwsServiceExceptions representam uma resposta de erro de um AWS service (Serviço da AWS). Por exemplo, se você tentar encerrar uma instância do Amazon EC2 que não existe, o Amazon EC2 retornará uma resposta de erro, e todos os detalhes dessa resposta de erro serão incluídos na AwsServiceException lançada.

Ao encontrar um AwsServiceException, você sabe que a requisição foi enviada com êxito para o AWS service (Serviço da AWS), mas não foi possível processá-la com êxito. Isso pode ocorrer devido a erros nos parâmetros da solicitação ou problemas no lado do serviço.

AwsServiceException fornece informações como:

  • Código de status HTTP retornado

  • Código de erro da AWS retornado

  • Mensagem de erro detalhada do serviço na classe AwsErrorDetails

  • ID de requisição da AWS para a requisição com falha

Para alguns casos, uma subclasse de AwsServiceException específica do serviço é lançada para permitir que os desenvolvedores tenham o controle refinado do tratamento dos casos de erro nos blocos catch. A referência da API do Java SDK para AwsServiceException exibe o grande número de subclasses de AwsServiceException. Use os links da subclasse para detalhar e ver as exceções granulares lançadas por um serviço.

Por exemplo, os links a seguir para a referência da API do SDK mostram as hierarquias de exceções de alguns Serviços da AWS comuns. A lista de subclasses mostrada em cada página mostra as exceções específicas que seu código pode capturar.

Para saber mais sobre uma exceção, inspecione o errorCode no objeto AwsErrorDetails. Você pode usar o valor do errorCode para pesquisar informações na API do guia de serviços. Por exemplo, se uma S3Exception for detectada e o valor de AwsErrorDetails#errorCode() for InvalidRequest, use a lista de códigos de erro na Referência da API do Amazon S3 para ver mais detalhes.

SdkClientException

SdkClientException indica que houve um problema dentro do código cliente do Java, durante a tentativa de enviar uma solicitação para a AWS ou durante a tentativa de analisar uma resposta da AWS. Um SdkClientException normalmente é mais grave do que um SdkServiceException e indica um problema grave que esteja evitando que o cliente faça chamadas de serviço para serviços da AWS. Por exemplo, o AWS SDK para Java lançará um SdkClientException se nenhuma conexão de rede estiver disponível quando você tentar chamar uma operação em um dos clientes.

Exceções e comportamento de nova tentativa

O SDK for Java faz novas tentativas de solicitações para várias exceções do lado do cliente e para códigos de status HTTP que ele recebe das respostas do AWS service (Serviço da AWS). Esses erros são tratados como parte do RetryMode legado que os clientes de serviço usam por padrão. A referência da API Java para RetryMode descreve as várias maneiras pelas quais você pode configurar o modo.

Para personalizar as exceções e os códigos de status HTTP que acionam novas tentativas automáticas, configure seu cliente de serviço com uma RetryPolicy que adicione instâncias RetryOnExceptionsCondition e RetryOnStatusCodeCondition.