diff --git a/object-client/src/main/java/software/amazon/s3/analyticsaccelerator/exceptions/ExceptionHandler.java b/object-client/src/main/java/software/amazon/s3/analyticsaccelerator/exceptions/ExceptionHandler.java index b844a939..e02f12d6 100644 --- a/object-client/src/main/java/software/amazon/s3/analyticsaccelerator/exceptions/ExceptionHandler.java +++ b/object-client/src/main/java/software/amazon/s3/analyticsaccelerator/exceptions/ExceptionHandler.java @@ -33,18 +33,21 @@ public enum ExceptionHandler { INVALID_OBJECT_STATE( InvalidObjectStateException.class, - (cause, uri) -> createIOException("Object %s is in invalid state", uri, cause)), + (cause, uri) -> + createIOException("Object %s is in invalid state, failed with: %s", uri, cause)), SDK_CLIENT( SdkClientException.class, - (cause, uri) -> createIOException("Client error accessing %s", uri, cause)), + (cause, uri) -> createIOException("Client error accessing %s, failed with: %s", uri, cause)), S3_SERVICE( S3Exception.class, - (cause, uri) -> createIOException("Server error accessing %s", uri, cause)), + (cause, uri) -> + createIOException("Server error accessing %s, request failed with: %s", uri, cause)), SDK_GENERAL( - SdkException.class, (cause, uri) -> createIOException("SDK error accessing %s", uri, cause)); + SdkException.class, + (cause, uri) -> createIOException("SDK error accessing %s, failed with: %s", uri, cause)); private final Class exceptionClass; private final ExceptionMapper mapper; @@ -91,7 +94,7 @@ public static Exception[] getSampleExceptions() { } private static IOException createIOException(String message, S3URI uri, Throwable cause) { - return new IOException(String.format(message, uri), cause); + return new IOException(String.format(message, uri, cause.getMessage()), cause); } private static FileNotFoundException createFileNotFoundException(String message, S3URI uri) { diff --git a/object-client/src/test/java/software/amazon/s3/analyticsaccelerator/util/ObjectClientUtilTest.java b/object-client/src/test/java/software/amazon/s3/analyticsaccelerator/util/ObjectClientUtilTest.java index ed649e36..ce34e348 100644 --- a/object-client/src/test/java/software/amazon/s3/analyticsaccelerator/util/ObjectClientUtilTest.java +++ b/object-client/src/test/java/software/amazon/s3/analyticsaccelerator/util/ObjectClientUtilTest.java @@ -48,24 +48,31 @@ void testExceptionHandlerWithCompletionException() { @Test void testExceptionHandlerWithExecutionException() { ExecutionException executionException = - new ExecutionException("Execution failed", InvalidObjectStateException.builder().build()); + new ExecutionException( + "Execution failed", + InvalidObjectStateException.builder().message("InvalidObjectState").build()); Throwable result = ObjectClientUtil.handleException(S3_URI, executionException); assertInstanceOf(IOException.class, result); assertInstanceOf(InvalidObjectStateException.class, result.getCause()); - assertEquals("Object s3://test-bucket/test-key is in invalid state", result.getMessage()); + assertEquals( + "Object s3://test-bucket/test-key is in invalid state, failed with: InvalidObjectState", + result.getMessage()); } @Test void testExceptionHandlerWithSDKClientException() { - SdkClientException sdkClientException = SdkClientException.builder().build(); + SdkClientException sdkClientException = + SdkClientException.builder().message("SdkClientException").build(); Throwable result = ObjectClientUtil.handleException(S3_URI, sdkClientException); assertInstanceOf(IOException.class, result); assertInstanceOf(SdkClientException.class, result.getCause()); - assertEquals("Client error accessing s3://test-bucket/test-key", result.getMessage()); + assertEquals( + "Client error accessing s3://test-bucket/test-key, failed with: SdkClientException", + result.getMessage()); } @Test