You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2012/01/09 16:05:57 UTC
svn commit: r1229187 - in /sling/trunk/contrib/extensions/startup-filter/src:
main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
Author: bdelacretaz
Date: Mon Jan 9 15:05:56 2012
New Revision: 1229187
URL: http://svn.apache.org/viewvc?rev=1229187&view=rev
Log:
SLING-2347 - use response.setStatus to avoid triggering the container's error pages during startup
Modified:
sling/trunk/contrib/extensions/startup-filter/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
sling/trunk/contrib/extensions/startup-filter/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
Modified: sling/trunk/contrib/extensions/startup-filter/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/startup-filter/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java?rev=1229187&r1=1229186&r2=1229187&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/startup-filter/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java (original)
+++ sling/trunk/contrib/extensions/startup-filter/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java Mon Jan 9 15:05:56 2012
@@ -72,7 +72,7 @@ public class StartupFilterImpl implement
private String defaultMessage;
/** @inheritDoc */
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ public void doFilter(ServletRequest request, ServletResponse sr, FilterChain chain) throws IOException, ServletException {
updateProviders();
final StringBuilder sb = new StringBuilder();
@@ -81,7 +81,15 @@ public class StartupFilterImpl implement
sb.append('\n');
sb.append(p.getProgressInfo());
}
- ((HttpServletResponse)response).sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, sb.toString());
+
+ // Do not use setError to avoid triggering the container's error page,
+ // as that might cascade other errors during startup
+ final HttpServletResponse response = (HttpServletResponse)sr;
+ response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter().write(sb.toString());
+ response.getWriter().flush();
}
@Override
Modified: sling/trunk/contrib/extensions/startup-filter/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/startup-filter/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java?rev=1229187&r1=1229186&r2=1229187&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/startup-filter/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java (original)
+++ sling/trunk/contrib/extensions/startup-filter/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java Mon Jan 9 15:05:56 2012
@@ -20,6 +20,8 @@ package org.apache.sling.startupfilter.i
import static org.junit.Assert.assertEquals;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.concurrent.atomic.AtomicInteger;
@@ -116,7 +118,7 @@ public class StartupFilterImplTest {
private HttpServletResponse response;
private FilterChain chain;
private int lastReturnedStatus;
- private String lastReturnedMessage;
+ private StringWriter messageWriter;
private AtomicInteger activeFilterCount;
private ServiceRegistration serviceRegistration;
@@ -135,17 +137,19 @@ public class StartupFilterImplTest {
final BundleContext bundleContext = mockery.mock(BundleContext.class);
final ComponentContext componentContext = mockery.mock(ComponentContext.class);
- final Action storeResponse = new Action() {
+ final Action storeStatus = new Action() {
public void describeTo(Description d) {
d.appendText("Store HTTP response values");
}
public Object invoke(Invocation invocation) throws Throwable {
lastReturnedStatus = (Integer)invocation.getParameter(0);
- lastReturnedMessage = (String)invocation.getParameter(1);
return null;
}
};
+
+ messageWriter = new StringWriter();
+ final PrintWriter responseWriter = new PrintWriter(messageWriter);
final Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(StartupFilterImpl.ACTIVE_BY_DEFAULT_PROP, Boolean.TRUE);
@@ -173,8 +177,14 @@ public class StartupFilterImplTest {
returnValue(serviceRegistration)
));
- allowing(response).sendError(with(any(Integer.class)), with(any(String.class)));
- will(storeResponse);
+ 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));
@@ -184,16 +194,17 @@ public class StartupFilterImplTest {
}
private void assertRequest(final int expectedStatus, final String expectedMessage) throws Exception {
- lastReturnedMessage = null;
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",
expectedStatus, lastReturnedStatus);
assertEquals("Expecting message to match",
- expectedMessage, lastReturnedMessage);
+ expectedMessage, responseText);
}
@Test
@@ -224,4 +235,4 @@ public class StartupFilterImplTest {
filter.disable();
assertEquals("Expecting filter service to be gone", 0, activeFilterCount.get());
}
-}
+}
\ No newline at end of file