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}")