001    package com.khubla.pragmatach.framework.filter;
002    
003    import java.io.IOException;
004    
005    import javax.servlet.Filter;
006    import javax.servlet.FilterChain;
007    import javax.servlet.FilterConfig;
008    import javax.servlet.ServletException;
009    import javax.servlet.ServletRequest;
010    import javax.servlet.ServletResponse;
011    import javax.servlet.http.HttpServletRequest;
012    import javax.servlet.http.HttpServletResponse;
013    
014    import com.khubla.pragmatach.framework.annotation.Route;
015    import com.khubla.pragmatach.framework.api.Request;
016    import com.khubla.pragmatach.framework.controller.PragmatachControllerFactory;
017    import com.khubla.pragmatach.framework.controller.impl.system.HttpErrorController;
018    
019    /**
020     * @author tome
021     */
022    public class ErrorHandlerFilter implements Filter {
023       @Override
024       public void destroy() {
025       }
026    
027       @Override
028       public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
029          HttpServletResponse response = (HttpServletResponse) servletResponse;
030          final HttpServletRequest request = (HttpServletRequest) servletRequest;
031          try {
032             if (!(response instanceof ErrorHandlerFilterRequestWrapper)) {
033                response = new ErrorHandlerFilterRequestWrapper(response);
034             }
035             filterChain.doFilter(servletRequest, response);
036          } catch (final Exception e) {
037             final HttpErrorController httpErrorController = PragmatachControllerFactory.getHttpErrorController(new Request(request, response, Route.HttpMethod.get, null), e);
038             try {
039                httpErrorController.render().render(response);
040             } catch (final Exception e2) {
041                throw new ServletException(e2);
042             }
043          }
044       }
045    
046       @Override
047       public void init(FilterConfig filterConfig) throws ServletException {
048       }
049    }