Example usage for com.amazonaws.services.s3.model AmazonS3Exception getAdditionalDetails

List of usage examples for com.amazonaws.services.s3.model AmazonS3Exception getAdditionalDetails

Introduction

In this page you can find the example usage for com.amazonaws.services.s3.model AmazonS3Exception getAdditionalDetails.

Prototype

public Map<String, String> getAdditionalDetails() 

Source Link

Document

Returns any additional information retrieved in the error response.

Usage

From source file:com.ibm.stocator.fs.cos.COSUtils.java

License:Apache License

/**
 * Translate an exception raised in an operation into an IOException. The
 * specific type of IOException depends on the class of
 * {@link AmazonClientException} passed in, and any status codes included in
 * the operation. That is: HTTP error codes are examined and can be used to
 * build a more specific response./*from  w ww .  java2 s. com*/
 *
 * @param operation operation
 * @param path path operated on (may be null)
 * @param exception amazon exception raised
 * @return an IOE which wraps the caught exception
 */
@SuppressWarnings("ThrowableInstanceNeverThrown")
public static IOException translateException(String operation, String path, AmazonClientException exception) {
    String message = String.format("%s%s: %s", operation, path != null ? (" on " + path) : "", exception);
    if (!(exception instanceof AmazonServiceException)) {
        if (containsInterruptedException(exception)) {
            return (IOException) new InterruptedIOException(message).initCause(exception);
        }
        return new COSClientIOException(message, exception);
    } else {

        IOException ioe;
        AmazonServiceException ase = (AmazonServiceException) exception;
        // this exception is non-null if the service exception is an COS one
        AmazonS3Exception s3Exception = ase instanceof AmazonS3Exception ? (AmazonS3Exception) ase : null;
        int status = ase.getStatusCode();
        switch (status) {

        case 301:
            if (s3Exception != null) {
                if (s3Exception.getAdditionalDetails() != null
                        && s3Exception.getAdditionalDetails().containsKey(ENDPOINT_KEY)) {
                    message = String.format(
                            "Received permanent redirect response to "
                                    + "endpoint %s.  This likely indicates that the COS endpoint "
                                    + "configured in %s does not match the region containing " + "the bucket.",
                            s3Exception.getAdditionalDetails().get(ENDPOINT_KEY), ENDPOINT_URL);
                }
                ioe = new COSIOException(message, s3Exception);
            } else {
                ioe = new COSServiceIOException(message, ase);
            }
            break;
        // permissions
        case 401:
        case 403:
            ioe = new AccessDeniedException(path, null, message);
            ioe.initCause(ase);
            break;

        // the object isn't there
        case 404:
        case 410:
            ioe = new FileNotFoundException(message);
            ioe.initCause(ase);
            break;

        // out of range. This may happen if an object is overwritten with
        // a shorter one while it is being read.
        case 416:
            ioe = new EOFException(message);
            break;

        default:
            // no specific exit code. Choose an IOE subclass based on the class
            // of the caught exception
            ioe = s3Exception != null ? new COSIOException(message, s3Exception)
                    : new COSServiceIOException(message, ase);
            break;
        }
        return ioe;
    }
}

From source file:org.apache.hadoop.fs.s3a.S3AUtils.java

License:Apache License

/**
 * Translate an exception raised in an operation into an IOException.
 * The specific type of IOException depends on the class of
 * {@link AmazonClientException} passed in, and any status codes included
 * in the operation. That is: HTTP error codes are examined and can be
 * used to build a more specific response.
 * @param operation operation//from ww  w  . j a va 2s .co  m
 * @param path path operated on (may be null)
 * @param exception amazon exception raised
 * @return an IOE which wraps the caught exception.
 */
@SuppressWarnings("ThrowableInstanceNeverThrown")
public static IOException translateException(String operation, String path, AmazonClientException exception) {
    String message = String.format("%s%s: %s", operation, path != null ? (" on " + path) : "", exception);
    if (!(exception instanceof AmazonServiceException)) {
        return new AWSClientIOException(message, exception);
    } else {

        IOException ioe;
        AmazonServiceException ase = (AmazonServiceException) exception;
        // this exception is non-null if the service exception is an s3 one
        AmazonS3Exception s3Exception = ase instanceof AmazonS3Exception ? (AmazonS3Exception) ase : null;
        int status = ase.getStatusCode();
        switch (status) {

        case 301:
            if (s3Exception != null) {
                if (s3Exception.getAdditionalDetails() != null
                        && s3Exception.getAdditionalDetails().containsKey(ENDPOINT_KEY)) {
                    message = String.format("Received permanent redirect response to "
                            + "endpoint %s.  This likely indicates that the S3 endpoint "
                            + "configured in %s does not match the AWS region containing " + "the bucket.",
                            s3Exception.getAdditionalDetails().get(ENDPOINT_KEY), ENDPOINT);
                }
                ioe = new AWSS3IOException(message, s3Exception);
            } else {
                ioe = new AWSServiceIOException(message, ase);
            }
            break;
        // permissions
        case 401:
        case 403:
            ioe = new AccessDeniedException(path, null, message);
            ioe.initCause(ase);
            break;

        // the object isn't there
        case 404:
        case 410:
            ioe = new FileNotFoundException(message);
            ioe.initCause(ase);
            break;

        // out of range. This may happen if an object is overwritten with
        // a shorter one while it is being read.
        case 416:
            ioe = new EOFException(message);
            break;

        default:
            // no specific exit code. Choose an IOE subclass based on the class
            // of the caught exception
            ioe = s3Exception != null ? new AWSS3IOException(message, s3Exception)
                    : new AWSServiceIOException(message, ase);
            break;
        }
        return ioe;
    }
}

From source file:org.apache.hadoop.fs.s3a.S3AUtils.java

License:Apache License

/**
 * Get low level details of an amazon exception for logging; multi-line.
 * @param e exception//from ww w  .  j  ava 2 s  .  com
 * @return string details
 */
public static String stringify(AmazonS3Exception e) {
    // get the low level details of an exception,
    StringBuilder builder = new StringBuilder(stringify((AmazonServiceException) e));
    Map<String, String> details = e.getAdditionalDetails();
    if (details != null) {
        builder.append('\n');
        for (Map.Entry<String, String> d : details.entrySet()) {
            builder.append(d.getKey()).append('=').append(d.getValue()).append('\n');
        }
    }
    return builder.toString();
}