You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/08/22 04:05:19 UTC

jclouds git commit: JCLOUDS-1322: Remove Expect header for requests with empty body

Repository: jclouds
Updated Branches:
  refs/heads/master 7cbc16d99 -> e331a000d


JCLOUDS-1322: Remove Expect header for requests with empty body

Signed-off-by: Chaithanya Ganta <ga...@adobe.com>


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e331a000
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e331a000
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e331a000

Branch: refs/heads/master
Commit: e331a000d17d36043165cf79c505a7c0a7370f05
Parents: 7cbc16d
Author: Chaithanya Ganta <ga...@adobe.com>
Authored: Mon Jul 17 14:50:16 2017 +0530
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Aug 21 21:05:02 2017 -0700

----------------------------------------------------------------------
 .../test/java/org/jclouds/s3/S3ClientMockTest.java   |  3 ++-
 .../rest/internal/RestAnnotationProcessor.java       | 15 +++++++++++++++
 .../rest/internal/RestAnnotationProcessorTest.java   | 12 ++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/e331a000/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
index c91b316..cf31df3 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
@@ -20,6 +20,7 @@ import static com.google.common.net.HttpHeaders.CONTENT_LENGTH;
 import static com.google.common.net.HttpHeaders.ETAG;
 import static com.google.common.net.HttpHeaders.EXPECT;
 import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
 import static org.testng.Assert.assertEquals;
 
@@ -73,7 +74,7 @@ public class S3ClientMockTest {
       RecordedRequest request = server.takeRequest();
       assertEquals(request.getRequestLine(), "PUT /bucket/object HTTP/1.1");
       assertEquals(request.getHeaders(CONTENT_LENGTH), ImmutableList.of("0"));
-      assertEquals(request.getHeaders(EXPECT), ImmutableList.of("100-continue"));
+      assertThat(request.getHeaders(EXPECT)).isEmpty();
       server.shutdown();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/e331a000/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
index 010f3b6..0ee891a 100644
--- a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
+++ b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
@@ -357,6 +357,9 @@ public class RestAnnotationProcessor implements Function<Invocation, HttpRequest
       if (request.getPayload() != null) {
          contentMetadataCodec.fromHeaders(request.getPayload().getContentMetadata(), headers);
       }
+
+      request = stripExpectHeaderIfContentZero(request);
+
       utils.checkRequestHasRequiredProperties(request);
       return request;
    }
@@ -779,6 +782,18 @@ public class RestAnnotationProcessor implements Function<Invocation, HttpRequest
       return parts.build();
    }
 
+   private static GeneratedHttpRequest stripExpectHeaderIfContentZero(GeneratedHttpRequest request) {
+      boolean isBodyEmpty = true;
+      if (request.getPayload() != null) {
+         Long length = request.getPayload().getContentMetadata().getContentLength();
+         isBodyEmpty = length != null && length == 0;
+      }
+      if (isBodyEmpty) {
+         request = request.toBuilder().removeHeader("Expect").build();
+      }
+      return request;
+   }
+
    private boolean isEncodedUsed(Invocation invocation) {
       return !parametersWithAnnotation(invocation.getInvokable(), Encoded.class).isEmpty();
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/e331a000/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
index 8e942d8..73355ad 100644
--- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
@@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import static javax.ws.rs.core.MediaType.APPLICATION_XML;
 import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.jclouds.io.Payloads.newInputStreamPayload;
 import static org.jclouds.io.Payloads.newStringPayload;
 import static org.jclouds.providers.AnonymousProviderMetadata.forApiOnEndpoint;
@@ -1559,6 +1560,17 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
       assertEquals(request.getFilters().get(1).getClass(), ConnectionCloseHeader.class);
    }
 
+   @Test
+   public void testZeroContentStripExpectHeader() {
+      Invokable<?, ?> method = method(TestRequestFilter.class, "post");
+      Invocation invocation = Invocation.create(method,
+              ImmutableList.<Object>of(HttpRequest.builder().method("POST").endpoint("http://localhost")
+                      .payload(new byte[0]).addHeader(HttpHeaders.EXPECT, "100-Continue")
+                      .build()));
+      GeneratedHttpRequest request = processor.apply(invocation);
+      assertThat(request.getFirstHeaderOrNull(HttpHeaders.EXPECT)).isNull();
+   }
+
    public static class TestEncoding {
       @GET
       @Path("/{path1}/{path2}")