You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2014/11/26 21:30:09 UTC
svn commit: r1641930 [2/3] - in /httpcomponents/httpcore/trunk:
httpcore-ab/src/main/java/org/apache/http/benchmark/
httpcore-nio/src/examples/org/apache/http/examples/nio/
httpcore-nio/src/main/java/org/apache/http/impl/nio/
httpcore-nio/src/main/java...
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestConsumer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestConsumer.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestConsumer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestConsumer.java Wed Nov 26 20:30:08 2014
@@ -31,7 +31,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.nio.ContentDecoder;
import org.apache.http.nio.IOControl;
@@ -47,7 +47,7 @@ import org.mockito.MockitoAnnotations;
public class TestBasicAsyncRequestConsumer {
private BasicAsyncRequestConsumer consumer;
- @Mock private HttpEntityEnclosingRequest request;
+ @Mock private HttpRequest request;
@Mock private HttpContext context;
@Mock private ContentDecoder decoder;
@Mock private IOControl ioctrl;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestProducer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestProducer.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestProducer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestBasicAsyncRequestProducer.java Wed Nov 26 20:30:08 2014
@@ -31,7 +31,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.nio.ContentEncoder;
@@ -48,7 +47,7 @@ public class TestBasicAsyncRequestProduc
private BasicAsyncRequestProducer producer;
private HttpHost target;
@Mock private HttpAsyncContentProducer contentProducer;
- @Mock private HttpEntityEnclosingRequest request;
+ @Mock private HttpRequest request;
@Mock private ContentEncoder encoder;
@Before
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java Wed Nov 26 20:30:08 2014
@@ -38,7 +38,6 @@ import org.apache.http.HttpRequest;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.entity.BasicHttpEntity;
-import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.nio.ContentDecoder;
@@ -202,8 +201,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.exchangeHandler.generateRequest()).thenReturn(request);
this.protocolHandler.requestReady(this.conn);
@@ -220,7 +221,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
Mockito.when(this.exchangeHandler.generateRequest()).thenReturn(request);
Mockito.when(this.conn.getSocketTimeout()).thenReturn(1000);
@@ -300,8 +304,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
state.setRequestState(MessageState.ACK_EXPECTED);
state.setTimeout(1000);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequest(request);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
@@ -321,8 +327,10 @@ public class TestHttpAsyncRequestExecuto
public void testResponseContinueOutOfSequence() throws Exception {
final State state = new HttpAsyncRequestExecutor.State();
state.setRequestState(MessageState.COMPLETED);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequest(request);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
@@ -341,8 +349,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
state.setRequestState(MessageState.ACK_EXPECTED);
state.setTimeout(1000);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequest(request);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
@@ -357,8 +367,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
state.setRequestState(MessageState.ACK_EXPECTED);
state.setTimeout(1000);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequest(request);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
@@ -379,8 +391,10 @@ public class TestHttpAsyncRequestExecuto
final State state = new HttpAsyncRequestExecutor.State();
state.setRequestState(MessageState.BODY_STREAM);
state.setTimeout(1000);
- final BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/");
- request.setEntity(new NStringEntity("stuff"));
+ final BasicHttpRequest request = new BasicHttpRequest("POST", "/");
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequest(request);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this.exchangeHandler);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java Wed Nov 26 20:30:08 2014
@@ -33,7 +33,6 @@ import java.util.Queue;
import org.apache.http.ConnectionReuseStrategy;
import org.apache.http.HeaderElements;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
@@ -43,7 +42,6 @@ import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.concurrent.Cancellable;
import org.apache.http.impl.DefaultHttpResponseFactory;
-import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.nio.ContentDecoder;
@@ -417,9 +415,10 @@ public class TestHttpAsyncService {
final State state = new State();
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST",
- "/stuff", HttpVersion.HTTP_1_1);
- request.setEntity(new NStringEntity("stuff"));
+ final HttpRequest request = new BasicHttpRequest("POST", "/stuff", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
Mockito.eq(request), Mockito.any(HttpContext.class))).thenReturn(this.requestConsumer);
@@ -440,8 +439,10 @@ public class TestHttpAsyncService {
final State state = new State();
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
Mockito.eq(request), Mockito.any(HttpContext.class))).thenReturn(this.requestConsumer);
@@ -473,9 +474,11 @@ public class TestHttpAsyncService {
final State state = new State();
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
Mockito.eq(request), Mockito.any(HttpContext.class))).thenReturn(this.requestConsumer);
@@ -521,9 +524,11 @@ public class TestHttpAsyncService {
final State state = new State();
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
Mockito.eq(request), Mockito.any(HttpContext.class))).thenReturn(this.requestConsumer);
@@ -604,9 +609,11 @@ public class TestHttpAsyncService {
state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
@@ -636,9 +643,11 @@ public class TestHttpAsyncService {
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
Mockito.when(this.requestHandler.processRequest(
@@ -663,9 +672,11 @@ public class TestHttpAsyncService {
this.conn = Mockito.mock(NHttpServerConnection.class,
Mockito.withSettings().extraInterfaces(SessionBufferStatus.class));
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
request.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
Mockito.when(this.conn.getContext()).thenReturn(this.connContext);
Mockito.when(this.conn.getHttpRequest()).thenReturn(request);
@@ -718,8 +729,10 @@ public class TestHttpAsyncService {
public void testRequestContent() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequestState(MessageState.BODY_STREAM);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
@@ -740,8 +753,10 @@ public class TestHttpAsyncService {
public void testRequestContentCompleted() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequestState(MessageState.BODY_STREAM);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
@@ -773,8 +788,10 @@ public class TestHttpAsyncService {
public void testRequestCompletedWithException() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
state.setRequestState(MessageState.BODY_STREAM);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
@@ -997,8 +1014,10 @@ public class TestHttpAsyncService {
public void testResponseContinue() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
state.setIncoming(incoming);
@@ -1033,8 +1052,10 @@ public class TestHttpAsyncService {
public void testResponseFailedExpectation() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
state.setIncoming(incoming);
@@ -1141,8 +1162,10 @@ public class TestHttpAsyncService {
public void testInvalidResponseStatus() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
state.setIncoming(incoming);
@@ -1164,8 +1187,10 @@ public class TestHttpAsyncService {
public void testInvalidResponseStatusToExpection() throws Exception {
final State state = new State();
final HttpContext exchangeContext = new BasicHttpContext();
- final HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/",
- HttpVersion.HTTP_1_1);
+ final HttpRequest request = new BasicHttpRequest("POST", "/", HttpVersion.HTTP_1_1);
+ request.setHeader(HttpHeaders.CONTENT_LENGTH, "5");
+ final NStringEntity entity = new NStringEntity("stuff");
+ request.setEntity(entity);
final Incoming incoming = new Incoming(
request, this.requestHandler, this.requestConsumer, exchangeContext);
state.setIncoming(incoming);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpClientConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpClientConnection.java Wed Nov 26 20:30:08 2014
@@ -58,7 +58,7 @@ public class LoggingNHttpClientConnectio
this.wirelog = LogFactory.getLog("org.apache.http.wire");
this.id = "http-outgoing-" + COUNT.incrementAndGet();
if (this.iolog.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
- this.session = new LoggingIOSession(session, this.id, this.iolog, this.wirelog);
+ bind(new LoggingIOSession(session, this.id, this.iolog, this.wirelog));
}
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpServerConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/LoggingNHttpServerConnection.java Wed Nov 26 20:30:08 2014
@@ -58,7 +58,7 @@ public class LoggingNHttpServerConnectio
this.wirelog = LogFactory.getLog("org.apache.http.wire");
this.id = "http-incoming-" + COUNT.incrementAndGet();
if (this.iolog.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
- this.session = new LoggingIOSession(session, this.id, this.iolog, this.wirelog);
+ bind(new LoggingIOSession(session, this.id, this.iolog, this.wirelog));
}
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpPost.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpPost.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpPost.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpPost.java Wed Nov 26 20:30:08 2014
@@ -34,6 +34,7 @@ import org.apache.http.ConnectionReuseSt
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
@@ -41,7 +42,7 @@ import org.apache.http.entity.InputStrea
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultBHttpClientConnection;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.message.BasicHttpEntityEnclosingRequest;
+import org.apache.http.message.BasicHttpRequest;
import org.apache.http.protocol.HttpCoreContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpProcessorBuilder;
@@ -96,7 +97,7 @@ public class ElementalHttpPost {
Socket socket = new Socket(host.getHostName(), host.getPort());
conn.bind(socket);
}
- BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST",
+ HttpRequest request = new BasicHttpRequest("POST",
"/servlets-examples/servlet/RequestInfoExample");
request.setEntity(requestBodies[i]);
System.out.println(">> Request URI: " + request.getRequestLine().getUri());
Modified: httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/HttpFileServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/HttpFileServer.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/HttpFileServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/HttpFileServer.java Wed Nov 26 20:30:08 2014
@@ -42,7 +42,6 @@ import org.apache.http.ConnectionClosedE
import org.apache.http.ExceptionLogger;
import org.apache.http.HttpConnection;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
@@ -151,30 +150,30 @@ public class HttpFileServer {
}
String target = request.getRequestLine().getUri();
- if (request instanceof HttpEntityEnclosingRequest) {
- HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
- byte[] entityContent = EntityUtils.toByteArray(entity);
- System.out.println("Incoming entity content (bytes): " + entityContent.length);
+ HttpEntity incomingEntity = request.getEntity();
+ if (incomingEntity != null) {
+ byte[] entityContent = EntityUtils.toByteArray(incomingEntity);
+ System.out.println("Incoming incomingEntity content (bytes): " + entityContent.length);
}
final File file = new File(this.docRoot, URLDecoder.decode(target, "UTF-8"));
if (!file.exists()) {
response.setStatusCode(HttpStatus.SC_NOT_FOUND);
- StringEntity entity = new StringEntity(
+ StringEntity outgoingEntity = new StringEntity(
"<html><body><h1>File" + file.getPath() +
" not found</h1></body></html>",
ContentType.create("text/html", "UTF-8"));
- response.setEntity(entity);
+ response.setEntity(outgoingEntity);
System.out.println("File " + file.getPath() + " not found");
} else if (!file.canRead() || file.isDirectory()) {
response.setStatusCode(HttpStatus.SC_FORBIDDEN);
- StringEntity entity = new StringEntity(
+ StringEntity outgoingEntity = new StringEntity(
"<html><body><h1>Access denied</h1></body></html>",
ContentType.create("text/html", "UTF-8"));
- response.setEntity(entity);
+ response.setEntity(outgoingEntity);
System.out.println("Cannot read file " + file.getPath());
} else {
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpClientConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpClientConnection.java Wed Nov 26 20:30:08 2014
@@ -52,7 +52,7 @@ public interface HttpClientConnection ex
* @throws HttpException in case of HTTP protocol violation
* @throws IOException in case of an I/O error
*/
- void sendRequestEntity(HttpEntityEnclosingRequest request)
+ void sendRequestEntity(HttpRequest request)
throws HttpException, IOException;
/**
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpEntity.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpEntity.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpEntity.java Wed Nov 26 20:30:08 2014
@@ -33,9 +33,6 @@ import java.io.OutputStream;
/**
* An entity that can be sent or received with an HTTP message.
- * Entities can be found in some
- * {@link HttpEntityEnclosingRequest requests} and in
- * {@link HttpResponse responses}, where they are optional.
* <p>
* There are three distinct types of entities in HttpCore,
* depending on where their {@link #getContent content} originates:
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpMessage.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpMessage.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpMessage.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpMessage.java Wed Nov 26 20:30:08 2014
@@ -35,7 +35,7 @@ import java.util.Iterator;
*
* @since 4.0
*/
-public interface HttpMessage {
+public interface HttpMessage<T> {
/**
* Returns the protocol version this message is compatible with.
@@ -168,4 +168,25 @@ public interface HttpMessage {
*/
Iterator<Header> headerIterator(String name);
+ /**
+ * Obtains the message entity, if available.
+ *
+ * @return the message entity, or {@code null} if not available
+ *
+ * @since 5.0
+ */
+ T getEntity();
+
+ /**
+ * Sets an entity for this message.
+ * <p>
+ * Please note that if an entity has already been set it is responsibility of the caller
+ * to ensure release of the resources that may be associated with that entity.
+ *
+ * @param entity the entity to set of this message, or {@code null} to unset
+ *
+ * @since 5.0
+ */
+ void setEntity(T entity);
+
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpRequest.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpRequest.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpRequest.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpRequest.java Wed Nov 26 20:30:08 2014
@@ -34,7 +34,7 @@ package org.apache.http;
*
* @since 4.0
*/
-public interface HttpRequest extends HttpMessage {
+public interface HttpRequest extends HttpMessage<HttpEntity> {
/**
* Returns the request line of this request.
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpResponse.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpResponse.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpResponse.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpResponse.java Wed Nov 26 20:30:08 2014
@@ -35,7 +35,7 @@ import java.util.Locale;
*
* @since 4.0
*/
-public interface HttpResponse extends HttpMessage {
+public interface HttpResponse extends HttpMessage<HttpEntity> {
/**
* Obtains the status line of this response.
@@ -104,30 +104,6 @@ public interface HttpResponse extends Ht
throws IllegalStateException;
/**
- * Obtains the message entity of this response, if any.
- * The entity is provided by calling {@link #setEntity setEntity}.
- *
- * @return the response entity, or
- * {@code null} if there is none
- */
- HttpEntity getEntity();
-
- /**
- * Associates a response entity with this response.
- * <p>
- * Please note that if an entity has already been set for this response and it depends on
- * an input stream ({@link HttpEntity#isStreaming()} returns {@code true}),
- * it must be fully consumed in order to ensure release of resources.
- *
- * @param entity the entity to associate with this response, or
- * {@code null} to unset
- *
- * @see HttpEntity#isStreaming()
- * @see org.apache.http.util.EntityUtils#updateEntity(HttpResponse, HttpEntity)
- */
- void setEntity(HttpEntity entity);
-
- /**
* Obtains the locale of this response.
* The locale is used to determine the reason phrase
* for the {@link #setStatusCode status code}.
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpServerConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/HttpServerConnection.java Wed Nov 26 20:30:08 2014
@@ -57,7 +57,7 @@ public interface HttpServerConnection ex
* @throws HttpException in case of HTTP protocol violation
* @throws IOException in case of an I/O error
*/
- void receiveRequestEntity(HttpEntityEnclosingRequest request)
+ void receiveRequestEntity(HttpRequest request)
throws HttpException, IOException;
/**
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/entity/ContentLengthStrategy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/entity/ContentLengthStrategy.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/entity/ContentLengthStrategy.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/entity/ContentLengthStrategy.java Wed Nov 26 20:30:08 2014
@@ -38,17 +38,32 @@ import org.apache.http.HttpMessage;
*/
public interface ContentLengthStrategy {
- public static final int IDENTITY = -1;
- public static final int CHUNKED = -2;
+ /**
+ * Identity transfer encoding. Message content is delineated
+ * by the end of connection.
+ */
+ public static final int IDENTITY = -1;
+
+ /**
+ * Message body chunk coded
+ */
+ public static final long CHUNKED = -2;
+
+ /**
+ * Message body not explicitly delineated. Legal for HTTP response messages
+ * and illegal for HTTP request messages.
+ */
+ public static final long UNDEFINED = -Long.MAX_VALUE;
/**
* Returns length of the given message in bytes. The returned value
* must be a non-negative number, {@link #IDENTITY} if the end of the
- * message will be delimited by the end of connection, or {@link #CHUNKED}
- * if the message is chunk coded
+ * message is delineated by the end of connection, {@link #CHUNKED}
+ * if the message is chunk coded, or {@link #UNDEFINED} if the message
+ * is not explicitly delineated.
*
* @param message HTTP message
- * @return content length, {@link #IDENTITY}, or {@link #CHUNKED}
+ * @return content length, {@link #UNDEFINED}, or {@link #CHUNKED}
*
* @throws HttpException in case of HTTP protocol violation
*/
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/BHttpConnectionBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/BHttpConnectionBase.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/BHttpConnectionBase.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/BHttpConnectionBase.java Wed Nov 26 20:30:08 2014
@@ -45,12 +45,9 @@ import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpMessage;
-import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.config.MessageConstraints;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.entity.ContentLengthStrategy;
-import org.apache.http.impl.entity.LaxContentLengthStrategy;
-import org.apache.http.impl.entity.StrictContentLengthStrategy;
import org.apache.http.impl.io.ChunkedInputStream;
import org.apache.http.impl.io.ChunkedOutputStream;
import org.apache.http.impl.io.ContentLengthInputStream;
@@ -67,47 +64,20 @@ import org.apache.http.util.Args;
import org.apache.http.util.Asserts;
import org.apache.http.util.NetUtils;
-/**
- * This class serves as a base for all {@link org.apache.http.BHttpConnection} implementations
- * and provides functionality common to both client and server HTTP connections.
- *
- * @since 4.0
- */
-@NotThreadSafe
-public class BHttpConnectionBase implements BHttpConnection {
-
- private final SessionInputBufferImpl inbuffer;
- private final SessionOutputBufferImpl outbuffer;
- private final MessageConstraints messageConstraints;
- private final HttpConnectionMetricsImpl connMetrics;
- private final ContentLengthStrategy incomingContentStrategy;
- private final ContentLengthStrategy outgoingContentStrategy;
- private final AtomicReference<Socket> socketHolder;
+class BHttpConnectionBase implements BHttpConnection {
- /**
- * Creates new instance of BHttpConnectionBase.
- *
- * @param buffersize buffer size. Must be a positive number.
- * @param fragmentSizeHint fragment size hint.
- * @param chardecoder decoder to be used for decoding HTTP protocol elements.
- * If {@code null} simple type cast will be used for byte to char conversion.
- * @param charencoder encoder to be used for encoding HTTP protocol elements.
- * If {@code null} simple type cast will be used for char to byte conversion.
- * @param messageConstraints Message constraints. If {@code null}
- * {@link MessageConstraints#DEFAULT} will be used.
- * @param incomingContentStrategy incoming content length strategy. If {@code null}
- * {@link LaxContentLengthStrategy#INSTANCE} will be used.
- * @param outgoingContentStrategy outgoing content length strategy. If {@code null}
- * {@link StrictContentLengthStrategy#INSTANCE} will be used.
- */
- protected BHttpConnectionBase(
+ final SessionInputBufferImpl inbuffer;
+ final SessionOutputBufferImpl outbuffer;
+ final MessageConstraints messageConstraints;
+ final HttpConnectionMetricsImpl connMetrics;
+ final AtomicReference<Socket> socketHolder;
+
+ BHttpConnectionBase(
final int buffersize,
final int fragmentSizeHint,
final CharsetDecoder chardecoder,
final CharsetEncoder charencoder,
- final MessageConstraints messageConstraints,
- final ContentLengthStrategy incomingContentStrategy,
- final ContentLengthStrategy outgoingContentStrategy) {
+ final MessageConstraints messageConstraints) {
super();
Args.positive(buffersize, "Buffer size");
final HttpTransportMetricsImpl inTransportMetrics = new HttpTransportMetricsImpl();
@@ -118,10 +88,6 @@ public class BHttpConnectionBase impleme
charencoder);
this.messageConstraints = messageConstraints;
this.connMetrics = new HttpConnectionMetricsImpl(inTransportMetrics, outTransportMetrics);
- this.incomingContentStrategy = incomingContentStrategy != null ? incomingContentStrategy :
- LaxContentLengthStrategy.INSTANCE;
- this.outgoingContentStrategy = outgoingContentStrategy != null ? outgoingContentStrategy :
- StrictContentLengthStrategy.INSTANCE;
this.socketHolder = new AtomicReference<Socket>();
}
@@ -161,76 +127,57 @@ public class BHttpConnectionBase impleme
this.outbuffer.bind(null);
}
- protected SessionInputBuffer getSessionInputBuffer() {
- return this.inbuffer;
- }
-
- protected SessionOutputBuffer getSessionOutputBuffer() {
- return this.outbuffer;
- }
-
- protected void doFlush() throws IOException {
- this.outbuffer.flush();
- }
-
@Override
public boolean isOpen() {
return this.socketHolder.get() != null;
}
- protected Socket getSocket() {
+ Socket getSocket() {
return this.socketHolder.get();
}
- protected OutputStream createOutputStream(
+ protected OutputStream createContentOutputStream(
final long len,
final SessionOutputBuffer outbuffer) {
- if (len == ContentLengthStrategy.CHUNKED) {
+ if (len >= 0) {
+ return new ContentLengthOutputStream(outbuffer, len);
+ } else if (len == ContentLengthStrategy.CHUNKED) {
return new ChunkedOutputStream(2048, outbuffer);
- } else if (len == ContentLengthStrategy.IDENTITY) {
- return new IdentityOutputStream(outbuffer);
} else {
- return new ContentLengthOutputStream(outbuffer, len);
+ return new IdentityOutputStream(outbuffer);
}
}
- protected OutputStream prepareOutput(final HttpMessage message) throws HttpException {
- final long len = this.outgoingContentStrategy.determineLength(message);
- return createOutputStream(len, this.outbuffer);
- }
-
- protected InputStream createInputStream(
+ protected InputStream createContentInputStream(
final long len,
final SessionInputBuffer inbuffer) {
- if (len == ContentLengthStrategy.CHUNKED) {
- return new ChunkedInputStream(inbuffer, this.messageConstraints);
- } else if (len == ContentLengthStrategy.IDENTITY) {
- return new IdentityInputStream(inbuffer);
- } else if (len == 0L) {
+ if (len > 0) {
+ return new ContentLengthInputStream(inbuffer, len);
+ } else if (len == 0) {
return EmptyInputStream.INSTANCE;
+ } else if (len == ContentLengthStrategy.CHUNKED) {
+ return new ChunkedInputStream(inbuffer, this.messageConstraints);
} else {
- return new ContentLengthInputStream(inbuffer, len);
+ return new IdentityInputStream(inbuffer);
}
}
- protected HttpEntity prepareInput(final HttpMessage message) throws HttpException {
+ HttpEntity createIncomingEntity(
+ final HttpMessage message,
+ final SessionInputBuffer inbuffer,
+ final long len) throws HttpException {
final BasicHttpEntity entity = new BasicHttpEntity();
-
- final long len = this.incomingContentStrategy.determineLength(message);
- final InputStream instream = createInputStream(len, this.inbuffer);
- if (len == ContentLengthStrategy.CHUNKED) {
- entity.setChunked(true);
- entity.setContentLength(-1);
- entity.setContent(instream);
- } else if (len == ContentLengthStrategy.IDENTITY) {
+ if (len >= 0) {
entity.setChunked(false);
+ entity.setContentLength(len);
+ } else if (len == ContentLengthStrategy.CHUNKED) {
+ entity.setChunked(true);
entity.setContentLength(-1);
- entity.setContent(instream);
} else {
entity.setChunked(false);
- entity.setContentLength(len);
- entity.setContent(instream);
+ entity.setContentLength(-1);
}
+ entity.setContent(createContentInputStream(len, inbuffer));
final Header contentTypeHeader = message.getFirstHeader(HttpHeaders.CONTENT_TYPE);
if (contentTypeHeader != null) {
@@ -365,7 +312,7 @@ public class BHttpConnectionBase impleme
@Override
public void flush() throws IOException {
ensureOpen();
- doFlush();
+ this.outbuffer.flush();
}
protected void incrementRequestCount() {
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpClientConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpClientConnection.java Wed Nov 26 20:30:08 2014
@@ -35,14 +35,16 @@ import java.nio.charset.CharsetEncoder;
import org.apache.http.HttpClientConnection;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
+import org.apache.http.ProtocolException;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.config.MessageConstraints;
import org.apache.http.entity.ContentLengthStrategy;
+import org.apache.http.impl.entity.LaxContentLengthStrategy;
+import org.apache.http.impl.entity.StrictContentLengthStrategy;
import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
import org.apache.http.impl.io.DefaultHttpResponseParserFactory;
import org.apache.http.io.HttpMessageParser;
@@ -62,6 +64,8 @@ public class DefaultBHttpClientConnectio
private final HttpMessageParser<HttpResponse> responseParser;
private final HttpMessageWriter<HttpRequest> requestWriter;
+ private final ContentLengthStrategy incomingContentStrategy;
+ private final ContentLengthStrategy outgoingContentStrategy;
/**
* Creates new instance of DefaultBHttpClientConnection.
@@ -93,12 +97,15 @@ public class DefaultBHttpClientConnectio
final ContentLengthStrategy outgoingContentStrategy,
final HttpMessageWriterFactory<HttpRequest> requestWriterFactory,
final HttpMessageParserFactory<HttpResponse> responseParserFactory) {
- super(buffersize, fragmentSizeHint, chardecoder, charencoder,
- constraints, incomingContentStrategy, outgoingContentStrategy);
+ super(buffersize, fragmentSizeHint, chardecoder, charencoder, constraints);
this.requestWriter = (requestWriterFactory != null ? requestWriterFactory :
DefaultHttpRequestWriterFactory.INSTANCE).create();
this.responseParser = (responseParserFactory != null ? responseParserFactory :
DefaultHttpResponseParserFactory.INSTANCE).create(constraints);
+ this.incomingContentStrategy = incomingContentStrategy != null ? incomingContentStrategy :
+ LaxContentLengthStrategy.INSTANCE;
+ this.outgoingContentStrategy = outgoingContentStrategy != null ? outgoingContentStrategy :
+ StrictContentLengthStrategy.INSTANCE;
}
public DefaultBHttpClientConnection(
@@ -129,21 +136,24 @@ public class DefaultBHttpClientConnectio
throws HttpException, IOException {
Args.notNull(request, "HTTP request");
ensureOpen();
- this.requestWriter.write(request, getSessionOutputBuffer());
+ this.requestWriter.write(request, this.outbuffer);
onRequestSubmitted(request);
incrementRequestCount();
}
@Override
- public void sendRequestEntity(final HttpEntityEnclosingRequest request)
- throws HttpException, IOException {
+ public void sendRequestEntity(final HttpRequest request) throws HttpException, IOException {
Args.notNull(request, "HTTP request");
ensureOpen();
final HttpEntity entity = request.getEntity();
if (entity == null) {
return;
}
- final OutputStream outstream = prepareOutput(request);
+ final long len = this.outgoingContentStrategy.determineLength(request);
+ if (len == ContentLengthStrategy.IDENTITY || len == ContentLengthStrategy.UNDEFINED) {
+ throw new ProtocolException("Identity transfer encoding is not allowed for request messages");
+ }
+ final OutputStream outstream = createContentOutputStream(len, this.outbuffer);
entity.writeTo(outstream);
outstream.close();
}
@@ -151,7 +161,7 @@ public class DefaultBHttpClientConnectio
@Override
public HttpResponse receiveResponseHeader() throws HttpException, IOException {
ensureOpen();
- final HttpResponse response = this.responseParser.parse(getSessionInputBuffer());
+ final HttpResponse response = this.responseParser.parse(this.inbuffer);
onResponseReceived(response);
if (response.getStatusLine().getStatusCode() >= HttpStatus.SC_OK) {
incrementResponseCount();
@@ -164,8 +174,11 @@ public class DefaultBHttpClientConnectio
final HttpResponse response) throws HttpException, IOException {
Args.notNull(response, "HTTP response");
ensureOpen();
- final HttpEntity entity = prepareInput(response);
- response.setEntity(entity);
+ final long len = this.incomingContentStrategy.determineLength(response);
+ if (len == ContentLengthStrategy.UNDEFINED) {
+ return;
+ }
+ response.setEntity(createIncomingEntity(response, this.inbuffer, len));
}
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpServerConnection.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultBHttpServerConnection.java Wed Nov 26 20:30:08 2014
@@ -34,15 +34,16 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpServerConnection;
+import org.apache.http.ProtocolException;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.config.MessageConstraints;
import org.apache.http.entity.ContentLengthStrategy;
-import org.apache.http.impl.entity.DisallowIdentityContentLengthStrategy;
+import org.apache.http.impl.entity.LaxContentLengthStrategy;
+import org.apache.http.impl.entity.StrictContentLengthStrategy;
import org.apache.http.impl.io.DefaultHttpRequestParserFactory;
import org.apache.http.impl.io.DefaultHttpResponseWriterFactory;
import org.apache.http.io.HttpMessageParser;
@@ -60,6 +61,8 @@ import org.apache.http.util.Args;
public class DefaultBHttpServerConnection extends BHttpConnectionBase
implements HttpServerConnection {
+ private final ContentLengthStrategy incomingContentStrategy;
+ private final ContentLengthStrategy outgoingContentStrategy;
private final HttpMessageParser<HttpRequest> requestParser;
private final HttpMessageWriter<HttpResponse> responseWriter;
@@ -75,7 +78,7 @@ public class DefaultBHttpServerConnectio
* @param constraints Message constraints. If {@code null}
* {@link MessageConstraints#DEFAULT} will be used.
* @param incomingContentStrategy incoming content length strategy. If {@code null}
- * {@link DisallowIdentityContentLengthStrategy#INSTANCE} will be used.
+ * {@link org.apache.http.impl.entity.LaxContentLengthStrategy#INSTANCE} will be used.
* @param outgoingContentStrategy outgoing content length strategy. If {@code null}
* {@link org.apache.http.impl.entity.StrictContentLengthStrategy#INSTANCE} will be used.
* @param requestParserFactory request parser factory. If {@code null}
@@ -93,13 +96,15 @@ public class DefaultBHttpServerConnectio
final ContentLengthStrategy outgoingContentStrategy,
final HttpMessageParserFactory<HttpRequest> requestParserFactory,
final HttpMessageWriterFactory<HttpResponse> responseWriterFactory) {
- super(buffersize, fragmentSizeHint, chardecoder, charencoder, constraints,
- incomingContentStrategy != null ? incomingContentStrategy :
- DisallowIdentityContentLengthStrategy.INSTANCE, outgoingContentStrategy);
+ super(buffersize, fragmentSizeHint, chardecoder, charencoder, constraints);
this.requestParser = (requestParserFactory != null ? requestParserFactory :
DefaultHttpRequestParserFactory.INSTANCE).create(constraints);
this.responseWriter = (responseWriterFactory != null ? responseWriterFactory :
DefaultHttpResponseWriterFactory.INSTANCE).create();
+ this.incomingContentStrategy = incomingContentStrategy != null ? incomingContentStrategy :
+ LaxContentLengthStrategy.INSTANCE;
+ this.outgoingContentStrategy = outgoingContentStrategy != null ? outgoingContentStrategy :
+ StrictContentLengthStrategy.INSTANCE;
}
public DefaultBHttpServerConnection(
@@ -129,18 +134,25 @@ public class DefaultBHttpServerConnectio
public HttpRequest receiveRequestHeader()
throws HttpException, IOException {
ensureOpen();
- final HttpRequest request = this.requestParser.parse(getSessionInputBuffer());
+ final HttpRequest request = this.requestParser.parse(this.inbuffer);
onRequestReceived(request);
incrementRequestCount();
return request;
}
@Override
- public void receiveRequestEntity(final HttpEntityEnclosingRequest request)
+ public void receiveRequestEntity(final HttpRequest request)
throws HttpException, IOException {
Args.notNull(request, "HTTP request");
ensureOpen();
- final HttpEntity entity = prepareInput(request);
+
+ final long len = this.incomingContentStrategy.determineLength(request);
+ if (len == ContentLengthStrategy.UNDEFINED) {
+ return;
+ } else if (len == ContentLengthStrategy.IDENTITY) {
+ throw new ProtocolException("Identity transfer encoding is not allowed for request messages");
+ }
+ final HttpEntity entity = createIncomingEntity(request, this.inbuffer, len);
request.setEntity(entity);
}
@@ -149,7 +161,7 @@ public class DefaultBHttpServerConnectio
throws HttpException, IOException {
Args.notNull(response, "HTTP response");
ensureOpen();
- this.responseWriter.write(response, getSessionOutputBuffer());
+ this.responseWriter.write(response, this.outbuffer);
onResponseSubmitted(response);
if (response.getStatusLine().getStatusCode() >= 200) {
incrementResponseCount();
@@ -165,7 +177,8 @@ public class DefaultBHttpServerConnectio
if (entity == null) {
return;
}
- final OutputStream outstream = prepareOutput(response);
+ final long len = this.outgoingContentStrategy.determineLength(response);
+ final OutputStream outstream = createContentOutputStream(len, this.outbuffer);
entity.writeTo(outstream);
outstream.close();
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultHttpRequestFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultHttpRequestFactory.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultHttpRequestFactory.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/DefaultHttpRequestFactory.java Wed Nov 26 20:30:08 2014
@@ -32,7 +32,6 @@ import org.apache.http.HttpRequestFactor
import org.apache.http.MethodNotSupportedException;
import org.apache.http.RequestLine;
import org.apache.http.annotation.Immutable;
-import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.util.Args;
@@ -46,24 +45,17 @@ public class DefaultHttpRequestFactory i
public static final DefaultHttpRequestFactory INSTANCE = new DefaultHttpRequestFactory();
- private static final String[] RFC2616_COMMON_METHODS = {
- "GET"
+ private static final String[] SUPPORTED_METHODS = {
+ "GET",
+ "POST",
+ "PUT",
+ "HEAD",
+ "OPTIONS",
+ "DELETE",
+ "TRACE",
+ "CONNECT"
};
- private static final String[] RFC2616_ENTITY_ENC_METHODS = {
- "POST",
- "PUT"
- };
-
- private static final String[] RFC2616_SPECIAL_METHODS = {
- "HEAD",
- "OPTIONS",
- "DELETE",
- "TRACE",
- "CONNECT"
- };
-
-
public DefaultHttpRequestFactory() {
super();
}
@@ -82,11 +74,7 @@ public class DefaultHttpRequestFactory i
throws MethodNotSupportedException {
Args.notNull(requestline, "Request line");
final String method = requestline.getMethod();
- if (isOneOf(RFC2616_COMMON_METHODS, method)) {
- return new BasicHttpRequest(requestline);
- } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) {
- return new BasicHttpEntityEnclosingRequest(requestline);
- } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) {
+ if (isOneOf(SUPPORTED_METHODS, method)) {
return new BasicHttpRequest(requestline);
} else {
throw new MethodNotSupportedException(method + " method not supported");
@@ -96,11 +84,7 @@ public class DefaultHttpRequestFactory i
@Override
public HttpRequest newHttpRequest(final String method, final String uri)
throws MethodNotSupportedException {
- if (isOneOf(RFC2616_COMMON_METHODS, method)) {
- return new BasicHttpRequest(method, uri);
- } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) {
- return new BasicHttpEntityEnclosingRequest(method, uri);
- } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) {
+ if (isOneOf(SUPPORTED_METHODS, method)) {
return new BasicHttpRequest(method, uri);
} else {
throw new MethodNotSupportedException(method
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/LaxContentLengthStrategy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/LaxContentLengthStrategy.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/LaxContentLengthStrategy.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/LaxContentLengthStrategy.java Wed Nov 26 20:30:08 2014
@@ -28,12 +28,10 @@
package org.apache.http.impl.entity;
import org.apache.http.Header;
-import org.apache.http.HeaderElement;
import org.apache.http.HeaderElements;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpMessage;
-import org.apache.http.ParseException;
import org.apache.http.ProtocolException;
import org.apache.http.annotation.Immutable;
import org.apache.http.entity.ContentLengthStrategy;
@@ -44,7 +42,7 @@ import org.apache.http.util.Args;
* unrecognized transfer encodings and malformed {@code Content-Length}
* header values.
* <p>
- * This class recognizes "chunked" and "identitiy" transfer-coding only.
+ * This class recognizes "chunked" transfer-coding only.
*
* @since 4.0
*/
@@ -53,27 +51,11 @@ public class LaxContentLengthStrategy im
public static final LaxContentLengthStrategy INSTANCE = new LaxContentLengthStrategy();
- private final int implicitLen;
-
- /**
- * Creates {@code LaxContentLengthStrategy} instance with the given length used per default
- * when content length is not explicitly specified in the message.
- *
- * @param implicitLen implicit content length.
- *
- * @since 4.2
- */
- public LaxContentLengthStrategy(final int implicitLen) {
- super();
- this.implicitLen = implicitLen;
- }
-
/**
- * Creates {@code LaxContentLengthStrategy} instance. {@link ContentLengthStrategy#IDENTITY}
+ * Creates {@code LaxContentLengthStrategy} instance. {@link ContentLengthStrategy#UNDEFINED}
* is used per default when content length is not explicitly specified in the message.
*/
public LaxContentLengthStrategy() {
- this(IDENTITY);
}
@Override
@@ -81,27 +63,17 @@ public class LaxContentLengthStrategy im
Args.notNull(message, "HTTP message");
final Header transferEncodingHeader = message.getFirstHeader(HttpHeaders.TRANSFER_ENCODING);
- // We use Transfer-Encoding if present and ignore Content-Length.
- // RFC2616, 4.4 item number 3
+ // Although Transfer-Encoding is specified as a list, in practice
+ // it is either missing or has the single value "chunked". So we
+ // treat it as a single-valued header here.
if (transferEncodingHeader != null) {
- final HeaderElement[] encodings;
- try {
- encodings = transferEncodingHeader.getElements();
- } catch (final ParseException px) {
- throw new ProtocolException
- ("Invalid Transfer-Encoding header value: " +
- transferEncodingHeader, px);
- }
- // The chunked encoding must be the last one applied RFC2616, 14.41
- final int len = encodings.length;
- if (HeaderElements.IDENTITY_ENCODING.equalsIgnoreCase(
- transferEncodingHeader.getValue())) {
- return IDENTITY;
- } else if ((len > 0) && (HeaderElements.CHUNKED_ENCODING.equalsIgnoreCase
- (encodings[len - 1].getName()))) {
+ final String s = transferEncodingHeader.getValue();
+ if (HeaderElements.CHUNKED_ENCODING.equalsIgnoreCase(s)) {
return CHUNKED;
- } else {
+ } else if (HeaderElements.IDENTITY_ENCODING.equalsIgnoreCase(s)) {
return IDENTITY;
+ } else {
+ throw new ProtocolException("Unsupported transfer encoding: " + s);
}
}
if (message.containsHeader(HttpHeaders.CONTENT_LENGTH)) {
@@ -119,10 +91,10 @@ public class LaxContentLengthStrategy im
if (contentlen >= 0) {
return contentlen;
} else {
- return IDENTITY;
+ throw new ProtocolException("Invalid content length");
}
}
- return this.implicitLen;
+ return UNDEFINED;
}
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/StrictContentLengthStrategy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/StrictContentLengthStrategy.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/StrictContentLengthStrategy.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/entity/StrictContentLengthStrategy.java Wed Nov 26 20:30:08 2014
@@ -32,7 +32,6 @@ import org.apache.http.HeaderElements;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpMessage;
-import org.apache.http.HttpVersion;
import org.apache.http.ProtocolException;
import org.apache.http.annotation.Immutable;
import org.apache.http.entity.ContentLengthStrategy;
@@ -44,7 +43,7 @@ import org.apache.http.util.Args;
* transfer encoding or a malformed {@code Content-Length} header
* value.
* <p>
- * This class recognizes "chunked" and "identitiy" transfer-coding only.
+ * This class recognizes "chunked" transfer-coding only.
*
* @since 4.0
*/
@@ -53,27 +52,11 @@ public class StrictContentLengthStrategy
public static final StrictContentLengthStrategy INSTANCE = new StrictContentLengthStrategy();
- private final int implicitLen;
-
- /**
- * Creates {@code StrictContentLengthStrategy} instance with the given length used per default
- * when content length is not explicitly specified in the message.
- *
- * @param implicitLen implicit content length.
- *
- * @since 4.2
- */
- public StrictContentLengthStrategy(final int implicitLen) {
- super();
- this.implicitLen = implicitLen;
- }
-
/**
- * Creates {@code StrictContentLengthStrategy} instance. {@link ContentLengthStrategy#IDENTITY}
+ * Creates {@code StrictContentLengthStrategy} instance. {@link ContentLengthStrategy#UNDEFINED}
* is used per default when content length is not explicitly specified in the message.
*/
public StrictContentLengthStrategy() {
- this(IDENTITY);
}
@Override
@@ -86,17 +69,11 @@ public class StrictContentLengthStrategy
if (transferEncodingHeader != null) {
final String s = transferEncodingHeader.getValue();
if (HeaderElements.CHUNKED_ENCODING.equalsIgnoreCase(s)) {
- if (message.getProtocolVersion().lessEquals(HttpVersion.HTTP_1_0)) {
- throw new ProtocolException(
- "Chunked transfer encoding not allowed for " +
- message.getProtocolVersion());
- }
return CHUNKED;
} else if (HeaderElements.IDENTITY_ENCODING.equalsIgnoreCase(s)) {
return IDENTITY;
} else {
- throw new ProtocolException(
- "Unsupported transfer encoding: " + s);
+ throw new ProtocolException("Unsupported transfer encoding: " + s);
}
}
final Header contentLengthHeader = message.getFirstHeader(HttpHeaders.CONTENT_LENGTH);
@@ -112,7 +89,7 @@ public class StrictContentLengthStrategy
throw new ProtocolException("Invalid content length: " + s);
}
}
- return this.implicitLen;
+ return UNDEFINED;
}
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/AbstractHttpMessage.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/AbstractHttpMessage.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/AbstractHttpMessage.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/AbstractHttpMessage.java Wed Nov 26 20:30:08 2014
@@ -27,6 +27,7 @@
package org.apache.http.message;
+import org.apache.http.HttpEntity;
import org.apache.http.HttpMessage;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.util.Args;
@@ -37,7 +38,9 @@ import org.apache.http.util.Args;
* @since 4.0
*/
@NotThreadSafe
-public abstract class AbstractHttpMessage extends HeaderGroup implements HttpMessage {
+public abstract class AbstractHttpMessage extends HeaderGroup implements HttpMessage<HttpEntity> {
+
+ private HttpEntity entity;
@Override
public void addHeader(final String name, final String value) {
@@ -51,4 +54,14 @@ public abstract class AbstractHttpMessag
setHeader(new BasicHeader(name, value));
}
+ @Override
+ public HttpEntity getEntity() {
+ return this.entity;
+ }
+
+ @Override
+ public void setEntity(final HttpEntity entity) {
+ this.entity = entity;
+ }
+
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/BasicHttpResponse.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/BasicHttpResponse.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/BasicHttpResponse.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/message/BasicHttpResponse.java Wed Nov 26 20:30:08 2014
@@ -29,7 +29,6 @@ package org.apache.http.message;
import java.util.Locale;
-import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.ProtocolVersion;
@@ -52,7 +51,6 @@ public class BasicHttpResponse extends A
private ProtocolVersion ver;
private int code;
private String reasonPhrase;
- private HttpEntity entity;
private final ReasonPhraseCatalog reasonCatalog;
private Locale locale;
@@ -138,12 +136,6 @@ public class BasicHttpResponse extends A
return this.statusline;
}
- // non-javadoc, see interface HttpResponse
- @Override
- public HttpEntity getEntity() {
- return this.entity;
- }
-
@Override
public Locale getLocale() {
return this.locale;
@@ -195,12 +187,6 @@ public class BasicHttpResponse extends A
this.reasonPhrase = reason;
}
- // non-javadoc, see interface HttpResponse
- @Override
- public void setEntity(final HttpEntity entity) {
- this.entity = entity;
- }
-
@Override
public void setLocale(final Locale locale) {
this.locale = Args.notNull(locale, "Locale");
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestExecutor.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestExecutor.java Wed Nov 26 20:30:08 2014
@@ -29,15 +29,15 @@ package org.apache.http.protocol;
import java.io.IOException;
+import org.apache.http.Header;
import org.apache.http.HttpClientConnection;
-import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
+import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
-import org.apache.http.HttpVersion;
import org.apache.http.ProtocolException;
-import org.apache.http.ProtocolVersion;
import org.apache.http.annotation.Immutable;
import org.apache.http.util.Args;
@@ -202,15 +202,15 @@ public class HttpRequestExecutor {
context.setAttribute(HttpCoreContext.HTTP_REQ_SENT, Boolean.FALSE);
conn.sendRequestHeader(request);
- if (request instanceof HttpEntityEnclosingRequest) {
+ final HttpEntity entity = request.getEntity();
+ if (entity != null) {
// Check for expect-continue handshake. We have to flush the
// headers and wait for an 100-continue response to handle it.
// If we get a different response, we must not send the entity.
boolean sendentity = true;
- final ProtocolVersion ver =
- request.getRequestLine().getProtocolVersion();
- if (((HttpEntityEnclosingRequest) request).expectContinue() &&
- !ver.lessEquals(HttpVersion.HTTP_1_0)) {
+ final Header expect = request.getFirstHeader(HttpHeaders.EXPECT);
+ final boolean expectContinue = expect != null && "100-continue".equalsIgnoreCase(expect.getValue());
+ if (expectContinue) {
conn.flush();
// As suggested by RFC 2616 section 8.2.3, we don't wait for a
@@ -234,7 +234,7 @@ public class HttpRequestExecutor {
}
}
if (sendentity) {
- conn.sendRequestEntity((HttpEntityEnclosingRequest) request);
+ conn.sendRequestEntity(request);
}
}
conn.flush();
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpService.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpService.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpService.java Wed Nov 26 20:30:08 2014
@@ -30,9 +30,10 @@ package org.apache.http.protocol;
import java.io.IOException;
import org.apache.http.ConnectionReuseStrategy;
+import org.apache.http.Header;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
+import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseFactory;
@@ -161,31 +162,30 @@ public class HttpService {
try {
final HttpRequest request = conn.receiveRequestHeader();
- if (request instanceof HttpEntityEnclosingRequest) {
-
- if (((HttpEntityEnclosingRequest) request).expectContinue()) {
- response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_1,
- HttpStatus.SC_CONTINUE, context);
- if (this.expectationVerifier != null) {
- try {
- this.expectationVerifier.verify(request, response, context);
- } catch (final HttpException ex) {
- response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_0,
- HttpStatus.SC_INTERNAL_SERVER_ERROR, context);
- handleException(ex, response);
- }
- }
- if (response.getStatusLine().getStatusCode() < 200) {
- // Send 1xx response indicating the server expections
- // have been met
- conn.sendResponseHeader(response);
- conn.flush();
- response = null;
- conn.receiveRequestEntity((HttpEntityEnclosingRequest) request);
+ final Header expect = request.getFirstHeader(HttpHeaders.EXPECT);
+ final boolean expectContinue = expect != null && "100-continue".equalsIgnoreCase(expect.getValue());
+ if (expectContinue) {
+ response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_1,
+ HttpStatus.SC_CONTINUE, context);
+ if (this.expectationVerifier != null) {
+ try {
+ this.expectationVerifier.verify(request, response, context);
+ } catch (final HttpException ex) {
+ response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_0,
+ HttpStatus.SC_INTERNAL_SERVER_ERROR, context);
+ handleException(ex, response);
}
- } else {
- conn.receiveRequestEntity((HttpEntityEnclosingRequest) request);
}
+ if (response.getStatusLine().getStatusCode() < 200) {
+ // Send 1xx response indicating the server expections
+ // have been met
+ conn.sendResponseHeader(response);
+ conn.flush();
+ response = null;
+ conn.receiveRequestEntity(request);
+ }
+ } else {
+ conn.receiveRequestEntity(request);
}
context.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
@@ -198,10 +198,8 @@ public class HttpService {
}
// Make sure the request content is fully consumed
- if (request instanceof HttpEntityEnclosingRequest) {
- final HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity();
- EntityUtils.consume(entity);
- }
+ final HttpEntity entity = request.getEntity();
+ EntityUtils.consume(entity);
} catch (final HttpException ex) {
response = this.responseFactory.newHttpResponse
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestContent.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestContent.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestContent.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestContent.java Wed Nov 26 20:30:08 2014
@@ -31,7 +31,6 @@ import java.io.IOException;
import org.apache.http.HeaderElements;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
@@ -86,24 +85,20 @@ public class RequestContent implements H
public void process(final HttpRequest request, final HttpContext context)
throws HttpException, IOException {
Args.notNull(request, "HTTP request");
- if (request instanceof HttpEntityEnclosingRequest) {
- if (this.overwrite) {
- request.removeHeaders(HttpHeaders.TRANSFER_ENCODING);
- request.removeHeaders(HttpHeaders.CONTENT_LENGTH);
- } else {
- if (request.containsHeader(HttpHeaders.TRANSFER_ENCODING)) {
- throw new ProtocolException("Transfer-encoding header already present");
- }
- if (request.containsHeader(HttpHeaders.CONTENT_LENGTH)) {
- throw new ProtocolException("Content-Length header already present");
- }
+ if (this.overwrite) {
+ request.removeHeaders(HttpHeaders.TRANSFER_ENCODING);
+ request.removeHeaders(HttpHeaders.CONTENT_LENGTH);
+ } else {
+ if (request.containsHeader(HttpHeaders.TRANSFER_ENCODING)) {
+ throw new ProtocolException("Transfer-encoding header already present");
}
- final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
- final HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity();
- if (entity == null) {
- request.addHeader(HttpHeaders.CONTENT_LENGTH, "0");
- return;
+ if (request.containsHeader(HttpHeaders.CONTENT_LENGTH)) {
+ throw new ProtocolException("Content-Length header already present");
}
+ }
+ final HttpEntity entity = request.getEntity();
+ if (entity != null) {
+ final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
// Must specify a transfer encoding or a content length
if (entity.isChunked() || entity.getContentLength() < 0) {
if (ver.lessEquals(HttpVersion.HTTP_1_0)) {
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestDate.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestDate.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestDate.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestDate.java Wed Nov 26 20:30:08 2014
@@ -29,7 +29,7 @@ package org.apache.http.protocol;
import java.io.IOException;
-import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
@@ -57,8 +57,8 @@ public class RequestDate implements Http
public void process(final HttpRequest request, final HttpContext context)
throws HttpException, IOException {
Args.notNull(request, "HTTP request");
- if ((request instanceof HttpEntityEnclosingRequest) &&
- !request.containsHeader(HttpHeaders.DATE)) {
+ final HttpEntity entity = request.getEntity();
+ if (entity != null && !request.containsHeader(HttpHeaders.DATE)) {
final String httpdate = DATE_GENERATOR.getCurrentDate();
request.setHeader(HttpHeaders.DATE, httpdate);
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestExpectContinue.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestExpectContinue.java?rev=1641930&r1=1641929&r2=1641930&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestExpectContinue.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/RequestExpectContinue.java Wed Nov 26 20:30:08 2014
@@ -31,7 +31,6 @@ import java.io.IOException;
import org.apache.http.HeaderElements;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
@@ -61,12 +60,11 @@ public class RequestExpectContinue imple
Args.notNull(request, "HTTP request");
if (!request.containsHeader(HttpHeaders.EXPECT)) {
- if (request instanceof HttpEntityEnclosingRequest) {
+ final HttpEntity entity = request.getEntity();
+ if (entity != null) {
final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
- final HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity();
// Do not send the expect header if request body is known to be empty
- if (entity != null
- && entity.getContentLength() != 0 && !ver.lessEquals(HttpVersion.HTTP_1_0)) {
+ if (entity.getContentLength() != 0 && !ver.lessEquals(HttpVersion.HTTP_1_0)) {
request.addHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
}
}