FELIX-4060 : Implement HTTP Service Update (RFC-189)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1656479 13f79535-47bb-0310-9956-ffa450edef68
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 a2f4138..a08b1ba 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
@@ -49,8 +49,8 @@
private final String prefixPath;
public PerContextHandlerRegistry() {
- this.serviceId = -1;
- this.ranking = Integer.MIN_VALUE;
+ this.serviceId = 0;
+ this.ranking = Integer.MAX_VALUE;
this.prefixPath = "/";
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
index 9545d4c..f8c7edf 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
@@ -143,31 +143,38 @@
return super.isValid() && (!isEmpty(this.patterns) || !isEmpty(this.regexs) || !isEmpty(this.servletNames));
}
- public String getName() {
+ public String getName()
+ {
return name;
}
- public String[] getPatterns() {
+ public String[] getPatterns()
+ {
return patterns;
}
- public String[] getServletNames() {
+ public String[] getServletNames()
+ {
return servletNames;
}
- public String[] getRegexs() {
+ public String[] getRegexs()
+ {
return regexs;
}
- public boolean isAsyncSupported() {
+ public boolean isAsyncSupported()
+ {
return asyncSupported;
}
- public DispatcherType[] getDispatcher() {
+ public DispatcherType[] getDispatcher()
+ {
return dispatcher;
}
- public Map<String, String> getInitParams() {
+ public Map<String, String> getInitParams()
+ {
return initParams;
}
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
index a6929e8..38a064c 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
@@ -18,6 +18,8 @@
*/
package org.apache.felix.http.base.internal.runtime;
+import java.util.Map;
+
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.context.ServletContextHelper;
import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
@@ -25,7 +27,13 @@
/**
* Provides registration information for a {@link ServletContextHelper}
*/
-public final class ServletContextHelperInfo extends AbstractInfo<ServletContextHelper> {
+public final class ServletContextHelperInfo extends AbstractInfo<ServletContextHelper>
+{
+
+ /**
+ * Properties starting with this prefix are passed as context init parameters.
+ */
+ private static final String CONTEXT_INIT_PREFIX = "context.init.";
private final String name;
@@ -33,6 +41,11 @@
private final String prefix;
+ /**
+ * The filter initialization parameters as provided during registration of the filter.
+ */
+ private final Map<String, String> initParams;
+
public ServletContextHelperInfo(final ServiceReference<ServletContextHelper> ref) {
super(ref);
this.name = this.getStringProperty(ref, HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME);
@@ -46,6 +59,7 @@
}
}
this.prefix = prefix;
+ this.initParams = getInitParams(ref, CONTEXT_INIT_PREFIX);
}
private boolean isValidPath()
@@ -91,4 +105,9 @@
}
return this.prefix.concat(path);
}
+
+ public Map<String, String> getInitParams()
+ {
+ return initParams;
+ }
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
index de67424..2090bcc 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
@@ -69,6 +69,7 @@
this.sharedContext = new SharedServletContextImpl(webContext,
info.getPrefix(),
info.getName(),
+ info.getInitParams(),
new ServletContextAttributeListener() {
@Override
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
index e052ae2..c7cf81b 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
@@ -22,6 +22,7 @@
import java.util.Collections;
import java.util.Enumeration;
import java.util.EventListener;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -55,10 +56,12 @@
private final String contextPath;
private final String name;
private final ServletContextAttributeListener attributeListener;
+ private final Map<String, String> initParameters = new HashMap<String, String>();
public SharedServletContextImpl(final ServletContext webContext,
final String name,
final String prefix,
+ final Map<String, String> initParameters,
final ServletContextAttributeListener servletContextAttributeListener)
{
this.context = webContext;
@@ -71,6 +74,10 @@
this.contextPath = webContext.getContextPath() + prefix;
}
this.name = name;
+ if ( initParameters != null )
+ {
+ this.initParameters.putAll(initParameters);
+ }
this.attributeListener = servletContextAttributeListener;
}
@@ -258,15 +265,13 @@
@Override
public String getInitParameter(final String name)
{
- // TODO
- return this.context.getInitParameter(name);
+ return this.initParameters.get(name);
}
@Override
public Enumeration getInitParameterNames()
{
- // TODO
- return this.context.getInitParameterNames();
+ return Collections.enumeration(this.initParameters.keySet());
}
@Override