FELIX-4060 : Implement HTTP Service Update (RFC-189)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1656500 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
index bf5ead1..3cd3301 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
@@ -87,7 +87,7 @@
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 @@
@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 @@
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 @@
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 @@
@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 @@
{
path = concat(getServletPath(), path);
}
- return Dispatcher.this.getRequestDispatcher(path);
+ return Dispatcher.this.getRequestDispatcher(this.contextId, path);
}
@Override
@@ -413,7 +420,7 @@
@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 @@
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 @@
}
@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)))
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java
index a863bd2..d4e5454 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestDispatcherProvider.java
@@ -30,10 +30,10 @@
/**
* @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);
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java
index 5240b48..f021884 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletContextWrapper.java
@@ -31,14 +31,17 @@
{
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 @@
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 @@
return null;
}
- RequestDispatcher dispatcher = this.provider.getRequestDispatcher(path);
+ RequestDispatcher dispatcher = this.provider.getRequestDispatcher(contextId, path);
return dispatcher != null ? dispatcher : super.getRequestDispatcher(path);
}
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
index a08b1ba..313fcbf 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
@@ -201,7 +201,6 @@
public ServletHandler getServletHander(String requestURI)
{
- // TODO - take servlet context helper ranking and prefix into account (FELIX-4778)
return this.servletMapping.getBestMatch(requestURI);
}