From e23e9b78e437b8f25065e14912eabecd4fe07415 Mon Sep 17 00:00:00 2001 From: Rached Ben Mustapha Date: Wed, 10 May 2017 16:58:01 -0700 Subject: [PATCH] Handle HttpResponseException in S3ProxyHandlerJetty --- .../java/org/gaul/s3proxy/S3ProxyHandler.java | 40 +++++-------------- .../org/gaul/s3proxy/S3ProxyHandlerJetty.java | 32 ++++++++++++--- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 629ad69..8a077e3 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -99,8 +99,6 @@ import org.jclouds.blobstore.options.GetOptions; import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.blobstore.options.PutOptions; import org.jclouds.domain.Location; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.HttpResponseException; import org.jclouds.io.ContentMetadata; import org.jclouds.io.ContentMetadataBuilder; import org.jclouds.io.Payload; @@ -1706,37 +1704,19 @@ public class S3ProxyHandler { } String eTag; - try { - BlobBuilder.PayloadBlobBuilder builder = blobStore - .blobBuilder(blobName) - .payload(is) - .contentLength(contentLength); + BlobBuilder.PayloadBlobBuilder builder = blobStore + .blobBuilder(blobName) + .payload(is) + .contentLength(contentLength); - addContentMetdataFromHttpRequest(builder, request); - if (contentMD5 != null) { - builder = builder.contentMD5(contentMD5); - } - - eTag = blobStore.putBlob(containerName, builder.build(), - options); - } catch (HttpResponseException hre) { - HttpResponse hr = hre.getResponse(); - if (hr == null) { - return; - } - int status = hr.getStatusCode(); - switch (status) { - case HttpServletResponse.SC_BAD_REQUEST: - case 422: // Swift returns 422 Unprocessable Entity - throw new S3Exception(S3ErrorCode.BAD_DIGEST); - default: - // TODO: emit hre.getContent() ? - response.sendError(status); - break; - } - return; + addContentMetdataFromHttpRequest(builder, request); + if (contentMD5 != null) { + builder = builder.contentMD5(contentMD5); } + eTag = blobStore.putBlob(containerName, builder.build(), + options); + response.addHeader(HttpHeaders.ETAG, maybeQuoteETag(eTag)); } diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java index fa86339..0e51e29 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java @@ -50,6 +50,13 @@ final class S3ProxyHandlerJetty extends AbstractHandler { ignoreUnknownHeaders, corsAllowAll, servicePath); } + private void sendS3Exception(HttpServletRequest request, + HttpServletResponse response, S3Exception se) + throws IOException { + handler.sendSimpleErrorResponse(request, response, + se.getError(), se.getMessage(), se.getElements()); + } + @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) @@ -69,10 +76,24 @@ final class S3ProxyHandlerJetty extends AbstractHandler { baseRequest.setHandled(true); return; } catch (HttpResponseException hre) { - HttpResponse httpResponse = hre.getResponse(); - response.sendError(httpResponse == null ? - HttpServletResponse.SC_INTERNAL_SERVER_ERROR : - httpResponse.getStatusCode()); + HttpResponse hr = hre.getResponse(); + if (hr == null) { + response.sendError( + HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; + } + int status = hr.getStatusCode(); + switch (status) { + case HttpServletResponse.SC_BAD_REQUEST: + case 422: // Swift returns 422 Unprocessable Entity + sendS3Exception(request, response, + new S3Exception(S3ErrorCode.BAD_DIGEST)); + break; + default: + // TODO: emit hre.getContent() ? + response.sendError(status); + break; + } baseRequest.setHandled(true); return; } catch (IllegalArgumentException iae) { @@ -86,8 +107,7 @@ final class S3ProxyHandlerJetty extends AbstractHandler { baseRequest.setHandled(true); return; } catch (S3Exception se) { - handler.sendSimpleErrorResponse(request, response, - se.getError(), se.getMessage(), se.getElements()); + sendS3Exception(request, response, se); baseRequest.setHandled(true); return; } catch (UnsupportedOperationException uoe) {