Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id: TransformServlet.java 470245 2006-11-02 06:34:33Z minchau $ */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerException; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.xml.sax.SAXException; /** * This servlet demonstrates how XSL transformations can be made available as * a web service. See the CompileServlet for an example on how stylesheets * can be pre-compiled before this servlet is invoked. * * Note that the XSLTC transformation engine is invoked through the JAXP * interface, using the XSLTC "use-classpath" attribute. The * "use-classpath" attribute specifies to the XSLTC TransformerFactory * that a precompiled version of the stylesheet (translet) may be available, * and that that should be used in preference to recompiling the stylesheet. * @author Morten Jorgensen * @author Jacek Ambroziak */ public final class TransformServlet extends HttpServlet { /** * Main servlet entry point */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Initialise the output writer response.setContentType("text/html"); PrintWriter out = response.getWriter(); // Get the two paramters "class" and "source". String transletName = request.getParameter("class"); String documentURI = request.getParameter("source"); try { if ((transletName == null) || (documentURI == null)) { out.println("<h1>XSL transformation error</h1>"); out.println( "The parameters <b><tt>class</tt></b> and " + "<b><tt>source</tt></b> must be specified"); } else { TransformerFactory tf = TransformerFactory.newInstance(); try { tf.setAttribute("use-classpath", Boolean.TRUE); } catch (IllegalArgumentException iae) { System.err.println("Could not set XSLTC-specific TransformerFactory " + "attributes. Transformation failed."); } Transformer t = tf.newTransformer(new StreamSource(transletName)); // Start the transformation final long start = System.currentTimeMillis(); t.transform(new StreamSource(documentURI), new StreamResult(out)); final long done = System.currentTimeMillis() - start; out.println("<!-- transformed by XSLTC in " + done + "msecs -->"); } } catch (Exception e) { out.println("<h1>Error</h1>"); out.println(e.toString()); } } }