You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/02/02 16:52:22 UTC

svn commit: r1656500 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: dispatch/Dispatcher.java dispatch/RequestDispatcherProvider.java dispatch/ServletContextWrapper.java handler/PerContextHandlerRegistry.java

Author: cziegeler
Date: Mon Feb  2 15:52:22 2015
New Revision: 1656500

URL: http://svn.apache.org/r1656500
Log:
FELIX-4060 : Implement HTTP Service Update (RFC-189)

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java?rev=1656500&r1=1656499&r2=1656500&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java Mon Feb  2 15:52:22 2015
@@ -87,7 +87,7 @@ public final class Dispatcher implements
 
             try
             {
-                ServletRequestWrapper req = new ServletRequestWrapper((HttpServletRequest) request, this.handler.getContext(), this.requestInfo, DispatcherType.FORWARD);
+                ServletRequestWrapper req = new ServletRequestWrapper((HttpServletRequest) request, this.handler.getContext(), this.requestInfo, DispatcherType.FORWARD, this.handler.getContextServiceId());
                 Dispatcher.this.forward(this.handler, req, (HttpServletResponse) response);
             }
             finally
@@ -105,7 +105,7 @@ public final class Dispatcher implements
         @Override
         public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException
         {
-            ServletRequestWrapper req = new ServletRequestWrapper((HttpServletRequest) request, this.handler.getContext(), this.requestInfo, DispatcherType.INCLUDE);
+            ServletRequestWrapper req = new ServletRequestWrapper((HttpServletRequest) request, this.handler.getContext(), this.requestInfo, DispatcherType.INCLUDE, this.handler.getContextServiceId());
             Dispatcher.this.include(this.handler, req, (HttpServletResponse) response);
         }
     }
@@ -201,7 +201,7 @@ public final class Dispatcher implements
 
                                 final FilterHandler[] filterHandlers = handlerRegistry.getFilterHandlers(errorHandler, DispatcherType.ERROR, request.getRequestURI());
 
-                                invokeChain(filterHandlers, errorHandler, new ServletRequestWrapper(request, errorHandler.getContext(), requestInfo), this);
+                                invokeChain(filterHandlers, errorHandler, new ServletRequestWrapper(request, errorHandler.getContext(), requestInfo, this.serviceId), this);
 
                                 invokeSuper = false;
                             }
@@ -234,19 +234,22 @@ public final class Dispatcher implements
         private final DispatcherType type;
         private final RequestInfo requestInfo;
         private final ExtServletContext servletContext;
+        private final Long contextId;
 
-        public ServletRequestWrapper(HttpServletRequest req, ExtServletContext servletContext, RequestInfo requestInfo)
+        public ServletRequestWrapper(HttpServletRequest req, ExtServletContext servletContext, RequestInfo requestInfo, final Long contextId)
         {
-            this(req, servletContext, requestInfo, null /* type */);
+            this(req, servletContext, requestInfo, null /* type */, contextId);
         }
 
-        public ServletRequestWrapper(HttpServletRequest req, ExtServletContext servletContext, RequestInfo requestInfo, DispatcherType type)
+        public ServletRequestWrapper(HttpServletRequest req, ExtServletContext servletContext, RequestInfo requestInfo,
+                DispatcherType type, final Long contextId)
         {
             super(req);
 
             this.servletContext = servletContext;
             this.requestInfo = requestInfo;
             this.type = type;
+            this.contextId = contextId;
         }
 
         @Override
