1 16 19 20 import java.io.IOException ; 21 import java.io.PrintWriter ; 22 import java.io.StringWriter ; 23 24 import java.util.StringTokenizer ; 25 26 import javax.xml.transform.Transformer ; 27 import javax.xml.transform.TransformerFactory ; 28 import javax.xml.transform.TransformerException ; 29 import javax.xml.transform.ErrorListener ; 30 import javax.xml.transform.stream.StreamResult ; 31 import javax.xml.transform.stream.StreamSource ; 32 33 import sunlabs.brazil.server.Handler; 34 import sunlabs.brazil.server.Request; 35 import sunlabs.brazil.server.Server; 36 37 50 public class TransformHandler implements Handler { 51 52 private TransformerFactory m_tf = null; 53 54 private final String PARAM_TRANSLET = "translet="; 56 private final String PARAM_DOCUMENT = "document="; 57 private final String PARAM_STATS = "stats="; 58 59 private PrintWriter m_out = null; 61 62 65 public void errorMessage(String message, Exception e) { 66 if (m_out == null) { 67 return; 68 } 69 m_out.println("<h1>XSL transformation error</h1>"+message); 70 m_out.println("<br>Exception:</br>"+e.toString()); 71 } 72 73 public void errorMessage(String message) { 74 if (m_out == null) return; 75 m_out.println("<h1>XSL transformation error</h1>"+message); 76 } 77 78 81 public boolean init(Server server, String prefix) { 82 return true; 83 } 84 85 88 public boolean respond(Request request) throws IOException { 89 90 final StringWriter sout = new StringWriter (); 92 m_out = new PrintWriter (sout); 93 94 String transletName = null; 96 String document = null; 97 String stats = null; 98 99 final StringTokenizer params = new StringTokenizer (request.query,"&"); 101 while (params.hasMoreElements()) { 102 final String param = params.nextToken(); 103 if (param.startsWith(PARAM_TRANSLET)) { 104 transletName = param.substring(PARAM_TRANSLET.length()); 105 } 106 else if (param.startsWith(PARAM_DOCUMENT)) { 107 document = param.substring(PARAM_DOCUMENT.length()); 108 } 109 else if (param.startsWith(PARAM_STATS)) { 110 stats = param.substring(PARAM_STATS.length()); 111 } 112 } 113 114 try { 115 if ((transletName == null) || (document == null)) { 117 errorMessage("Parameters <b><tt>translet</tt></b> and/or "+ 118 "<b><tt>document</tt></b> not specified."); 119 } 120 else { 121 if (m_tf == null) { 122 m_tf = TransformerFactory.newInstance(); 123 try { 124 m_tf.setAttribute("use-classpath", Boolean.TRUE); 125 } catch (IllegalArgumentException iae) { 126 System.err.println( 127 "Could not set XSLTC-specific TransformerFactory " 128 + "attributes. Transformation failed."); 129 } 130 } 131 Transformer t = 132 m_tf.newTransformer(new StreamSource (transletName)); 133 134 final long start = System.currentTimeMillis(); 136 t.transform(new StreamSource (document), 137 new StreamResult (m_out)); 138 final long done = System.currentTimeMillis() - start; 139 m_out.println("<!-- transformed by XSLTC in "+done+"ms -->"); 140 } 141 } 142 catch (Exception e) { 143 errorMessage("Internal error.",e); 144 } 145 146 request.sendResponse(sout.toString()); 148 return true; 149 } 150 151 152 } 153 | Popular Tags |