开发者社区 问答 正文

Java-SDK - 异常处理


调用OSSClient类的相关接口时,[backcolor=transparent]如果抛出异常,则表明操作失败,否则操作成功。抛出异常时,方法返回的数据无效。OSS Java SDK包含两类异常,一类是服务器端异常OSSException,另一类是客户端异常ClientException,它们均继承自RuntimeException。

异常处理示例

try {// Do some operations with the instance here, such as put object...client.putObject(...);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message: " + oe.getErrorCode());System.out.println("Error Code:       " + oe.getErrorCode());System.out.println("Request ID:      " + oe.getRequestId());System.out.println("Host ID:           " + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message: " + ce.getMessage());} finally {if (client != null) {client.shutdown();}}

ClientException


ClientException表示客户端尝试向OSS发送请求以及数据传输时遇到的异常。例如,当发送请求时网络连接不可用时,则会抛出 ClientException;当上传文件时发生IO异常时,也会抛出ClientException。

OSSException


OSSException指服务器端错误,它来自于对服务器错误信息的解析,包含OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。
OSSException通常包含以下错误信息:

  • Code: OSS返回给用户的错误码。
  • Message: OSS提供的详细错误信息。
  • RequestId: 用于唯一标识该请求的UUID;当您无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。
  • HostId: 用于标识访问的OSS集群,与用户请求时使用的Host一致。


OSS常见错误码

错误码描述HTTP状态码
AccessDenied拒绝访问403
BucketAlreadyExistsBucket已经存在409
BucketNotEmptyBucket不为空409
EntityTooLarge实体过大400
EntityTooSmall实体过小400
FileGroupTooLarge文件组过大400
FilePartNotExist文件Part不存在400
FilePartStale文件Part过时400
InvalidArgument参数格式错误400
InvalidAccessKeyIdAccessKeyId不存在403
InvalidBucketName无效的Bucket名字400
InvalidDigest无效的摘要400
InvalidObjectName无效的Object名字400
InvalidPart无效的Part400
InvalidPartOrder无效的part顺序400
InvalidTargetBucketForLoggingLogging操作中有无效的目标bucket400
InternalErrorOSS内部发生错误500
MalformedXMLXML格式非法400
MethodNotAllowed不支持的方法405
MissingArgument缺少参数411
MissingContentLength缺少内容长度411
NoSuchBucketBucket不存在404
NoSuchKey文件不存在404
NoSuchUploadMultipart Upload ID不存在404
NotImplemented无法处理的方法501
PreconditionFailed预处理错误412
RequestTimeTooSkewed发起请求的时间和服务器时间超出15分钟403
RequestTimeout请求超时400
SignatureDoesNotMatch签名错误403
[tr=rgb(239, 251, 255)][td]InvalidEncryptionAlgorithmError 指定的熵编码加密算法错误400

展开
收起
青衫无名 2017-10-18 11:15:42 1883 分享 版权
阿里云 AI 助理回答

在使用阿里云对象存储服务(OSS)的Java SDK进行操作时,正确处理异常对于确保程序健壮性和理解错误原因至关重要。根据您提供的信息,这里是对两类异常及其处理方式的总结:

1. ClientException(客户端异常)

  • 描述:这类异常发生在客户端尝试与OSS服务器通信时遇到问题,比如网络连接问题、本地I/O错误等。
  • 示例场景:网络不可达、文件读写失败等。
  • 处理建议:通常需要检查客户端的网络配置、权限设置、输入输出操作是否正确。

2. OSSException(服务器端异常)

  • 描述:当OSS服务器接收到请求但无法成功处理时抛出,包含具体的错误码和错误信息,便于定位问题。
  • 包含信息
    • Code:OSS返回的错误码,如AccessDenied表示访问被拒绝。
    • Message:详细的错误描述。
    • RequestId:唯一标识请求的ID,用于寻求技术支持。
    • HostId:标识访问的OSS集群。
  • 示例错误码

    • AccessDenied:403,表明没有足够的权限访问资源。
    • BucketAlreadyExists:409,尝试创建已存在的Bucket。
    • NoSuchBucket:404,指定的Bucket不存在。
  • 处理建议:根据错误码和消息调整请求参数或检查相关资源的配置。例如,如果遇到AccessDenied,应检查访问密钥是否正确,以及是否有相应的访问策略。

异常处理示例代码回顾

try {
    // 执行OSS操作,如上传文件
    client.putObject(...);
} catch (OSSException oe) {
    // 处理OSS服务器端异常
    System.out.println("Error Message: " + oe.getErrorCode());
    // 记录或处理其他详细信息如RequestId, HostId等
} catch (ClientException ce) {
    // 处理客户端异常,如网络问题
    System.out.println("Error Message: " + ce.getMessage());
} finally {
    // 确保OSSClient关闭以释放资源
    if (client != null) {
        client.shutdown();
    }
}

通过上述异常处理机制,开发者可以有效地识别并响应在使用OSS过程中可能遇到的各种错误情况,从而提升应用的稳定性和用户体验。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答