FELIX-4060 : Implement HTTP Service Update (RFC-189)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1656707 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 1f6b33a..8ca2193 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
@@ -564,14 +564,14 @@
}
@Override
- public RequestDispatcher getNamedDispatcher(final long contextId, final String name)
+ public RequestDispatcher getNamedDispatcher(final Long contextId, final String name)
{
ServletHandler handler = this.handlerRegistry.getServletHandlerByName(contextId, name);
return handler != null ? new RequestDispatcherImpl(handler, null) : null;
}
@Override
- public RequestDispatcher getRequestDispatcher(final long contextId, 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 d4e5454..e2a4e9a 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(long contextId, String name);
+ RequestDispatcher getNamedDispatcher(Long contextId, String name);
/**
* @see ServletContext#getRequestDispatcher(String)
*/
- RequestDispatcher getRequestDispatcher(long contextId, String path);
+ RequestDispatcher getRequestDispatcher(Long contextId, String path);
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
index 0b94c06..c7b0e6c 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
@@ -62,7 +62,7 @@
}
else
{
- this.contextServiceId = -1;
+ this.contextServiceId = 0;
}
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
index aaa07ca..0a00329 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
@@ -34,9 +34,15 @@
*/
public final class HandlerRegistry
{
+ private static FilterHandler[] EMPTY_FILTER_HANDLER = new FilterHandler[0];
+
/** Current list of context registrations. */
private volatile List<PerContextHandlerRegistry> registrations = Collections.emptyList();
+ /**
+ * Create a new registry.
+ * Register default context registry for Http Service
+ */
public HandlerRegistry()
{
this.add(new PerContextHandlerRegistry());
@@ -151,17 +157,15 @@
return null;
}
- private static FilterHandler[] EMPTY_FILTER_HANDLER = new FilterHandler[0];
-
- public FilterHandler[] getFilterHandlers(final ServletHandler servletHandler,
+ public FilterHandler[] getFilterHandlers(@Nonnull final ServletHandler servletHandler,
final DispatcherType dispatcherType,
- final String requestURI)
+ @Nonnull final String requestURI)
{
- final long id = servletHandler.getContextServiceId();
+ final long key = servletHandler.getContextServiceId();
final List<PerContextHandlerRegistry> regs = this.registrations;
for(final PerContextHandlerRegistry r : regs)
{
- if ( id == r.getContextServiceId() )
+ if ( key == r.getContextServiceId() )
{
return r.getFilterHandlers(servletHandler, dispatcherType, requestURI);
}
@@ -169,24 +173,35 @@
return EMPTY_FILTER_HANDLER;
}
- public ServletHandler getServletHandlerByName(final Long contextId, final String name)
+ /**
+ * Get the servlet handler for a servlet by name
+ * @param contextId The context id or {@code null}
+ * @param name The servlet name
+ * @return The servlet handler or {@code null}
+ */
+ public ServletHandler getServletHandlerByName(final Long contextId, @Nonnull final String name)
{
- if ( contextId != null )
+ final long key = (contextId == null ? 0 : contextId);
+ final List<PerContextHandlerRegistry> regs = this.registrations;
+ for(final PerContextHandlerRegistry r : regs)
{
- final List<PerContextHandlerRegistry> regs = this.registrations;
- for(final PerContextHandlerRegistry r : regs)
+ if ( key == r.getContextServiceId() )
{
- if ( contextId == r.getContextServiceId() )
- {
- return r.getServletHandlerByName(name);
- }
+ return r.getServletHandlerByName(name);
}
}
+
return null;
}
- public ServletHandler getServletHander(final String requestURI)
+ /**
+ * Search the servlet handler for the request uri
+ * @param requestURI The request uri
+ * @return
+ */
+ public ServletHandler getServletHander(@Nonnull final String requestURI)
{
+ // search the first matching context registry
final List<PerContextHandlerRegistry> regs = this.registrations;
for(final PerContextHandlerRegistry r : regs)
{
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
index 4c0611e..008bda3 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
@@ -71,7 +71,7 @@
}
else
{
- this.contextServiceId = -1;
+ this.contextServiceId = 0;
}
}