diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/aliyun-sdk-oss.iml b/aliyun-sdk-oss.iml new file mode 100644 index 00000000..eec53642 --- /dev/null +++ b/aliyun-sdk-oss.iml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/aliyun/oss/OSSException.java b/src/main/java/com/aliyun/oss/OSSException.java index 1adfe897..affedbcf 100644 --- a/src/main/java/com/aliyun/oss/OSSException.java +++ b/src/main/java/com/aliyun/oss/OSSException.java @@ -19,6 +19,8 @@ package com.aliyun.oss; +import com.aliyun.oss.common.comm.ResponseMessage; + /** * The OSSException is thrown upon error when accessing OSS. */ @@ -29,6 +31,7 @@ public class OSSException extends ServiceException { private String resourceType; private String header; private String method; + private ResponseMessage responseMessage; public OSSException() { super(); @@ -65,6 +68,15 @@ public OSSException(String errorMessage, String errorCode, String requestId, Str this.method = method; } + public OSSException(String errorMessage, String errorCode, String requestId, String hostId, String header, + String resourceType, String method, String rawResponseError, Throwable cause, ResponseMessage responseMessage) { + super(errorMessage, errorCode, requestId, hostId, rawResponseError, cause); + this.resourceType = resourceType; + this.header = header; + this.method = method; + this.responseMessage = responseMessage; + } + public String getResourceType() { return resourceType; } @@ -77,6 +89,10 @@ public String getMethod() { return method; } + public ResponseMessage getResponseMessage() { + return responseMessage; + } + @Override public String getMessage() { return super.getMessage() + (resourceType == null ? "" : "\n[ResourceType]: " + resourceType) diff --git a/src/main/java/com/aliyun/oss/common/utils/ExceptionFactory.java b/src/main/java/com/aliyun/oss/common/utils/ExceptionFactory.java index b8752b09..c2d920b5 100644 --- a/src/main/java/com/aliyun/oss/common/utils/ExceptionFactory.java +++ b/src/main/java/com/aliyun/oss/common/utils/ExceptionFactory.java @@ -26,6 +26,7 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import com.aliyun.oss.common.comm.ResponseMessage; import org.apache.http.NoHttpResponseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.NonRepeatableRequestException; @@ -101,6 +102,11 @@ public static OSSException createOSSException(OSSErrorResult errorResult, String errorResult.Header, errorResult.ResourceType, errorResult.Method, rawResponseError); } + public static OSSException createOSSException(OSSErrorResult errorResult, String rawResponseError, ResponseMessage responseMessage) { + return new OSSException(errorResult.Message, errorResult.Code, errorResult.RequestId, errorResult.HostId, + errorResult.Header, errorResult.ResourceType, errorResult.Method, rawResponseError, null, responseMessage); + } + public static OSSException createOSSException(String requestId, String errorCode, String message) { return new OSSException(message, errorCode, requestId, null, null, null, null); } diff --git a/src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java b/src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java index a3616696..12297576 100644 --- a/src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java +++ b/src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java @@ -39,6 +39,7 @@ */ public class OSSErrorResponseHandler implements ResponseHandler { + @Override public void handle(ResponseMessage response) throws OSSException, ClientException { if (response.isSuccessful()) { @@ -69,7 +70,7 @@ public void handle(ResponseMessage response) throws OSSException, ClientExceptio JAXBResponseParser parser = new JAXBResponseParser(OSSErrorResult.class); try { OSSErrorResult errorResult = (OSSErrorResult) parser.parse(response); - throw ExceptionFactory.createOSSException(errorResult, response.getErrorResponseAsString()); + throw ExceptionFactory.createOSSException(errorResult, response.getErrorResponseAsString(), response); } catch (ResponseParseException e) { throw ExceptionFactory.createInvalidResponseException(requestId, response.getErrorResponseAsString(), e); } finally {