1 7 package org.ejtools.servlet.http; 8 9 import java.io.IOException ; 10 import java.io.PrintWriter ; 11 import java.io.StringReader ; 12 import java.io.StringWriter ; 13 14 import javax.servlet.Filter ; 15 import javax.servlet.FilterChain ; 16 import javax.servlet.FilterConfig ; 17 import javax.servlet.ServletException ; 18 import javax.servlet.ServletRequest ; 19 import javax.servlet.ServletResponse ; 20 import javax.servlet.http.HttpServletResponse ; 21 import javax.xml.transform.Source ; 22 import javax.xml.transform.Transformer ; 23 import javax.xml.transform.TransformerFactory ; 24 import javax.xml.transform.stream.StreamResult ; 25 import javax.xml.transform.stream.StreamSource ; 26 27 import org.apache.log4j.Logger; 28 29 35 public class XSLFilter implements Filter  36 { 37 38 protected FilterConfig config = null; 39 40 protected String contentType = null; 41 42 protected String stylePath = null; 43 44 protected Transformer transformer = null; 45 46 protected static Logger logger = Logger.getLogger(XSLFilter.class); 47 48 49 50 public void destroy() 51 { 52 this.config = null; 53 } 54 55 56 65 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 66 throws IOException , ServletException  67 { 68 response.setContentType(contentType); 70 PrintWriter out = response.getWriter(); 71 72 StringResponseWrapper wrapper = new StringResponseWrapper((HttpServletResponse ) response); 74 chain.doFilter(request, wrapper); 75 76 StringReader reader = new StringReader (wrapper.toString()); 78 Source source = new StreamSource (reader); 79 80 try 81 { 82 logger.debug("Creating Writer..."); 84 StringWriter writer = new StringWriter (); 85 StreamResult result = new StreamResult (writer); 86 87 logger.debug("Applying stylesheet..."); 89 transformer.transform(source, result); 90 91 logger.debug("Ouputing..."); 93 response.setContentLength(writer.toString().length()); 94 out.println(writer.toString()); 95 } 96 catch (Exception e) 97 { 98 logger.error("Error during transformation " + e.getMessage()); 99 out.println(wrapper.toString()); 100 } 101 } 102 103 104 110 public void init(FilterConfig config) 111 throws ServletException  112 { 113 this.config = config; 114 115 this.contentType = config.getInitParameter("mime-type"); 117 logger.debug("Acquiring parameter mime-type=" + contentType); 118 119 String styleSheet = config.getInitParameter("stylesheet"); 121 logger.debug("Acquiring parameter stylesheet=" + styleSheet); 122 123 String stylePath = config.getServletContext().getRealPath(styleSheet); 125 126 try 127 { 128 logger.debug("Compiling stylesheet..."); 130 TransformerFactory tFactory = TransformerFactory.newInstance(); 131 transformer = tFactory.newTransformer(new StreamSource (stylePath)); 132 } 133 catch (Exception e) 134 { 135 logger.fatal("Failed to init the filter " + e.getMessage()); 136 throw new ServletException (e.getMessage()); 137 } 138 } 139 } 140 | Popular Tags |