mirror of https://github.com/apache/jclouds.git
JCLOUDS-1322: Remove Expect header for requests with empty body
Signed-off-by: Chaithanya Ganta <ganta@adobe.com>
This commit is contained in:
parent
7cbc16d99c
commit
e331a000d1
|
@ -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.ETAG;
|
||||||
import static com.google.common.net.HttpHeaders.EXPECT;
|
import static com.google.common.net.HttpHeaders.EXPECT;
|
||||||
import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
|
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.jclouds.Constants.PROPERTY_MAX_RETRIES;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ public class S3ClientMockTest {
|
||||||
RecordedRequest request = server.takeRequest();
|
RecordedRequest request = server.takeRequest();
|
||||||
assertEquals(request.getRequestLine(), "PUT /bucket/object HTTP/1.1");
|
assertEquals(request.getRequestLine(), "PUT /bucket/object HTTP/1.1");
|
||||||
assertEquals(request.getHeaders(CONTENT_LENGTH), ImmutableList.of("0"));
|
assertEquals(request.getHeaders(CONTENT_LENGTH), ImmutableList.of("0"));
|
||||||
assertEquals(request.getHeaders(EXPECT), ImmutableList.of("100-continue"));
|
assertThat(request.getHeaders(EXPECT)).isEmpty();
|
||||||
server.shutdown();
|
server.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -357,6 +357,9 @@ public class RestAnnotationProcessor implements Function<Invocation, HttpRequest
|
||||||
if (request.getPayload() != null) {
|
if (request.getPayload() != null) {
|
||||||
contentMetadataCodec.fromHeaders(request.getPayload().getContentMetadata(), headers);
|
contentMetadataCodec.fromHeaders(request.getPayload().getContentMetadata(), headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
request = stripExpectHeaderIfContentZero(request);
|
||||||
|
|
||||||
utils.checkRequestHasRequiredProperties(request);
|
utils.checkRequestHasRequiredProperties(request);
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
@ -779,6 +782,18 @@ public class RestAnnotationProcessor implements Function<Invocation, HttpRequest
|
||||||
return parts.build();
|
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) {
|
private boolean isEncodedUsed(Invocation invocation) {
|
||||||
return !parametersWithAnnotation(invocation.getInvokable(), Encoded.class).isEmpty();
|
return !parametersWithAnnotation(invocation.getInvokable(), Encoded.class).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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_JSON;
|
||||||
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
|
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
|
||||||
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
|
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.newInputStreamPayload;
|
||||||
import static org.jclouds.io.Payloads.newStringPayload;
|
import static org.jclouds.io.Payloads.newStringPayload;
|
||||||
import static org.jclouds.providers.AnonymousProviderMetadata.forApiOnEndpoint;
|
import static org.jclouds.providers.AnonymousProviderMetadata.forApiOnEndpoint;
|
||||||
|
@ -1559,6 +1560,17 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
|
||||||
assertEquals(request.getFilters().get(1).getClass(), ConnectionCloseHeader.class);
|
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 {
|
public static class TestEncoding {
|
||||||
@GET
|
@GET
|
||||||
@Path("/{path1}/{path2}")
|
@Path("/{path1}/{path2}")
|
||||||
|
|
Loading…
Reference in New Issue