This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-startupfilter.git
commit 47adaa0aab50a2acc95a7745b7a53b0f2c9c2d85 Author: Bertrand Delacretaz <[email protected]> AuthorDate: Mon Jan 9 15:05:56 2012 +0000 SLING-2347 - use response.setStatus to avoid triggering the container's error pages during startup git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1229187 13f79535-47bb-0310-9956-ffa450edef68 --- .../startupfilter/impl/StartupFilterImpl.java | 12 ++++++++-- .../startupfilter/impl/StartupFilterImplTest.java | 27 +++++++++++++++------- 2 files changed, 29 insertions(+), 10 deletions(-) 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 149fc84..a26395f 100644 --- a/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java +++ b/src/main/java/org/apache/sling/startupfilter/impl/StartupFilterImpl.java @@ -72,7 +72,7 @@ public class StartupFilterImpl implements StartupFilter, Filter { 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 implements StartupFilter, Filter { 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 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 7d89f90..329dae8 100644 --- a/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java +++ b/src/test/java/org/apache/sling/startupfilter/impl/StartupFilterImplTest.java @@ -20,6 +20,8 @@ package org.apache.sling.startupfilter.impl; 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 -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
