From 8528b1f91054a3f6029957be221caed4afc6b7a7 Mon Sep 17 00:00:00 2001 From: Bala FA Date: Mon, 1 Jun 2020 09:44:51 +0000 Subject: [PATCH] Handle s3 service returning HTTP server error (#960) Fixes #958 --- api/src/main/java/io/minio/MinioClient.java | 340 +++++++++++------- api/src/main/java/io/minio/Result.java | 7 +- .../java/io/minio/errors/ServerException.java | 24 ++ examples/PutObjectProgressBar.java | 14 +- examples/PutObjectUiProgressBar.java | 14 +- 5 files changed, 250 insertions(+), 149 deletions(-) create mode 100644 api/src/main/java/io/minio/errors/ServerException.java diff --git a/api/src/main/java/io/minio/MinioClient.java b/api/src/main/java/io/minio/MinioClient.java index 6329756b3..a5bfd6abb 100755 --- a/api/src/main/java/io/minio/MinioClient.java +++ b/api/src/main/java/io/minio/MinioClient.java @@ -38,6 +38,7 @@ import io.minio.errors.InvalidPortException; import io.minio.errors.InvalidResponseException; import io.minio.errors.RegionConflictException; +import io.minio.errors.ServerException; import io.minio.errors.XmlParserException; import io.minio.http.Method; import io.minio.messages.Bucket; @@ -1192,7 +1193,8 @@ private Response execute( int length) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { boolean traceRequestBody = false; if (body != null && !(body instanceof InputStream @@ -1339,6 +1341,10 @@ private Response execute( ec = ErrorCode.ACCESS_DENIED; break; default: + if (response.code() >= 500) { + throw new ServerException("server failed with HTTP status code " + response.code()); + } + throw new InternalException( "unhandled HTTP code " + response.code() @@ -1380,7 +1386,8 @@ private Response execute( int length) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Multimap headerMultiMap = null; if (headerMap != null) { headerMultiMap = Multimaps.forMap(normalizeHeaders(headerMap)); @@ -1399,7 +1406,8 @@ private Response execute( private String getRegion(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + ServerException, XmlParserException { if (this.region != null && !this.region.equals("")) { return this.region; } @@ -1442,7 +1450,8 @@ private Response executeGet( Map queryParamMap) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return execute( Method.GET, bucketName, @@ -1458,7 +1467,8 @@ private Response executeGet( String bucketName, String objectName, Multimap queryParamMap) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return execute( Method.GET, bucketName, objectName, getRegion(bucketName), null, queryParamMap, null, 0); } @@ -1470,7 +1480,8 @@ private Response executeHead( Multimap queryParams) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Response response = execute( Method.HEAD, @@ -1488,7 +1499,8 @@ private Response executeHead( private Response executeHead(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { try { return executeHead(bucketName, objectName, null, null); } catch (ErrorResponseException e) { @@ -1508,7 +1520,8 @@ private Response executeDelete( Multimap queryParams) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Response response = execute( Method.DELETE, @@ -1527,7 +1540,8 @@ private Response executeDelete( String bucketName, String objectName, Map queryParamMap) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Response response = execute( Method.DELETE, @@ -1550,7 +1564,8 @@ private Response executePost( Object data) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return execute( Method.POST, bucketName, @@ -1572,7 +1587,8 @@ private Response executePut( int length) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return execute( Method.PUT, bucketName, objectName, region, headerMap, queryParamMap, data, length); } @@ -1586,7 +1602,8 @@ private Response executePut( int length) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return executePut( bucketName, objectName, getRegion(bucketName), headerMap, queryParamMap, data, length); } @@ -1618,7 +1635,8 @@ private Response executePut( public ObjectStat statObject(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build()); } @@ -1652,7 +1670,8 @@ public ObjectStat statObject( String bucketName, String objectName, ServerSideEncryptionCustomerKey ssec) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return statObject( StatObjectArgs.builder().bucket(bucketName).object(objectName).ssec(ssec).build()); } @@ -1713,7 +1732,8 @@ public ObjectStat statObject( public ObjectStat statObject(StatObjectArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); args.validateSsec(baseUrl); @@ -1759,7 +1779,8 @@ public ObjectStat statObject(StatObjectArgs args) public String getObjectUrl(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkObjectName(objectName); HttpUrl url = buildUrl(Method.GET, bucketName, objectName, getRegion(bucketName), null); return url.toString(); @@ -1796,7 +1817,8 @@ public String getObjectUrl(String bucketName, String objectName) public InputStream getObject(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build()); } @@ -1833,7 +1855,8 @@ public InputStream getObject( String bucketName, String objectName, ServerSideEncryptionCustomerKey ssec) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getObject( GetObjectArgs.builder().bucket(bucketName).object(objectName).ssec(ssec).build()); } @@ -1870,7 +1893,8 @@ public InputStream getObject( public InputStream getObject(String bucketName, String objectName, long offset) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getObject( GetObjectArgs.builder().bucket(bucketName).object(objectName).offset(offset).build()); } @@ -1908,7 +1932,8 @@ public InputStream getObject(String bucketName, String objectName, long offset) public InputStream getObject(String bucketName, String objectName, long offset, Long length) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getObject( GetObjectArgs.builder() .bucket(bucketName) @@ -1957,7 +1982,8 @@ public InputStream getObject( ServerSideEncryptionCustomerKey ssec) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getObject( GetObjectArgs.builder() .bucket(bucketName) @@ -2003,7 +2029,8 @@ public InputStream getObject( public InputStream getObject(GetObjectArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Long offset = args.offset(); Long length = args.length(); ServerSideEncryptionCustomerKey ssec = args.ssec(); @@ -2059,7 +2086,8 @@ public InputStream getObject(GetObjectArgs args) public void getObject(String bucketName, String objectName, String fileName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { downloadObject( DownloadObjectArgs.builder() .bucket(bucketName) @@ -2097,7 +2125,8 @@ public void getObject( String bucketName, String objectName, ServerSideEncryptionCustomerKey ssec, String fileName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { downloadObject( DownloadObjectArgs.builder() .bucket(bucketName) @@ -2136,7 +2165,8 @@ public void getObject( public void downloadObject(DownloadObjectArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { String fileName = args.fileName(); Path filePath = Paths.get(fileName); boolean fileExists = Files.exists(filePath); @@ -2287,7 +2317,8 @@ public void copyObject( CopyConditions copyConditions) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { if ((bucketName == null) || (bucketName.isEmpty())) { throw new IllegalArgumentException("bucket name cannot be empty"); } @@ -2382,7 +2413,8 @@ public void composeObject( ServerSideEncryption sse) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { if ((bucketName == null) || (bucketName.isEmpty())) { throw new IllegalArgumentException("bucket name cannot be empty"); } @@ -2618,7 +2650,7 @@ public String getPresignedObjectUrl( throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { // Validate input. if (expires < 1 || expires > DEFAULT_EXPIRY_TIME) { throw new InvalidExpiresRangeException( @@ -2679,7 +2711,7 @@ public String presignedGetObject( throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return getPresignedObjectUrl(Method.GET, bucketName, objectName, expires, reqParams); } @@ -2713,7 +2745,7 @@ public String presignedGetObject(String bucketName, String objectName, Integer e throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return presignedGetObject(bucketName, objectName, expires, null); } @@ -2744,7 +2776,7 @@ public String presignedGetObject(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return presignedGetObject(bucketName, objectName, DEFAULT_EXPIRY_TIME, null); } @@ -2778,7 +2810,7 @@ public String presignedPutObject(String bucketName, String objectName, Integer e throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return getPresignedObjectUrl(Method.PUT, bucketName, objectName, expires, null); } @@ -2809,7 +2841,7 @@ public String presignedPutObject(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return presignedPutObject(bucketName, objectName, DEFAULT_EXPIRY_TIME); } @@ -2856,7 +2888,7 @@ public Map presignedPostPolicy(PostPolicy policy) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return policy.formData(this.accessKey, this.secretKey, getRegion(policy.bucketName())); } @@ -2885,7 +2917,8 @@ public Map presignedPostPolicy(PostPolicy policy) public void removeObject(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build()); } @@ -2931,7 +2964,8 @@ public void removeObject(String bucketName, String objectName) public void removeObject(RemoveObjectArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Multimap headers = HashMultimap.create(); @@ -3005,6 +3039,7 @@ private synchronized void populate() { | InvalidResponseException | IOException | NoSuchAlgorithmException + | ServerException | XmlParserException e) { this.error = new Result<>(e); } finally { @@ -3288,9 +3323,10 @@ protected String getDelimiter(ListObjectsArgs args) { } protected abstract void populateResult() - throws InvalidKeyException, InvalidBucketNameException, IllegalArgumentException, - NoSuchAlgorithmException, InsufficientDataException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException, IOException; + throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, + InternalException, InvalidBucketNameException, InvalidKeyException, + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException; protected synchronized void populate() { try { @@ -3304,6 +3340,7 @@ protected synchronized void populate() { | InvalidResponseException | IOException | NoSuchAlgorithmException + | ServerException | XmlParserException e) { this.error = new Result<>(e); } finally { @@ -3397,9 +3434,10 @@ private Iterable> listObjectsV2(ListObjectsArgs args) { public Iterator> iterator() { return new ObjectIterator() { protected void populateResult() - throws InvalidKeyException, InvalidBucketNameException, IllegalArgumentException, - NoSuchAlgorithmException, InsufficientDataException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException, IOException { + throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, + InternalException, InvalidBucketNameException, InvalidKeyException, + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { String delimiter = getDelimiter(args); String continuationToken = null; if (this.listBucketResult != null) { @@ -3433,9 +3471,10 @@ public Iterator> iterator() { return new ObjectIterator() { @Override protected void populateResult() - throws InvalidKeyException, InvalidBucketNameException, IllegalArgumentException, - NoSuchAlgorithmException, InsufficientDataException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException, IOException { + throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, + InternalException, InvalidBucketNameException, InvalidKeyException, + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { String delimiter = getDelimiter(args); String continuationToken = null; if (this.listBucketResult != null) { @@ -3490,7 +3529,8 @@ protected void populateResult() public List listBuckets() throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Response response = executeGet(null, null, (Multimap) null); try (ResponseBody body = response.body()) { ListAllMyBucketsResult result = @@ -3530,7 +3570,8 @@ public List listBuckets() public boolean bucketExists(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); } @@ -3565,7 +3606,8 @@ public boolean bucketExists(String bucketName) public boolean bucketExists(BucketExistsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { try { executeHead(args.bucket(), null); return true; @@ -3603,7 +3645,7 @@ public void makeBucket(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, RegionConflictException, - XmlParserException { + ServerException, XmlParserException { this.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } @@ -3634,7 +3676,7 @@ public void makeBucket(String bucketName, String region) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, RegionConflictException, - XmlParserException { + ServerException, XmlParserException { this.makeBucket(MakeBucketArgs.builder().bucket(bucketName).region(region).build()); } @@ -3666,7 +3708,7 @@ public void makeBucket(String bucketName, String region, boolean objectLock) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, RegionConflictException, - XmlParserException { + ServerException, XmlParserException { this.makeBucket( MakeBucketArgs.builder().bucket(bucketName).region(region).objectLock(objectLock).build()); } @@ -3712,9 +3754,10 @@ public void makeBucket(String bucketName, String region, boolean objectLock) * @throws XmlParserException thrown to indicate XML parsing error. */ public void makeBucket(MakeBucketArgs args) - throws InvalidBucketNameException, RegionConflictException, InsufficientDataException, - InternalException, InvalidResponseException, InvalidKeyException, - NoSuchAlgorithmException, XmlParserException, ErrorResponseException, IOException { + throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, + InternalException, InvalidBucketNameException, InvalidKeyException, + InvalidResponseException, IOException, NoSuchAlgorithmException, RegionConflictException, + ServerException, XmlParserException { checkArgs(args); String region = US_EAST_1; @@ -3773,7 +3816,8 @@ public void makeBucket(MakeBucketArgs args) public void enableVersioning(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { this.enableVersioning(EnableVersioningArgs.builder().bucket(bucketName).build()); } @@ -3800,7 +3844,8 @@ public void enableVersioning(String bucketName) public void enableVersioning(EnableVersioningArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -3836,7 +3881,8 @@ public void enableVersioning(EnableVersioningArgs args) public void disableVersioning(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { this.disableVersioning(DisableVersioningArgs.builder().bucket(bucketName).build()); } @@ -3864,7 +3910,8 @@ public void disableVersioning(String bucketName) public void disableVersioning(DisableVersioningArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -3904,7 +3951,8 @@ public void disableVersioning(DisableVersioningArgs args) public boolean isVersioningEnabled(IsVersioningEnabledArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -3942,7 +3990,8 @@ public boolean isVersioningEnabled(IsVersioningEnabledArgs args) public void setDefaultRetention(String bucketName, ObjectLockConfiguration config) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Map queryParamMap = new HashMap<>(); queryParamMap.put("object-lock", ""); @@ -3979,7 +4028,8 @@ public void setDefaultRetention(String bucketName, ObjectLockConfiguration confi public ObjectLockConfiguration getDefaultRetention(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Map queryParamMap = new HashMap<>(); queryParamMap.put("object-lock", ""); @@ -4026,7 +4076,8 @@ public void setObjectRetention( boolean bypassGovernanceMode) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { this.setObjectRetention( SetObjectRetentionArgs.builder() @@ -4069,7 +4120,8 @@ public void setObjectRetention( public void setObjectRetention(SetObjectRetentionArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4119,7 +4171,8 @@ public void setObjectRetention(SetObjectRetentionArgs args) public Retention getObjectRetention(String bucketName, String objectName, String versionId) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return this.getObjectRetention( GetObjectRetentionArgs.builder() .bucket(bucketName) @@ -4159,7 +4212,8 @@ public Retention getObjectRetention(String bucketName, String objectName, String public Retention getObjectRetention(GetObjectRetentionArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4207,7 +4261,8 @@ public Retention getObjectRetention(GetObjectRetentionArgs args) public void enableObjectLegalHold(String bucketName, String objectName, String versionId) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { enableObjectLegalHold( EnableObjectLegalHoldArgs.builder() .bucket(bucketName) @@ -4244,7 +4299,8 @@ public void enableObjectLegalHold(String bucketName, String objectName, String v public void enableObjectLegalHold(EnableObjectLegalHoldArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); queryParamMap.put("legal-hold", ""); @@ -4285,7 +4341,8 @@ public void enableObjectLegalHold(EnableObjectLegalHoldArgs args) public void disableObjectLegalHold(String bucketName, String objectName, String versionId) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { disableObjectLegalHold( DisableObjectLegalHoldArgs.builder() .bucket(bucketName) @@ -4322,7 +4379,8 @@ public void disableObjectLegalHold(String bucketName, String objectName, String public void disableObjectLegalHold(DisableObjectLegalHoldArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4371,7 +4429,8 @@ public void disableObjectLegalHold(DisableObjectLegalHoldArgs args) public boolean isObjectLegalHoldEnabled(String bucketName, String objectName, String versionId) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return isObjectLegalHoldEnabled( IsObjectLegalHoldEnabledArgs.builder() .bucket(bucketName) @@ -4416,7 +4475,8 @@ public boolean isObjectLegalHoldEnabled(String bucketName, String objectName, St public boolean isObjectLegalHoldEnabled(IsObjectLegalHoldEnabledArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4461,7 +4521,8 @@ public boolean isObjectLegalHoldEnabled(IsObjectLegalHoldEnabledArgs args) public void removeBucket(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { this.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); } @@ -4488,7 +4549,8 @@ public void removeBucket(String bucketName) public void removeBucket(RemoveBucketArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); executeDelete(args.bucket(), null, null); @@ -4498,7 +4560,8 @@ private void putObject( String bucketName, String objectName, PutObjectOptions options, Object data) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Map headerMap = new HashMap<>(); if (options.headers() != null) { @@ -4594,7 +4657,8 @@ public void putObject( String bucketName, String objectName, String filename, PutObjectOptions options) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkBucketName(bucketName); checkObjectName(objectName); @@ -4659,7 +4723,8 @@ public void putObject( String bucketName, String objectName, InputStream stream, PutObjectOptions options) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkBucketName(bucketName); checkObjectName(objectName); @@ -4706,7 +4771,7 @@ public String getBucketPolicy(String bucketName) throws BucketPolicyTooLargeException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { return getBucketPolicy(GetBucketPolicyArgs.builder().bucket(bucketName).build()); } @@ -4737,7 +4802,7 @@ public String getBucketPolicy(GetBucketPolicyArgs args) throws BucketPolicyTooLargeException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException, - XmlParserException { + ServerException, XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4824,7 +4889,8 @@ public String getBucketPolicy(GetBucketPolicyArgs args) public void setBucketPolicy(String bucketName, String policy) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policy).build()); } @@ -4874,7 +4940,8 @@ public void setBucketPolicy(String bucketName, String policy) public void setBucketPolicy(SetBucketPolicyArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map headerMap = new HashMap<>(); @@ -4910,7 +4977,8 @@ public void setBucketPolicy(SetBucketPolicyArgs args) public void deleteBucketPolicy(DeleteBucketPolicyArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -4963,7 +5031,8 @@ public void deleteBucketPolicy(DeleteBucketPolicyArgs args) public void setBucketLifeCycle(String bucketName, String lifeCycle) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { setBucketLifeCycle( SetBucketLifeCycleArgs.builder().bucket(bucketName).config(lifeCycle).build()); } @@ -5004,7 +5073,8 @@ public void setBucketLifeCycle(String bucketName, String lifeCycle) public void setBucketLifeCycle(SetBucketLifeCycleArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5037,7 +5107,8 @@ public void setBucketLifeCycle(SetBucketLifeCycleArgs args) public void deleteBucketLifeCycle(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { deleteBucketLifeCycle(DeleteBucketLifeCycleArgs.builder().bucket(bucketName).build()); } @@ -5064,7 +5135,8 @@ public void deleteBucketLifeCycle(String bucketName) public void deleteBucketLifeCycle(DeleteBucketLifeCycleArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5098,7 +5170,8 @@ public void deleteBucketLifeCycle(DeleteBucketLifeCycleArgs args) public String getBucketLifeCycle(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { return getBucketLifeCycle(GetBucketLifeCycleArgs.builder().bucket(bucketName).build()); } @@ -5128,7 +5201,8 @@ public String getBucketLifeCycle(String bucketName) public String getBucketLifeCycle(GetBucketLifeCycleArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5169,7 +5243,8 @@ public String getBucketLifeCycle(GetBucketLifeCycleArgs args) public NotificationConfiguration getBucketNotification(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Map queryParamMap = new HashMap<>(); queryParamMap.put("notification", ""); @@ -5220,7 +5295,8 @@ public void setBucketNotification( String bucketName, NotificationConfiguration notificationConfiguration) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Map queryParamMap = new HashMap<>(); queryParamMap.put("notification", ""); Response response = @@ -5251,7 +5327,8 @@ public void setBucketNotification( public void removeAllBucketNotification(String bucketName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { NotificationConfiguration notificationConfiguration = new NotificationConfiguration(); setBucketNotification(bucketName, notificationConfiguration); } @@ -5366,6 +5443,7 @@ private synchronized void populate() { | InvalidResponseException | IOException | NoSuchAlgorithmException + | ServerException | XmlParserException e) { this.error = new Result<>(e); } finally { @@ -5380,7 +5458,7 @@ private synchronized void populate() { private synchronized long getAggregatedPartSize(String objectName, String uploadId) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, XmlParserException { long aggregatedPartSize = 0; @@ -5462,6 +5540,7 @@ public Result next() { | InvalidResponseException | IOException | NoSuchAlgorithmException + | ServerException | XmlParserException e) { // special case: ignore the error as we can't propagate the exception in next() aggregatedPartSize = -1; @@ -5518,6 +5597,7 @@ private synchronized void populate() { | InvalidResponseException | IOException | NoSuchAlgorithmException + | ServerException | XmlParserException e) { this.error = new Result<>(e); } finally { @@ -5621,7 +5701,8 @@ public void remove() { public void removeIncompleteUpload(String bucketName, String objectName) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { for (Result r : listIncompleteUploads(bucketName, objectName, true, false)) { Upload upload = r.get(); if (objectName.equals(upload.objectName())) { @@ -5673,7 +5754,8 @@ public CloseableIterator> listenBucketNotification( String bucketName, String prefix, String suffix, String[] events) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { Multimap queryParamMap = HashMultimap.create(); queryParamMap.put("prefix", prefix); queryParamMap.put("suffix", suffix); @@ -5747,7 +5829,8 @@ public SelectResponseStream selectObjectContent( ServerSideEncryptionCustomerKey ssec) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { if ((bucketName == null) || (bucketName.isEmpty())) { throw new IllegalArgumentException("bucket name cannot be empty"); } @@ -5794,7 +5877,8 @@ public SelectResponseStream selectObjectContent( public void setBucketEncryption(SetBucketEncryptionArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5829,7 +5913,8 @@ public void setBucketEncryption(SetBucketEncryptionArgs args) public SseConfiguration getBucketEncryption(GetBucketEncryptionArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5870,7 +5955,8 @@ public SseConfiguration getBucketEncryption(GetBucketEncryptionArgs args) public void deleteBucketEncryption(DeleteBucketEncryptionArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5911,7 +5997,8 @@ public void deleteBucketEncryption(DeleteBucketEncryptionArgs args) public Tags getBucketTags(GetBucketTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5955,7 +6042,8 @@ public Tags getBucketTags(GetBucketTagsArgs args) public void setBucketTags(SetBucketTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -5987,7 +6075,8 @@ public void setBucketTags(SetBucketTagsArgs args) public void deleteBucketTags(DeleteBucketTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -6022,7 +6111,8 @@ public void deleteBucketTags(DeleteBucketTagsArgs args) public Tags getObjectTags(GetObjectTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -6064,7 +6154,8 @@ public Tags getObjectTags(GetObjectTagsArgs args) public void setObjectTags(SetObjectTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -6098,7 +6189,8 @@ public void setObjectTags(SetObjectTagsArgs args) public void deleteObjectTags(DeleteObjectTagsArgs args) throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, - InvalidResponseException, IOException, NoSuchAlgorithmException, XmlParserException { + InvalidResponseException, IOException, NoSuchAlgorithmException, ServerException, + XmlParserException { checkArgs(args); Map queryParamMap = new HashMap<>(); @@ -6394,8 +6486,8 @@ public Result next() { */ protected void abortMultipartUpload(String bucketName, String objectName, String uploadId) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); queryParamMap.put(UPLOAD_ID, uploadId); executeDelete(bucketName, objectName, queryParamMap); @@ -6424,8 +6516,8 @@ protected void abortMultipartUpload(String bucketName, String objectName, String protected void completeMultipartUpload( String bucketName, String objectName, String uploadId, Part[] parts) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); queryParamMap.put(UPLOAD_ID, uploadId); CompleteMultipartUpload completeManifest = new CompleteMultipartUpload(parts); @@ -6473,8 +6565,8 @@ protected void completeMultipartUpload( protected String createMultipartUpload( String bucketName, String objectName, Map headerMap) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { // set content type if not set already if ((headerMap != null) && (headerMap.get("Content-Type") == null)) { headerMap.put("Content-Type", "application/octet-stream"); @@ -6516,8 +6608,8 @@ protected String createMultipartUpload( protected DeleteResult deleteObjects( String bucketName, List objectList, boolean quiet) throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, - IOException, InvalidKeyException, XmlParserException, ErrorResponseException, - InternalException, InvalidResponseException { + IOException, InvalidKeyException, ServerException, XmlParserException, + ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); queryParamMap.put("delete", ""); @@ -6566,7 +6658,7 @@ private Map getCommonListObjectsQueryParams(ListObjectsArgs args private ListBucketResultV2 invokeListObjectsV2(ListObjectsArgs args) throws InvalidKeyException, InvalidBucketNameException, IllegalArgumentException, - NoSuchAlgorithmException, InsufficientDataException, XmlParserException, + NoSuchAlgorithmException, InsufficientDataException, ServerException, XmlParserException, ErrorResponseException, InternalException, InvalidResponseException, IOException { Map queryParamMap = getCommonListObjectsQueryParams(args); queryParamMap.put("list-type", "2"); @@ -6596,8 +6688,8 @@ private ListBucketResultV2 invokeListObjectsV2(ListObjectsArgs args) private ListBucketResultV1 invokeListObjectsV1(ListObjectsArgs args) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = getCommonListObjectsQueryParams(args); if (args.startAfter() != null) { @@ -6636,8 +6728,8 @@ private ListBucketResultV1 invokeListObjectsV1(ListObjectsArgs args) protected String putObject( String bucketName, String objectName, Object data, int length, Map headerMap) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { if (!(data instanceof BufferedInputStream || data instanceof RandomAccessFile || data instanceof byte[] @@ -6683,8 +6775,8 @@ protected ListMultipartUploadsResult listMultipartUploads( String prefix, String uploadIdMarker) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); queryParamMap.put("uploads", ""); @@ -6748,8 +6840,8 @@ protected ListPartsResult listParts( Integer partNumberMarker, String uploadId) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); if (maxParts != null) { @@ -6802,8 +6894,8 @@ protected String uploadPart( int partNumber, Map headerMap) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { if (!(data instanceof BufferedInputStream || data instanceof RandomAccessFile || data instanceof byte[] @@ -6851,8 +6943,8 @@ protected String uploadPartCopy( int partNumber, Map headerMap) throws InvalidBucketNameException, IllegalArgumentException, NoSuchAlgorithmException, - InsufficientDataException, IOException, InvalidKeyException, XmlParserException, - ErrorResponseException, InternalException, InvalidResponseException { + InsufficientDataException, IOException, InvalidKeyException, ServerException, + XmlParserException, ErrorResponseException, InternalException, InvalidResponseException { Map queryParamMap = new HashMap<>(); queryParamMap.put("partNumber", Integer.toString(partNumber)); queryParamMap.put("uploadId", uploadId); diff --git a/api/src/main/java/io/minio/Result.java b/api/src/main/java/io/minio/Result.java index 2f8a51cf3..5cbccb460 100644 --- a/api/src/main/java/io/minio/Result.java +++ b/api/src/main/java/io/minio/Result.java @@ -23,6 +23,7 @@ import io.minio.errors.InternalException; import io.minio.errors.InvalidBucketNameException; import io.minio.errors.InvalidResponseException; +import io.minio.errors.ServerException; import io.minio.errors.XmlParserException; import java.io.IOException; import java.security.InvalidKeyException; @@ -48,7 +49,7 @@ public T get() throws ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidKeyException, InvalidResponseException, IOException, JsonMappingException, JsonParseException, - NoSuchAlgorithmException, XmlParserException { + NoSuchAlgorithmException, ServerException, XmlParserException { if (ex == null) { return type; } @@ -97,6 +98,10 @@ public T get() throw (NoSuchAlgorithmException) ex; } + if (ex instanceof ServerException) { + throw (ServerException) ex; + } + if (ex instanceof XmlParserException) { throw (XmlParserException) ex; } diff --git a/api/src/main/java/io/minio/errors/ServerException.java b/api/src/main/java/io/minio/errors/ServerException.java new file mode 100644 index 000000000..3527eb249 --- /dev/null +++ b/api/src/main/java/io/minio/errors/ServerException.java @@ -0,0 +1,24 @@ +/* + * MinIO Java SDK for Amazon S3 Compatible Cloud Storage, (C) 2020 MinIO, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.minio.errors; + +/** Thrown to indicate that S3 service returning HTTP server error. */ +public class ServerException extends MinioException { + public ServerException(String message) { + super(message); + } +} diff --git a/examples/PutObjectProgressBar.java b/examples/PutObjectProgressBar.java index c945db4a1..d68bbd33f 100644 --- a/examples/PutObjectProgressBar.java +++ b/examples/PutObjectProgressBar.java @@ -16,14 +16,7 @@ import io.minio.MinioClient; import io.minio.PutObjectOptions; -import io.minio.errors.ErrorResponseException; -import io.minio.errors.InsufficientDataException; -import io.minio.errors.InternalException; -import io.minio.errors.InvalidBucketNameException; -import io.minio.errors.InvalidEndpointException; -import io.minio.errors.InvalidPortException; -import io.minio.errors.InvalidResponseException; -import io.minio.errors.XmlParserException; +import io.minio.errors.MinioException; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -36,10 +29,7 @@ public class PutObjectProgressBar { /** MinioClient.putObjectProgressBar() example. */ public static void main(String[] args) - throws InvalidKeyException, NoSuchAlgorithmException, InvalidEndpointException, - InvalidPortException, InvalidBucketNameException, InsufficientDataException, - ErrorResponseException, InternalException, IllegalArgumentException, IOException, - XmlParserException, InvalidResponseException { + throws IOException, NoSuchAlgorithmException, InvalidKeyException, MinioException { /* play.min.io for test and development. */ MinioClient minioClient = new MinioClient( diff --git a/examples/PutObjectUiProgressBar.java b/examples/PutObjectUiProgressBar.java index 1bab8ddd3..346659b6d 100644 --- a/examples/PutObjectUiProgressBar.java +++ b/examples/PutObjectUiProgressBar.java @@ -16,14 +16,7 @@ import io.minio.MinioClient; import io.minio.PutObjectOptions; -import io.minio.errors.ErrorResponseException; -import io.minio.errors.InsufficientDataException; -import io.minio.errors.InternalException; -import io.minio.errors.InvalidBucketNameException; -import io.minio.errors.InvalidEndpointException; -import io.minio.errors.InvalidPortException; -import io.minio.errors.InvalidResponseException; -import io.minio.errors.XmlParserException; +import io.minio.errors.MinioException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; @@ -67,10 +60,7 @@ public void go() { * on the UI */ private void uploadFile(String fileName) - throws IOException, NoSuchAlgorithmException, InvalidKeyException, XmlParserException, - InvalidEndpointException, InvalidPortException, InvalidBucketNameException, - InsufficientDataException, ErrorResponseException, InternalException, - IllegalArgumentException, InvalidResponseException { + throws IOException, NoSuchAlgorithmException, InvalidKeyException, MinioException { /* play.min.io for test and development. */ MinioClient minioClient =