List of usage examples for com.amazonaws.services.s3.model AmazonS3Exception getAdditionalDetails
public Map<String, String> getAdditionalDetails()
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(); }