You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ws...@apache.org on 2012/08/30 20:54:02 UTC

svn commit: r1379062 - in /httpcomponents/httpcore/trunk: httpcore-nio/src/main/java/org/apache/http/nio/protocol/ httpcore-nio/src/test/java/org/apache/http/nio/protocol/ httpcore/src/main/java/org/apache/http/protocol/

Author: wspeirs
Date: Thu Aug 30 18:54:01 2012
New Revision: 1379062

URL: http://svn.apache.org/viewvc?rev=1379062&view=rev
Log:
- Deprecated Http(Async)RequestHandlerResolver in favor of Http(Async)RequestHandlerMapper
- Create UriHttp(Async)RequestHandlerMapper to mimic Http(Async)RequestHandlerRegistry
- Updated Http(Async)Service with new constructors and converters between Resolver & Mapper
HTTPCORE-308

Added:
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerMapper.java
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/UriHttpAsyncRequestHandlerMapper.java
    httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerMapper.java
    httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/UriHttpRequestHandlerMapper.java
Modified:
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerRegistry.java
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerResolver.java
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java
    httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
    httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java
    httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerResolver.java
    httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpService.java

Added: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerMapper.java?rev=1379062&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerMapper.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerMapper.java Thu Aug 30 18:54:01 2012
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.protocol;
+
+import org.apache.http.HttpRequest;
+
+/**
+ * <tt>HttpAsyncRequestHandlerMapper</tt> can be used to resolve an instance
+ * of {@link HttpAsyncRequestHandler} matching a particular {@link HttpRequest}.
+ * Usually the resolved request handler will be used to process the request.
+ *
+ * @since 4.3
+ */
+public interface HttpAsyncRequestHandlerMapper {
+
+    /**
+     * Looks up a handler matching the given request.
+     *
+     * @param request the request
+     * @return HTTP request handler or <code>null</code> if no match
+     * is found.
+     */
+    HttpAsyncRequestHandler<?> lookup(HttpRequest request);
+
+}

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerRegistry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerRegistry.java?rev=1379062&r1=1379061&r2=1379062&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerRegistry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerRegistry.java Thu Aug 30 18:54:01 2012
@@ -47,8 +47,10 @@ import org.apache.http.protocol.UriPatte
  * will be used to process the request with the specified request URI.
  *
  * @since 4.2
+ * @deprecated (4.3) use {@link UriHttpAsyncRequestHandlerMapper}
  */
 @ThreadSafe
