public void handle()

in src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java [47:98]


    public void handle(ResponseMessage response) throws OSSException, ClientException {

        if (response.isSuccessful()) {
            return;
        }

        String requestId = response.getRequestId();
        int statusCode = response.getStatusCode();
        if (response.getContent() == null) {
            //try to get error from x-oss-err header
            OSSErrorResult result = null;
            try {
                if (response.getHeaders().containsKey(OSSHeaders.OSS_ERROR)) {
                    byte[] data = BinaryUtil.fromBase64String(response.getHeaders().get(OSSHeaders.OSS_ERROR));
                    result = errorResponseParser.parseErrorResponse(new ByteArrayInputStream(data));
                    if (result.Code == null) {
                        result = null;
                    }
                }
            }catch (Throwable e) {
                //ignore error
            }

            /**
             * When HTTP response body is null, handle status code 404 Not
             * Found, 304 Not Modified, 412 Precondition Failed especially.
             */
            if (result != null) {
                throw ExceptionFactory.createOSSException(result, null);
            } else if (statusCode == HttpStatus.SC_NOT_FOUND) {
                throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.NO_SUCH_KEY, "Not Found");
            } else if (statusCode == HttpStatus.SC_NOT_MODIFIED) {
                throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.NOT_MODIFIED, "Not Modified");
            } else if (statusCode == HttpStatus.SC_PRECONDITION_FAILED) {
                throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.PRECONDITION_FAILED,
                        "Precondition Failed");
            } else if (statusCode == HttpStatus.SC_FORBIDDEN) {
                throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.ACCESS_FORBIDDEN, "AccessForbidden");
            } else {
                throw ExceptionFactory.createUnknownOSSException(requestId, statusCode);
            }
        }

        try {
            OSSErrorResult errorResult = errorResponseParser.parse(response);
            throw ExceptionFactory.createOSSException(errorResult, response.getErrorResponseAsString());
        } catch (ResponseParseException e) {
            throw ExceptionFactory.createInvalidResponseException(requestId, response.getErrorResponseAsString(), e);
        } finally {
            safeCloseResponse(response);
        }
    }