Amazon SDK for Java 2.x 的异常处理 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon SDK for Java 2.x 的异常处理

要使用开发工具包构建高质量的应用程序,必须了解Amazon SDK for Java 2.x 在什么情况下会引发异常以及它以什么方式引发异常。接下来几节介绍开发工具包引发异常的几种不同情况,以及如何正确地处理这些异常。

为什么使用未选中的异常?

出于以下原因,Amazon SDK for Java 使用运行时(或未选中的)异常而不是选中的异常:

  • 使开发人员能够精细控制要处理哪些错误,而不是必须处理无关紧要的异常情况(这会导致代码极其冗长)

  • 避免大型应用程序因使用选中的异常而固有的可扩展性问题

一般来说,小型应用程序使用选中的异常是可以的,但随着应用程序的大小和复杂程度增加,这样做就会出现问题。

AwsServiceException (和子类)

AwsServiceException是您在使用时遇到的最常见的异常Amazon SDK for Java。 AwsServiceException是更通SdkServiceException用的子类。 AwsServiceExceptions 表示来自 a 的错误响应Amazon Web Service。例如,如果您尝试终止不存在的 Amazon EC2 实例,Amazon EC2 会返回错误响应,而且引发的 AwsServiceException 中会包含该错误响应的所有详细信息。

当您遇到 AwsServiceException 时,您就会知道,您的请求已成功发送到 Amazon Web Service,但无法成功处理。这可能是因为请求的参数中存在错误,或者是因为服务端的问题。

AwsServiceException 为您提供很多信息,例如:

  • 返回的 HTTP 状态代码

  • 返回的 Amazon 错误代码

  • AwsErrorDetails课堂上来自服务的详细错误消息

  • 已失败请求的 Amazon 请求 ID

在某些情况下,会引发 AwsServiceException 的一个特定于服务的子类,使开发人员能够通过捕获模块精细控制如何处理错误情况。的 Java SDK API 参考中AwsServiceException显示了大量的AwsServiceException子类。使用子类链接可深入查看服务引发的细粒度异常。

例如,以下指向 SDK API 参考的链接中提供了一些常用 Amazon Web Services的异常层次结构。每个页面上的子类列表显示了您的代码可以捕获的特定异常。

要了解有关异常的更多信息,请检查AwsErrorDetails对象errorCode上的。您可以使用该 errorCode 值在服务指南 API 中查找信息。例如,如果捕获到 S3ExceptionAwsErrorDetails#errorCode() 的值为 InvalidRequest,则使用《Amazon S3 API Reference》中的 List of error codes 来查看更多详细信息。

SdkClientException

SdkClientException表示 Java 客户端代码内部出现问题,无论是在尝试向发送请求时Amazon还是尝试解析来自Amazon的响应时。在一般情况下,SdkClientExceptionSdkServiceException 严重,前者指示出现严重问题,导致客户端无法对 Amazon 服务进行服务调用。例如,如果您在尝试对一个客户端执行操作时网络连接不可用,Amazon SDK for Java会引发 SdkClientException

异常和重试行为

适用于 Java 的 SDK 会针对多个客户端异常以及从 Amazon Web Service 响应中收到的 HTTP 状态代码重试请求。这些错误作为服务客户端默认使用的旧版 RetryMode 的一部分进行处理。有关 RetryMode 的 Java API 参考描述了可用于配置模式的各种方式。

要自定义触发自动重试的异常和 HTTP 状态代码,请使用添加 RetryOnExceptionsConditionRetryOnStatusCodeCondition 实例的 RetryPolicy 来配置服务客户端。