+@Deprecated
 public class HttpAsyncRequestHandlerRegistry implements HttpAsyncRequestHandlerResolver {
 
     private final UriPatternMatcher<HttpAsyncRequestHandler<?>> matcher;

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerResolver.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerResolver.java?rev=1379062&r1=1379061&r2=1379062&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerResolver.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestHandlerResolver.java Thu Aug 30 18:54:01 2012
@@ -28,13 +28,15 @@
 package org.apache.http.nio.protocol;
 
 /**
- * <tt>HttpAsyncRequestHandlerResolver</tt> can be used to resolve an instance
+ * <tt>HttpAsyncRequestHandlerResolver</tt> can be used to map an instance
  * of {@link HttpAsyncRequestHandler} matching a particular request URI.
- * Usually the resolved request handler will be used to process the request
+ * Usually the mapped request handler will be used to process the request
  * with the specified request URI.
  *
  * @since 4.2
+ * @deprecated see {@link HttpAsyncRequestHandlerMapper}
  */
+@Deprecated
 public interface HttpAsyncRequestHandlerResolver {
 
     /**

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java?rev=1379062&r1=1379061&r2=1379062&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java Thu Aug 30 18:54:01 2012
@@ -73,7 +73,7 @@ import org.apache.http.util.Args;
  * Upon receiving an incoming request <tt>HttpAsyncService</tt> verifies
  * the message for compliance with the server expectations using
  * {@link HttpAsyncExpectationVerifier}, if provided, and then
- * {@link HttpAsyncRequestHandlerResolver} is used to resolve the request URI
+ * {@link HttpAsyncRequestHandlerMapper} is used to map the request
  * to a particular {@link HttpAsyncRequestHandler} intended to handle
  * the request with the given URI. The protocol handler uses the selected
  * {@link HttpAsyncRequestHandler} instance to process the incoming request
@@ -108,7 +108,7 @@ public class HttpAsyncService implements
     private final HttpProcessor httpProcessor;
     private final ConnectionReuseStrategy connStrategy;
     private final HttpResponseFactory responseFactory;
-    private final HttpAsyncRequestHandlerResolver handlerResolver;
+    private final HttpAsyncRequestHandlerMapper handlerMapper;
     private final HttpAsyncExpectationVerifier expectationVerifier;
     private final HttpParams params;
 
@@ -118,15 +118,17 @@ public class HttpAsyncService implements
      * @param httpProcessor HTTP protocol processor (required).
      * @param connStrategy Connection re-use strategy (required).
      * @param responseFactory HTTP response factory (required).
-     * @param handlerResolver Request handler resolver.
+     * @param handlerMapper Request handler mapper.
      * @param expectationVerifier Request expectation verifier (optional).
      * @param params HTTP parameters (required).
+     * 
+     * @since 4.3
      */
     public HttpAsyncService(
             final HttpProcessor httpProcessor,
             final ConnectionReuseStrategy connStrategy,
             final HttpResponseFactory responseFactory,
-            final HttpAsyncRequestHandlerResolver handlerResolver,
+            final HttpAsyncRequestHandlerMapper handlerMapper,
             final HttpAsyncExpectationVerifier expectationVerifier,
             final HttpParams params) {
         super();
@@ -137,7 +139,7 @@ public class HttpAsyncService implements
         this.httpProcessor = httpProcessor;
         this.connStrategy = connStrategy;
         this.responseFactory = responseFactory;
-        this.handlerResolver = handlerResolver;
+        this.handlerMapper = handlerMapper;
         this.expectationVerifier = expectationVerifier;
         this.params = params;
     }
@@ -147,16 +149,75 @@ public class HttpAsyncService implements
      *
      * @param httpProcessor HTTP protocol processor (required).
      * @param connStrategy Connection re-use strategy (required).
+     * @param responseFactory HTTP response factory (required).
      * @param handlerResolver Request handler resolver.
+     * @param expectationVerifier Request expectation verifier (optional).
      * @param params HTTP parameters (required).
+     * 
+     * @deprecated (4.3) use {@link HttpAsyncService#HttpAsyncService(HttpProcessor,
+     *  ConnectionReuseStrategy, HttpResponseFactory, HttpAsyncRequestHandlerMapper, HttpAsyncExpectationVerifier, HttpParams)}
      */
     public HttpAsyncService(
             final HttpProcessor httpProcessor,
             final ConnectionReuseStrategy connStrategy,
+            final HttpResponseFactory responseFactory,
             final HttpAsyncRequestHandlerResolver handlerResolver,
+            final HttpAsyncExpectationVerifier expectationVerifier,
             final HttpParams params) {
-        this(httpProcessor, connStrategy, DefaultHttpResponseFactory.INSTANCE,
-                handlerResolver, null, params);
+        this(httpProcessor,
+             connStrategy,
+             responseFactory,
+             new HttpAsyncRequestHandlerResolverAdapter(handlerResolver),
+             expectationVerifier,
+             params);
+    }
+
+    /**
+     * Creates an instance of <tt>HttpAsyncServerProtocolHandler</tt>.
+     *
+     * @param httpProcessor HTTP protocol processor (required).
+     * @param connStrategy Connection re-use strategy (required).
+     * @param handlerMapper Request handler mapper.
+     * @param params HTTP parameters (required).
+     * 
+     * @since 4.3
+     */
+    public HttpAsyncService(
+            final HttpProcessor httpProcessor,
+            final ConnectionReuseStrategy connStrategy,
+            final HttpAsyncRequestHandlerMapper handlerMapper,
+            final HttpParams params) {
+        this(httpProcessor,
+             connStrategy,
+             DefaultHttpResponseFactory.INSTANCE,
+             handlerMapper,
+             null,
+             params);
+    }
+
+    /**
+     * Creates an instance of <tt>HttpAsyncServerProtocolHandler</tt>.
+     *
+     * @param httpProcessor HTTP protocol processor (required).
+     * @param connStrategy Connection re-use strategy (required).
+     * @param handlerResolver Request handler resolver.
+     * @param params HTTP parameters (required).
+     * 
+     * @deprecated (4.3) use {@link HttpAsyncService#HttpAsyncService(HttpProcessor,
+     *  ConnectionReuseStrategy, HttpAsyncRequestHandlerMapper, HttpParams)}
+     */
+    @Deprecated
+    public HttpAsyncService(
+            final HttpProcessor httpProcessor,
+            final ConnectionReuseStrategy connStrategy,
+            final HttpAsyncRequestHandlerResolver handlerResolver,
+            final HttpParams params) {
+        this(httpProcessor,
+             connStrategy,
+             DefaultHttpResponseFactory.INSTANCE,
+             new HttpAsyncRequestHandlerResolverAdapter(handlerResolver),
+             null,
+             params);
     }
 
     public void connected(final NHttpServerConnection conn) {
@@ -557,9 +618,8 @@ public class HttpAsyncService implements
     @SuppressWarnings("unchecked")
     private HttpAsyncRequestHandler<Object> getRequestHandler(final HttpRequest request) {
         HttpAsyncRequestHandler<Object> handler = null;
-        if (this.handlerResolver != null) {
-            String requestURI = request.getRequestLine().getUri();
-            handler = (HttpAsyncRequestHandler<Object>) this.handlerResolver.lookup(requestURI);
+        if (this.handlerMapper != null) {
+            handler = (HttpAsyncRequestHandler<Object>) this.handlerMapper.lookup(request);
         }
         if (handler == null) {
             handler = new NullRequestHandler();
@@ -777,4 +837,21 @@ public class HttpAsyncService implements
 
     }
 
+    /**
+     * Adaptor class to transition from HttpAsyncRequestHandlerResolver to HttpAsyncRequestHandlerMapper.
+     */
+    private static class HttpAsyncRequestHandlerResolverAdapter implements HttpAsyncRequestHandlerMapper {
+        
+        private final HttpAsyncRequestHandlerResolver resolver;
+        
+        public HttpAsyncRequestHandlerResolverAdapter(final HttpAsyncRequestHandlerResolver resolver) {
+            this.resolver = resolver;
+        }
+
+        public HttpAsyncRequestHandler<?> lookup(HttpRequest request) {
+            return resolver.lookup(request.getRequestLine().getUri());
+        }
+        
+    }
+
 }

Added: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/UriHttpAsyncRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/UriHttpAsyncRequestHandlerMapper.java?rev=1379062&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/UriHttpAsyncRequestHandlerMapper.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/UriHttpAsyncRequestHandlerMapper.java Thu Aug 30 18:54:01 2012
@@ -0,0 +1,101 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.protocol;
+
+import java.util.Map;
+
+import org.apache.http.HttpRequest;
+import org.apache.http.annotation.ThreadSafe;
+import org.apache.http.protocol.UriPatternMatcher;
+
+/**
+ * Maintains a map of HTTP request handlers keyed by a request URI pattern.
+ * <br>
+ * Patterns may have three formats:
+ * <ul>
+ *   <li><code>*</code></li>
+ *   <li><code>*&lt;uri&gt;</code></li>
+ *   <li><code>&lt;uri&gt;*</code></li>
+ * </ul>
+ * <br>
+ * This class can be used to map an instance of {@link HttpAsyncRequestHandler}
+ * matching a particular request URI. Usually the mapped request handler
+ * will be used to process the request with the specified request URI.
+ *
+ * @since 4.2
+ */
+@ThreadSafe
+public class UriHttpAsyncRequestHandlerMapper implements HttpAsyncRequestHandlerMapper {
+
+    private final UriPatternMatcher<HttpAsyncRequestHandler<?>> matcher;
+
+    public UriHttpAsyncRequestHandlerMapper() {
+        matcher = new UriPatternMatcher<HttpAsyncRequestHandler<?>>();
+    }
+
+    /**
+     * Registers the given {@link NHttpRequestHandler} as a handler for URIs
+     * matching the given pattern.
+     *
+     * @param pattern the pattern to register the handler for.
+     * @param handler the handler.
+     */
+    public void register(final String pattern, final HttpAsyncRequestHandler<?> handler) {
+        matcher.register(pattern, handler);
+    }
+
+    /**
+     * Removes registered handler, if exists, for the given pattern.
+     *
+     * @param pattern the pattern to unregister the handler for.
+     */
+    public void unregister(final String pattern) {
+        matcher.unregister(pattern);
+    }
+
+    /**
+     * Sets handlers from the given map.
+     * @param map the map containing handlers keyed by their URI patterns.
+     */
+    public void setHandlers(final Map<String, HttpAsyncRequestHandler<?>> map) {
+        matcher.setObjects(map);
+    }
+
+    /**
+     * Get the handler map.
+     * @return The map of handlers and their associated URI patterns.
+     */
+    public Map<String, HttpAsyncRequestHandler<?>> getHandlers() {
+        return matcher.getObjects();
+    }
+
+    public HttpAsyncRequestHandler<?> lookup(final HttpRequest request) {
+        return matcher.lookup(request.getRequestLine().getUri());
+    }
+
+}

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=1379062&r1=1379061&r2=1379062&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 Thu Aug 30 18:54:01 2012
@@ -110,22 +110,22 @@ public class TestHttpAsyncService {
     @Test
     public void testInvalidConstruction() throws Exception {
         try {
-            new HttpAsyncService(null, this.reuseStrategy, this.responseFactory, null, null, this.params);
+            new HttpAsyncService(null, this.reuseStrategy, this.responseFactory, (HttpAsyncRequestHandlerMapper)null, null, this.params);
             Assert.fail("IllegalArgumentException expected");
         } catch (IllegalArgumentException ex) {
         }
         try {
-            new HttpAsyncService(this.httpProcessor, null, this.responseFactory, null, null, this.params);
+            new HttpAsyncService(this.httpProcessor, null, this.responseFactory, (HttpAsyncRequestHandlerMapper)null, null, this.params);
             Assert.fail("IllegalArgumentException expected");
         } catch (IllegalArgumentException ex) {
         }
         try {
-            new HttpAsyncService(this.httpProcessor, this.reuseStrategy, null, null, null, this.params);
+            new HttpAsyncService(this.httpProcessor, this.reuseStrategy, null, (HttpAsyncRequestHandlerMapper)null, null, this.params);
             Assert.fail("IllegalArgumentException expected");
         } catch (IllegalArgumentException ex) {
         }
         try {
-            new HttpAsyncService(this.httpProcessor, this.reuseStrategy, this.responseFactory, null, null, null);
+            new HttpAsyncService(this.httpProcessor, this.reuseStrategy, this.responseFactory, (HttpAsyncRequestHandlerMapper)null, null, null);
             Assert.fail("IllegalArgumentException expected");
         } catch (IllegalArgumentException ex) {
         }

Added: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerMapper.java?rev=1379062&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerMapper.java (added)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerMapper.java Thu Aug 30 18:54:01 2012
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.protocol;
+
+import org.apache.http.HttpRequest;
+
+/**
+ * HttpRequestHandlerMapper can be used to resolve an instance of
+ * {@link HttpRequestHandler} matching a particular {@link HttpRequest}. Usually the
+ * mapped request handler will be used to process the request.
+ *
+ * @since 4.3
+ */
+public interface HttpRequestHandlerMapper {
+
+    /**
+     * Looks up a handler matching the given request.
+     *
+     * @param request the request to map to a handler
+     * @return HTTP request handler or <code>null</code> if no match
+     * is found.
+     */
+    HttpRequestHandler lookup(HttpRequest request);
+
+}

Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java?rev=1379062&r1=1379061&r2=1379062&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java Thu Aug 30 18:54:01 2012
@@ -48,8 +48,10 @@ import org.apache.http.util.Args;
  * specified request URI.
  *
  * @since 4.0
+ * @deprecated (4.3) use {@link UriHttpRequestHandlerMapper}
  */
 @ThreadSafe // provided injected dependencies are thread-safe
+@Deprecated
 public class HttpRequestHandlerRegistry implements HttpRequestHandlerResolver {
 
     private final UriPatternMatcher<HttpRequestHandler> matcher;

Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerResolver.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerResolver.java?rev=1379062&r1=1379061&r2=1379062&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerResolver.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/HttpRequestHandlerResolver.java Thu Aug 30 18:54:01 2012
@@ -30,11 +30,13 @@ package org.apache.http.protocol;
 /**
  * HttpRequestHandlerResolver can be used to resolve an instance of
  * {@link HttpRequestHandler} matching a particular request URI. Usually the
- * resolved request handler will be used to process the request with the
+ * mapped request handler will be used to process the request with the
  * specified request URI.
  *
  * @since 4.0
+ * @deprecated see {@link HttpRequestHandlerMapper}
  */
+@Deprecated
 public interface HttpRequestHandlerResolver {
 
     /**

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=1379062&r1=1379061&r2=1379062&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 Thu Aug 30 18:54:01 2012
@@ -60,7 +60,7 @@ import org.apache.http.util.EntityUtils;
  * individual {@link HttpRequestHandler}s are expected to implement
  * application specific content generation and processing.
  * <p/>
- * <tt>HttpService</tt> uses {@link HttpRequestHandlerResolver} to resolve
+ * <tt>HttpService</tt> uses {@link HttpRequestHandlerMapper} to map
  * matching request handler for a particular request URI of an incoming HTTP
  * request.
  * <p/>
@@ -77,7 +77,7 @@ public class HttpService {
      */
     private volatile HttpParams params = null;
     private volatile HttpProcessor processor = null;
-    private volatile HttpRequestHandlerResolver handlerResolver = null;
+    private volatile HttpRequestHandlerMapper handlerMapper = null;
     private volatile ConnectionReuseStrategy connStrategy = null;
     private volatile HttpResponseFactory responseFactory = null;
     private volatile HttpExpectationVerifier expectationVerifier = null;
@@ -88,17 +88,17 @@ public class HttpService {
      * @param processor            the processor to use on requests and responses
      * @param connStrategy         the connection reuse strategy
      * @param responseFactory      the response factory
-     * @param handlerResolver      the handler resolver. May be null.
+     * @param handlerMapper        the handler mapper. May be null.
      * @param expectationVerifier  the expectation verifier. May be null.
      * @param params               the HTTP parameters
      *
-     * @since 4.1
+     * @since 4.3
      */
     public HttpService(
             final HttpProcessor processor,
             final ConnectionReuseStrategy connStrategy,
             final HttpResponseFactory responseFactory,
-            final HttpRequestHandlerResolver handlerResolver,
+            final HttpRequestHandlerMapper handlerMapper,
             final HttpExpectationVerifier expectationVerifier,
             final HttpParams params) {
         super();
@@ -106,7 +106,7 @@ public class HttpService {
         this.connStrategy =  Args.notNull(connStrategy, "Connection reuse strategy");
         this.responseFactory =  Args.notNull(responseFactory, "Response factory");
         this.params = Args.notNull(params, "HTTP parameters");
-        this.handlerResolver = handlerResolver;
+        this.handlerMapper = handlerMapper;
         this.expectationVerifier = expectationVerifier;
     }
 
@@ -117,17 +117,74 @@ public class HttpService {
      * @param connStrategy         the connection reuse strategy
      * @param responseFactory      the response factory
      * @param handlerResolver      the handler resolver. May be null.
+     * @param expectationVerifier  the expectation verifier. May be null.
      * @param params               the HTTP parameters
      *
      * @since 4.1
+     * @deprecated (4.3) use {@link HttpService#HttpService(HttpProcessor,
+     *  ConnectionReuseStrategy, HttpResponseFactory, HttpRequestHandlerMapper, HttpExpectationVerifier, HttpParams)}
      */
+    @Deprecated
     public HttpService(
             final HttpProcessor processor,
             final ConnectionReuseStrategy connStrategy,
             final HttpResponseFactory responseFactory,
             final HttpRequestHandlerResolver handlerResolver,
+            final HttpExpectationVerifier expectationVerifier,
+            final HttpParams params) {
+        this(processor,
+             connStrategy,
+             responseFactory,
+             new HttpRequestHandlerResolverAdapter(handlerResolver),
+             expectationVerifier,
+             params);
+    }
+
+    /**
+     * Create a new HTTP service.
+     *
+     * @param processor            the processor to use on requests and responses
+     * @param connStrategy         the connection reuse strategy
+     * @param responseFactory      the response factory
+     * @param handlerMapper        the handler mapper. May be null.
+     * @param params               the HTTP parameters
+     *
+     * @since 4.3
+     */
+    public HttpService(
+            final HttpProcessor processor,
+            final ConnectionReuseStrategy connStrategy,
+            final HttpResponseFactory responseFactory,
+            final HttpRequestHandlerMapper handlerMapper,
             final HttpParams params) {
-        this(processor, connStrategy, responseFactory, handlerResolver, null, params);
+        this(processor, connStrategy, responseFactory, handlerMapper, null, params);
+    }
+
+    /**
+     * Create a new HTTP service.
+     *
+     * @param processor            the processor to use on requests and responses
+     * @param connStrategy         the connection reuse strategy
+     * @param responseFactory      the response factory
+     * @param handlerResolver      the handler resolver. May be null.
+     * @param params               the HTTP parameters
+     *
+     * @since 4.1
+     * @deprecated (4.3) use {@link HttpService#HttpService(HttpProcessor,
+     *  ConnectionReuseStrategy, HttpResponseFactory, HttpRequestHandlerMapper, HttpParams)}
+     */
+    public HttpService(
+            final HttpProcessor processor,
+            final ConnectionReuseStrategy connStrategy,
+            final HttpResponseFactory responseFactory,
+            final HttpRequestHandlerResolver handlerResolver,
+            final HttpParams params) {
+        this(processor,
+             connStrategy,
+             responseFactory,
+             new HttpRequestHandlerResolverAdapter(handlerResolver),
+             null,
+             params);
     }
 
     /**
@@ -191,7 +248,7 @@ public class HttpService {
      */
     @Deprecated
     public void setHandlerResolver(final HttpRequestHandlerResolver handlerResolver) {
-        this.handlerResolver = handlerResolver;
+        this.handlerMapper = new HttpRequestHandlerResolverAdapter(handlerResolver);
     }
 
     /**
@@ -350,9 +407,8 @@ public class HttpService {
             final HttpResponse response,
             final HttpContext context) throws HttpException, IOException {
         HttpRequestHandler handler = null;
-        if (this.handlerResolver != null) {
-            String requestURI = request.getRequestLine().getUri();
-            handler = this.handlerResolver.lookup(requestURI);
+        if (this.handlerMapper != null) {
+            handler = this.handlerMapper.lookup(request);
         }
         if (handler != null) {
             handler.handle(request, response, context);
@@ -360,5 +416,22 @@ public class HttpService {
             response.setStatusCode(HttpStatus.SC_NOT_IMPLEMENTED);
         }
     }
+    
+    /**
+     * Adaptor class to transition from HttpRequestHandlerResolver to HttpRequestHandlerMapper.
+     */
+    private static class HttpRequestHandlerResolverAdapter implements HttpRequestHandlerMapper {
+        
+        private final HttpRequestHandlerResolver resolver;
+        
+        public HttpRequestHandlerResolverAdapter(final HttpRequestHandlerResolver resolver) {
+            this.resolver = resolver;
+        }
+
+        public HttpRequestHandler lookup(HttpRequest request) {
+            return resolver.lookup(request.getRequestLine().getUri());
+        }
+        
+    }
 
 }

Added: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/UriHttpRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/UriHttpRequestHandlerMapper.java?rev=1379062&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/UriHttpRequestHandlerMapper.java (added)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/UriHttpRequestHandlerMapper.java Thu Aug 30 18:54:01 2012
@@ -0,0 +1,109 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.protocol;
+
+import java.util.Map;
+
+import org.apache.http.HttpRequest;
+import org.apache.http.annotation.ThreadSafe;
+
+/**
+ * Maintains a map of HTTP request handlers keyed by a request URI pattern.
+ * <br>
+ * Patterns may have three formats:
+ * <ul>
+ *   <li><code>*</code></li>
+ *   <li><code>*&lt;uri&gt;</code></li>
+ *   <li><code>&lt;uri&gt;*</code></li>
+ * </ul>
+ * <br>
+ * This class can be used to map an instance of
+ * {@link HttpRequestHandler} matching a particular request URI. Usually the
+ * mapped request handler will be used to process the request with the
+ * specified request URI.
+ *
+ * @since 4.3
+ */
+@ThreadSafe // provided injected dependencies are thread-safe
+public class UriHttpRequestHandlerMapper implements HttpRequestHandlerMapper {
+
+    private final UriPatternMatcher<HttpRequestHandler> matcher;
+
+    public UriHttpRequestHandlerMapper() {
+        matcher = new UriPatternMatcher<HttpRequestHandler>();
+    }
+
+    /**
+     * Registers the given {@link HttpRequestHandler} as a handler for URIs
+     * matching the given pattern.
+     *
+     * @param pattern the pattern to register the handler for.
+     * @param handler the handler.
+     */
+    public void register(final String pattern, final HttpRequestHandler handler) {
+        if (pattern == null) {
+            throw new IllegalArgumentException("URI request pattern may not be null");
+        }
+        if (handler == null) {
+            throw new IllegalArgumentException("Request handler may not be null");
+        }
+        matcher.register(pattern, handler);
+    }
+
+    /**
+     * Removes registered handler, if exists, for the given pattern.
+     *
+     * @param pattern the pattern to unregister the handler for.
+     */
+    public void unregister(final String pattern) {
+        matcher.unregister(pattern);
+    }
+
+    /**
+     * Sets handlers from the given map.
+     * @param map the map containing handlers keyed by their URI patterns.
+     */
+    public void setHandlers(final Map<String, HttpRequestHandler> map) {
+        matcher.setObjects(map);
+    }
+
+    /**
+     * Get the handler map.
+     * @return The map of handlers and their associated URI patterns.
+     *
+     * @since 4.3
+     */
+    public Map<String, HttpRequestHandler> getHandlers() {
+        return matcher.getObjects();
+    }
+
+    public HttpRequestHandler lookup(final HttpRequest request) {
+        return matcher.lookup(request.getRequestLine().getUri());
+    }
+
+}