package org.displaytag.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Simulates the behaviour of a filter using a simple servlet. The servlet must be mapped to the "*.filtered" extension; * request include this extension after the name of the tested jsp. Since servletunit doesn't support filter testing, we * are passing the request to this servlet which calls the filter and then forward the request to the given path without * ".filtered". <strong>Replaced by native filter support in ServletUnit 1.6. </strong> * @author Fabrizio Giustina * @version $Revision$ ($Author$) */ public class MockFilterSupport extends HttpServlet { /** * extension mapped to this servlet. */ public static final String FILTERED_EXTENSION = ".filtered"; /** * logger. */ protected static Log log = LogFactory.getLog(MockFilterSupport.class); /** * D1597A17A6. */ private static final long serialVersionUID = 899149338534L; /** * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.debug("Mock servlet called, simulating filter"); Filter filter = new ResponseOverrideFilter(); filter.init(null); filter.doFilter(request, response, new MockFilterChain()); } /** * Simple FilterChain used to test Filters. */ public static class MockFilterChain implements FilterChain { /** * @see javax.servlet.FilterChain#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse) */ public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { String uri = ((HttpServletRequest) request).getRequestURI(); String requestContext = ((HttpServletRequest) request).getContextPath(); if (StringUtils.isNotEmpty(requestContext) && uri.startsWith(requestContext)) { uri = uri.substring(requestContext.length()); } uri = StringUtils.replace(uri, FILTERED_EXTENSION, ""); if (log.isDebugEnabled()) { log.debug("Redirecting to [" + uri + "]"); } RequestDispatcher dispatcher = request.getRequestDispatcher(uri); dispatcher.forward(request, response); } } }