@@ -385,6 +388,10 @@ public final class Dispatcher implements
         @Override
         public RequestDispatcher getRequestDispatcher(String path)
         {
+            if ( this.contextId == null )
+            {
+                return null;
+            }
             // See section 9.1 of Servlet 3.0 specification...
             if (path == null)
             {
@@ -396,7 +403,7 @@ public final class Dispatcher implements
             {
                 path = concat(getServletPath(), path);
             }
-            return Dispatcher.this.getRequestDispatcher(path);
+            return Dispatcher.this.getRequestDispatcher(this.contextId, path);
         }
 
         @Override
@@ -413,7 +420,7 @@ public final class Dispatcher implements
         @Override
         public ServletContext getServletContext()
         {
-            return new ServletContextWrapper(this.servletContext, Dispatcher.this);
+            return new ServletContextWrapper(this.contextId, this.servletContext, Dispatcher.this);
         }
 
         @Override
@@ -548,7 +555,7 @@ public final class Dispatcher implements
 
         try
         {
-            final HttpServletRequest wrappedRequest = new ServletRequestWrapper(req, servletContext, requestInfo);
+            final HttpServletRequest wrappedRequest = new ServletRequestWrapper(req, servletContext, requestInfo, servletHandler.getContextServiceId());
             final FilterHandler[] filterHandlers = this.handlerRegistry.getFilterHandlers(servletHandler, req.getDispatcherType(), requestURI);
             invokeChain(filterHandlers, servletHandler, wrappedRequest, wrappedResponse);
         }
@@ -566,14 +573,14 @@ public final class Dispatcher implements
     }
 
     @Override
-    public RequestDispatcher getNamedDispatcher(String name)
+    public RequestDispatcher getNamedDispatcher(final long contextId, final String name)
     {
         ServletHandler handler = this.handlerRegistry.getServletHandlerByName(name);
         return handler != null ? new RequestDispatcherImpl(handler, null) : null;
     }
 
     @Override
-    public RequestDispatcher getRequestDispatcher(String path)
+    public RequestDispatcher getRequestDispatcher(final long contextId, String path)
     {
         // See section 9.1 of Servlet 3.x specification...
         if (path == null || (!path.startsWith("/") && !"".equals(path)))

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java?rev=1656500&r1=1656499&r2=1656500&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java Mon Feb  2 15:52:22 2015
@@ -30,10 +30,10 @@ public interface RequestDispatcherProvid
     /**
      * @see ServletContext#getNamedDispatcher(String)
      */
-    RequestDispatcher getNamedDispatcher(String name);
+    RequestDispatcher getNamedDispatcher(long contextId, String name);
 
     /**
      * @see ServletContext#getRequestDispatcher(String)
      */
-    RequestDispatcher getRequestDispatcher(String path);
+    RequestDispatcher getRequestDispatcher(long contextId, String path);
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java?rev=1656500&r1=1656499&r2=1656500&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java Mon Feb  2 15:52:22 2015
@@ -31,14 +31,17 @@ class ServletContextWrapper extends Serv
 {
     private final RequestDispatcherProvider provider;
 
+    private final long contextId;
+
     /**
      * Creates a new {@link ServletContextWrapper} instance.
      */
-    public ServletContextWrapper(ExtServletContext delegate, RequestDispatcherProvider provider)
+    public ServletContextWrapper(long contextId, ExtServletContext delegate, RequestDispatcherProvider provider)
     {
         super(delegate);
 
         this.provider = provider;
+        this.contextId = contextId;
     }
 
     @Override
@@ -49,7 +52,7 @@ class ServletContextWrapper extends Serv
             return null;
         }
 
-        RequestDispatcher dispatcher = this.provider.getNamedDispatcher(name);
+        RequestDispatcher dispatcher = this.provider.getNamedDispatcher(contextId, name);
         return dispatcher != null ? dispatcher : super.getNamedDispatcher(name);
     }
 
@@ -62,7 +65,7 @@ class ServletContextWrapper extends Serv
             return null;
         }
 
-        RequestDispatcher dispatcher = this.provider.getRequestDispatcher(path);
+        RequestDispatcher dispatcher = this.provider.getRequestDispatcher(contextId, path);
         return dispatcher != null ? dispatcher : super.getRequestDispatcher(path);
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java?rev=1656500&r1=1656499&r2=1656500&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java Mon Feb  2 15:52:22 2015
@@ -201,7 +201,6 @@ public final class PerContextHandlerRegi
 
     public ServletHandler getServletHander(String requestURI)
     {
-        // TODO - take servlet context helper ranking and prefix into account (FELIX-4778)
         return this.servletMapping.getBestMatch(requestURI);
     }