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 2006/08/06 13:26:06 UTC

svn commit: r429124 - /jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java

Author: olegk
Date: Sun Aug  6 04:26:05 2006
New Revision: 429124

URL: http://svn.apache.org/viewvc?rev=429124&view=rev
Log:
* Provided super-classes of HttpService with a means to override the default connection re-use strategy and response factory
* Made sure HttpService picks up the correct HTTP protocol version per default

Modified:
    jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java

Modified: jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java?rev=429124&r1=429123&r2=429124&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/protocol/HttpService.java Sun Aug  6 04:26:05 2006
@@ -38,6 +38,7 @@
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseFactory;
 import org.apache.http.HttpServerConnection;
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
@@ -45,6 +46,7 @@
 import org.apache.http.ProtocolException;
 import org.apache.http.UnsupportedHttpVersionException;
 import org.apache.http.impl.DefaultConnectionReuseStrategy;
+import org.apache.http.impl.DefaultHttpResponseFactory;
 import org.apache.http.message.BasicHttpResponse;
 import org.apache.http.params.HttpParams;
 
@@ -58,12 +60,13 @@
 public class HttpService extends AbstractHttpProcessor {
 
     private final HttpServerConnection conn;
-    private final ConnectionReuseStrategy connStrategy;
     private final HttpContext context;
 
     private volatile boolean destroyed = false;
     
     private HttpParams params = null;
+    private ConnectionReuseStrategy connStrategy = null;
+    private HttpResponseFactory responseFactory = null;
 
     public HttpService(final HttpServerConnection conn) {
         this(conn, null);
@@ -75,8 +78,23 @@
             throw new IllegalArgumentException("HTTP server connection may not be null");
         }
         this.conn = conn;
-        this.connStrategy = new DefaultConnectionReuseStrategy();
         this.context = new HttpExecutionContext(parentContext);
+        this.connStrategy = new DefaultConnectionReuseStrategy();
+        this.responseFactory = new DefaultHttpResponseFactory();
+    }
+    
+    protected void setConnReuseStrategy(final ConnectionReuseStrategy connStrategy) {
+        if (connStrategy == null) {
+            throw new IllegalArgumentException("Connection reuse strategy may not be null");
+        }
+        this.connStrategy = connStrategy;
+    }
+
+    protected void setResponseFactory(final HttpResponseFactory responseFactory) {
+        if (responseFactory == null) {
+            throw new IllegalArgumentException("Response factory may not be null");
+        }
+        this.responseFactory = responseFactory;
     }
     
     public HttpContext getContext() {
@@ -105,10 +123,18 @@
             
     public void handleRequest() { 
         this.context.setAttribute(HttpExecutionContext.HTTP_CONNECTION, this.conn);
-        BasicHttpResponse response = new BasicHttpResponse();
-        response.getParams().setDefaults(this.params);
+        HttpResponse response;
         try {
             HttpRequest request = this.conn.receiveRequestHeader(this.params);
+            HttpVersion ver = request.getRequestLine().getHttpVersion();
+            if (!ver.lessEquals(HttpVersion.HTTP_1_1)) {
+                // Downgrade protocol version if greater than HTTP/1.1 
+                ver = HttpVersion.HTTP_1_1;
+            }
+
+            response = this.responseFactory.newHttpResponse(ver, HttpStatus.SC_OK);
+            response.getParams().setDefaults(this.params);
+            
             if (request instanceof HttpEntityEnclosingRequest) {
                 if (((HttpEntityEnclosingRequest) request).expectContinue()) {
 
@@ -124,7 +150,7 @@
             }
             preprocessRequest(request, this.context);
             logMessage("Request received");
-            
+
             this.context.setAttribute(HttpExecutionContext.HTTP_REQUEST, request);
             this.context.setAttribute(HttpExecutionContext.HTTP_RESPONSE, response);
             doService(request, response);
@@ -141,6 +167,9 @@
             closeConnection();
             return;
         } catch (HttpException ex) {
+            response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_0, 
+                    HttpStatus.SC_INTERNAL_SERVER_ERROR);
+            response.getParams().setDefaults(this.params);
             handleException(ex, response);
         } catch (IOException ex) {
             logIOException(ex);
@@ -183,12 +212,7 @@
     
     protected void doService(final HttpRequest request, final HttpResponse response) 
             throws HttpException, IOException {
-        HttpVersion ver = request.getRequestLine().getHttpVersion();
-        if (ver.lessEquals(HttpVersion.HTTP_1_1)) {
-            response.setStatusCode(HttpStatus.SC_NOT_IMPLEMENTED);
-        } else {
-            response.setStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_IMPLEMENTED);
-        }
+        response.setStatusCode(HttpStatus.SC_NOT_IMPLEMENTED);
     }
     
     protected void logMessage(final String s) {