package org.jboss.resteasy.plugins.server.servlet; import org.jboss.resteasy.core.Dispatcher; import org.jboss.resteasy.core.SynchronousDispatcher; import org.jboss.resteasy.specimpl.ResteasyHttpHeaders; import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.HttpResponse; import org.jboss.resteasy.spi.ResteasyUriInfo; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.NotFoundException; import java.io.IOException; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class FilterDispatcher implements Filter, HttpRequestFactory, HttpResponseFactory { protected ServletContainerDispatcher servletContainerDispatcher; protected ServletContext servletContext; public Dispatcher getDispatcher() { return servletContainerDispatcher.getDispatcher(); } public void init(FilterConfig servletConfig) throws ServletException { servletContainerDispatcher = new ServletContainerDispatcher(); FilterBootstrap bootstrap = new FilterBootstrap(servletConfig); servletContext = servletConfig.getServletContext(); servletContainerDispatcher.init(servletContext, bootstrap, this, this); servletContainerDispatcher.getDispatcher().getDefaultContextObjects().put(FilterConfig.class, servletConfig); } public HttpRequest createResteasyHttpRequest(String httpMethod, HttpServletRequest request, ResteasyHttpHeaders headers, ResteasyUriInfo uriInfo, HttpResponse theResponse, HttpServletResponse response) { return new HttpServletInputMessage(request, response, servletContext, theResponse, headers, uriInfo, httpMethod.toUpperCase(), (SynchronousDispatcher) getDispatcher()); } public HttpResponse createResteasyHttpResponse(HttpServletResponse response) { return new HttpServletResponseWrapper(response, getDispatcher().getProviderFactory()); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { try { servletContainerDispatcher.service(((HttpServletRequest) servletRequest).getMethod(), (HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, false); } catch (NotFoundException e) { filterChain.doFilter(servletRequest, servletResponse); } } public void destroy() { servletContainerDispatcher.destroy(); } }