Update to parent pom 28 and move to http whiteboard
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1758544 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index eecd0cf..edfd37d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,85 +17,80 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.sling</groupId>
- <artifactId>sling</artifactId>
- <version>16</version>
- <relativePath/>
- </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>28</version>
+ <relativePath/>
+ </parent>
- <artifactId>org.apache.sling.startupfilter</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>bundle</packaging>
+ <artifactId>org.apache.sling.startupfilter</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
- <name>Apache Sling Startup Filter</name>
- <description>
- Servlet Filter that blocks access to Sling
- while starting up.
- </description>
+ <name>Apache Sling Startup Filter</name>
+ <description>
+ Servlet Filter that blocks access to Sling while starting up.
+ </description>
- <scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</connection>
- <developerConnection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</developerConnection>
- <url>http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</url>
- </scm>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</connection>
+ <developerConnection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</developerConnection>
+ <url>http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/startup-filter</url>
+ </scm>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Export-Package>org.apache.sling.startupfilter</Export-Package>
- <Private-Package>org.apache.sling.startupfilter.impl.*</Private-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Require-Capability>
+ osgi.implementation;filter:="(&(osgi.implementation=osgi.http)(version=1.0))"
+ </Require-Capability>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.jmock</groupId>
- <artifactId>jmock-junit4</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.http.whiteboard</artifactId>
+ <version>1.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/startupfilter/StartupFilter.java b/src/main/java/org/apache/sling/startupfilter/StartupFilter.java
index d84faec..93c5e3d 100644
--- a/src/main/java/org/apache/sling/startupfilter/StartupFilter.java
+++ b/src/main/java/org/apache/sling/startupfilter/StartupFilter.java
@@ -18,28 +18,31 @@
*/
package org.apache.sling.startupfilter;
-/** Servlet Filter that blocks access to the Sling main
+import org.osgi.annotation.versioning.ProviderType;
+
+/** Servlet Filter that blocks access to the Sling main
* servlet during startup, by returning an HTTP 503
* or other suitable status code.
- *
+ *
* A typical use case is to start this filter before
* the Sling main servlet (by setting a lower start level
* on its bundle than on the Sling engine bundle), and
* deactivating once startup is finished.
*/
+@ProviderType
public interface StartupFilter {
-
+
/** Enable the status filter, which outputs a default status message
* and a concatenation of all status messages returned
* by {@link StartupInfoProvider} services.
- *
- * The filter is initially enabled.
+ *
+ * The filter is initially enabled.
*/
void enable();
-
+
/** Disable the status filter */
void disable();
-
+
/** True if currently enabled */
boolean isEnabled();
}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/startupfilter/StartupFilterDisabler.java b/src/main/java/org/apache/sling/startupfilter/StartupFilterDisabler.java
index 6cfd0f7..f44c90a 100644
--- a/src/main/java/org/apache/sling/startupfilter/StartupFilterDisabler.java
+++ b/src/main/java/org/apache/sling/startupfilter/StartupFilterDisabler.java
@@ -18,6 +18,9 @@
*/
package org.apache.sling.startupfilter;
+import org.osgi.annotation.versioning.ConsumerType;
+
+@ConsumerType
public interface StartupFilterDisabler {
/** Indicate why the StartupFilter should be disabled */
String getReason();
diff --git a/src/main/java/org/apache/sling/startupfilter/StartupInfoProvider.java b/src/main/java/org/apache/sling/startupfilter/StartupInfoProvider.java
index e4baf85..c1279e1 100644
--- a/src/main/java/org/apache/sling/startupfilter/StartupInfoProvider.java
+++ b/src/main/java/org/apache/sling/startupfilter/StartupInfoProvider.java
@@ -18,9 +18,12 @@
*/
package org.apache.sling.startupfilter;
+import org.osgi.annotation.versioning.ConsumerType;
+
+@ConsumerType
public interface StartupInfoProvider {
/** Return startup progress information, which the startup
- * filter adds to its HTTP 503 response.
+ * filter adds to its HTTP 503 response.
*/
String getProgressInfo();
}
diff --git a/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java b/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
index 1bfba9b..6f850ff 100644
--- a/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
+++ b/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
@@ -22,6 +22,7 @@
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -47,7 +48,7 @@
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,42 +61,43 @@
public class StartupFilterImpl implements StartupFilter, Filter {
private final Logger log = LoggerFactory.getLogger(getClass());
- private ServiceRegistration filterServiceRegistration;
+ private ServiceRegistration<Filter> filterServiceRegistration;
private BundleContext bundleContext;
- private ServiceTracker providersTracker;
+ private ServiceTracker<StartupInfoProvider, StartupInfoProvider> providersTracker;
private int providersTrackerCount = -1;
-
+
private final List<StartupInfoProvider> providers = new ArrayList<StartupInfoProvider>();
-
+
@Property(boolValue=true)
public static final String ACTIVE_BY_DEFAULT_PROP = "active.by.default";
private boolean defaultFilterActive;
-
+
public static final String DEFAULT_MESSAGE = "Startup in progress";
-
+
@Property(value=DEFAULT_MESSAGE)
public static final String DEFAULT_MESSAGE_PROP = "default.message";
private String defaultMessage;
@Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY, policy=ReferencePolicy.DYNAMIC)
- private StartupFilterDisabler startupFilterDisabler;
+ private volatile StartupFilterDisabler startupFilterDisabler;
private static final String FRAMEWORK_PROP_MANAGER_ROOT = "felix.webconsole.manager.root";
static final String DEFAULT_MANAGER_ROOT = "/system/console";
private String managerRoot;
-
+
/** @inheritDoc */
+ @Override
public void doFilter(ServletRequest request, ServletResponse sr, FilterChain chain) throws IOException, ServletException {
-
+
// Disable if a StartupFilterDisabler is present
if(startupFilterDisabler!= null) {
- log.info("StartupFilterDisabler service present, disabling StartupFilter ({})",
+ log.info("StartupFilterDisabler service present, disabling StartupFilter ({})",
startupFilterDisabler.getReason());
disable();
chain.doFilter(request, sr);
return;
}
-
+
// Bypass for the managerRoot path
if(request instanceof HttpServletRequest) {
final String pathInfo = ((HttpServletRequest)request).getPathInfo();
@@ -105,9 +107,9 @@
return;
}
}
-
+
updateProviders();
-
+
final StringBuilder sb = new StringBuilder();
sb.append(defaultMessage);
for(StartupInfoProvider p : providers) {
@@ -124,30 +126,32 @@
response.getWriter().write(sb.toString());
response.getWriter().flush();
}
-
+
@Override
public String toString() {
- return getClass().getSimpleName() + ": " + (isEnabled() ? "enabled" : "disabled");
+ return getClass().getSimpleName() + ": " + (isEnabled() ? "enabled" : "disabled");
}
/** @inheritDoc */
+ @Override
public void destroy() {
}
/** @inheritDoc */
+ @Override
public void init(FilterConfig cfg) throws ServletException {
}
-
+
/** If needed, update our list of providers */
private void updateProviders() {
if(providersTracker.getTrackingCount() != providersTrackerCount) {
synchronized(this) {
if(providersTracker.getTrackingCount() != providersTrackerCount) {
providers.clear();
- final ServiceReference [] refs = providersTracker.getServiceReferences();
+ final ServiceReference<StartupInfoProvider> [] refs = providersTracker.getServiceReferences();
if(refs != null) {
- for(ServiceReference ref : refs) {
- providers.add((StartupInfoProvider)bundleContext.getService(ref));
+ for(ServiceReference<StartupInfoProvider> ref : refs) {
+ providers.add(bundleContext.getService(ref));
}
}
}
@@ -158,16 +162,16 @@
}
@Activate
- protected void activate(ComponentContext ctx) throws InterruptedException {
- bundleContext = ctx.getBundleContext();
-
- providersTracker = new ServiceTracker(bundleContext, StartupInfoProvider.class.getName(), null);
+ protected void activate(final BundleContext ctx, final Map<String, Object> properties) throws InterruptedException {
+ bundleContext = ctx;
+
+ providersTracker = new ServiceTracker(bundleContext, StartupInfoProvider.class, null);
providersTracker.open();
-
- Object prop = ctx.getProperties().get(DEFAULT_MESSAGE_PROP);
+
+ Object prop = properties.get(DEFAULT_MESSAGE_PROP);
defaultMessage = prop == null ? DEFAULT_MESSAGE : prop.toString();
-
- prop = ctx.getProperties().get(ACTIVE_BY_DEFAULT_PROP);
+
+ prop = properties.get(ACTIVE_BY_DEFAULT_PROP);
defaultFilterActive = (prop instanceof Boolean ? (Boolean)prop : false);
prop = bundleContext.getProperty(FRAMEWORK_PROP_MANAGER_ROOT);
@@ -178,36 +182,41 @@
}
log.info("Activated, enabled={}, managerRoot={}", isEnabled(), managerRoot);
}
-
+
@Deactivate
- protected void deactivate(ComponentContext ctx) throws InterruptedException {
+ protected void deactivate() throws InterruptedException {
disable();
providersTracker.close();
providersTracker = null;
bundleContext = null;
}
-
-
+
+
+ @Override
public synchronized void enable() {
- if(filterServiceRegistration == null) {
+ if (filterServiceRegistration == null) {
final String pattern = "/";
final Hashtable<String, Object> params = new Hashtable<String, Object>();
params.put(Constants.SERVICE_RANKING, 0x9000); // run before RequestLoggerFilter (0x8000)
- params.put("filter.scope", "REQUEST");
- params.put("pattern", pattern);
- filterServiceRegistration = bundleContext.registerService(Filter.class.getName(), this, params);
- log.info("Registered {} as a Filter service with pattern {}", this, pattern);
+ params.put("sling.filter.scope", "REQUEST");
+ params.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
+ "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=*)");
+ params.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, pattern);
+ filterServiceRegistration = bundleContext.registerService(Filter.class, this, params);
+ log.info("Registered {} as a servlet filter service with pattern {}", this, pattern);
}
}
-
+
+ @Override
public synchronized void disable() {
- if(filterServiceRegistration != null) {
+ if (filterServiceRegistration != null) {
filterServiceRegistration.unregister();
filterServiceRegistration = null;
log.info("Filter service disabled");
}
}
-
+
+ @Override
public synchronized boolean isEnabled() {
return filterServiceRegistration != null;
}
diff --git a/src/main/java/org/apache/sling/startupfilter/package-info.java b/src/main/java/org/apache/sling/startupfilter/package-info.java
new file mode 100644
index 0000000..2177642
--- /dev/null
+++ b/src/main/java/org/apache/sling/startupfilter/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+@Version("1.0.0")
+package org.apache.sling.startupfilter;
+
+import org.osgi.annotation.versioning.Version;
+
diff --git a/src/main/resources/OSGI-INF/metatype/metatype.properties b/src/main/resources/OSGI-INF/metatype/metatype.properties
index 2e04d0f..5f9bcb2 100644
--- a/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ b/src/main/resources/OSGI-INF/metatype/metatype.properties
@@ -23,7 +23,7 @@
# descriptions as used in the metatype.xml descriptor generated by the
# the Sling SCR plugin
-org.apache.sling.startupfilter.impl.StartupFilterImpl.name=Sling Startup Filter
+org.apache.sling.startupfilter.impl.StartupFilterImpl.name=Apache Sling Startup Filter
org.apache.sling.startupfilter.impl.StartupFilterImpl.description=Rejects Sling requests \
with a 503 error code during startup.
diff --git a/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java b/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
index fb80d66..46a2c5c 100644
--- a/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
+++ b/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
@@ -23,7 +23,8 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Dictionary;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.Filter;
@@ -47,63 +48,71 @@
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
/** Test the StartupFilterImpl */
public class StartupFilterImplTest {
static private class TestProvider implements StartupInfoProvider, ServiceReference {
private final String info;
-
+
TestProvider(String s) {
info = s;
}
-
+
+ @Override
public String getProgressInfo() {
return info;
}
+ @Override
public Object getProperty(String key) {
return null;
}
+ @Override
public String[] getPropertyKeys() {
return null;
}
+ @Override
public Bundle getBundle() {
return null;
}
+ @Override
public Bundle[] getUsingBundles() {
return null;
}
+ @Override
public boolean isAssignableTo(Bundle bundle, String className) {
return false;
}
+ @Override
public int compareTo(Object reference) {
return 0;
}
}
static private class TestFilterImpl extends StartupFilterImpl {
- void setup(ComponentContext ctx) throws Exception {
- activate(ctx);
+ void setup(BundleContext ctx, Map<String, Object> props) throws Exception {
+ activate(ctx, props);
}
};
-
+
static private class ChangeInteger implements Action {
private final boolean increment;
private final AtomicInteger value;
-
+
ChangeInteger(AtomicInteger value, boolean increment) {
this.increment = increment;
this.value = value;
}
+ @Override
public void describeTo(Description d) {
d.appendText(increment ? "increment" : "decrement");
d.appendText(" an integer");
}
+ @Override
public Object invoke(Invocation invocation) throws Throwable {
if(increment) {
value.incrementAndGet();
@@ -116,7 +125,7 @@
private TestFilterImpl filter;
private Mockery mockery;
- private HttpServletRequest request;
+ private HttpServletRequest request;
private HttpServletResponse response;
private FilterChain chain;
private int lastReturnedStatus;
@@ -130,23 +139,24 @@
public void setup() {
activeFilterCount = new AtomicInteger();
mockery = new Mockery();
- request = mockery.mock(HttpServletRequest.class);
+ request = mockery.mock(HttpServletRequest.class);
response = mockery.mock(HttpServletResponse.class);
chain = mockery.mock(FilterChain.class);
serviceRegistration = mockery.mock(ServiceRegistration.class);
filter = new TestFilterImpl();
requestPath = "/NO_PATH_YET";
}
-
+
private void setProvider(final TestProvider provider) throws Exception {
- final BundleContext bundleContext = mockery.mock(BundleContext.class);
- final ComponentContext componentContext = mockery.mock(ComponentContext.class);
-
+ final BundleContext bundleContext = mockery.mock(BundleContext.class);
+
final Action storeStatus = new Action() {
+ @Override
public void describeTo(Description d) {
d.appendText("Store HTTP response values");
}
+ @Override
public Object invoke(Invocation invocation) throws Throwable {
lastReturnedStatus = (Integer)invocation.getParameter(0);
return null;
@@ -154,76 +164,70 @@
};
messageWriter = new StringWriter();
- final PrintWriter responseWriter = new PrintWriter(messageWriter);
-
- final Dictionary<String, Object> props = new Hashtable<String, Object>();
+ final PrintWriter responseWriter = new PrintWriter(messageWriter);
+
+ final Map<String, Object> props = new HashMap<String, Object>();
props.put(StartupFilterImpl.ACTIVE_BY_DEFAULT_PROP, Boolean.TRUE);
-
+
final ServiceReference [] providerRefs = provider == null ? null : new ServiceReference[] { provider };
mockery.checking(new Expectations() {{
- allowing(componentContext).getBundleContext();
- will(returnValue(bundleContext));
-
- allowing(componentContext).getProperties();
- will(returnValue(props));
-
allowing(bundleContext).createFilter(with(any(String.class)));
allowing(bundleContext).addServiceListener(with(any(ServiceListener.class)));
allowing(bundleContext).addServiceListener(with(any(ServiceListener.class)), with(any(String.class)));
-
+
allowing(bundleContext).getServiceReferences(StartupInfoProvider.class.getName(), null);
will(returnValue(providerRefs));
allowing(bundleContext).getService(with(any(ServiceReference.class)));
will(returnValue(provider));
-
+
allowing(bundleContext).getProperty(with("felix.webconsole.manager.root"));
will(returnValue(CONSOLE_ROOT));
- allowing(bundleContext).registerService(with(Filter.class.getName()), with(any(Object.class)), with(any(Dictionary.class)));
+ allowing(bundleContext).registerService(with(equal(Filter.class)), with(any(Filter.class)), with(any(Dictionary.class)));
will(new DoAllAction(
new ChangeInteger(activeFilterCount, true),
returnValue(serviceRegistration)
));
-
+
allowing(response).setStatus((with(any(Integer.class))));
will(storeStatus);
-
+
allowing(response).setContentType("text/plain");
-
+
allowing(response).getWriter();
will(returnValue(responseWriter));
allowing(response).setCharacterEncoding(with(any(String.class)));
-
+
allowing(serviceRegistration).unregister();
will(new ChangeInteger(activeFilterCount, false));
-
+
allowing(request).getPathInfo();
will(returnValue(getRequestPath()));
-
+
allowing(chain).doFilter(with(any(ServletRequest.class)), with(any(ServletResponse.class)));
}});
-
- filter.setup(componentContext);
+
+ filter.setup(bundleContext, props);
}
-
+
private String getRequestPath() {
return requestPath;
}
-
+
private void assertRequest(final int expectedStatus, final String expectedMessage) throws Exception {
lastReturnedStatus = -1;
-
+
filter.doFilter(request, response, chain);
-
+
final String responseText = messageWriter.toString();
-
+
// status 0 means we expect the request to go through
- assertEquals("Expecting status to match",
+ assertEquals("Expecting status to match",
expectedStatus, lastReturnedStatus);
- assertEquals("Expecting message to match",
+ assertEquals("Expecting message to match",
expectedMessage, responseText);
}
-
+
@Test
public void testInitialState() throws Exception {
setProvider(null);
@@ -256,10 +260,10 @@
@Test
public void testProviders() throws Exception {
final TestProvider p = new TestProvider("TEST");
-
+
setProvider(p);
assertEquals("Initially expecting one filter service", 1, activeFilterCount.get());
-
+
final String expectedMessage = StartupFilterImpl.DEFAULT_MESSAGE + "\nTEST";
assertRequest(503, expectedMessage);