XSLT in Servlet

wxdqz

New Member
I want to do tranformation in s servlet, as following:import java.net.URL;import java.net.MalformedURLException;import java.net.URLConnection;import org.w3c.dom.*;import org.apache.xerces.dom.DocumentImpl;import org.apache.xerces.dom.DOMImplementationImpl;import org.w3c.dom.Document;import org.apache.xml.serialize.OutputFormat;import org.apache.xml.serialize.XMLSerializer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.Transformer;import javax.xml.transform.stream.StreamSource;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.dom.DOMResult;// Imported SAX classesimport org.xml.sax.InputSource;import org.xml.sax.SAXException;// Imported Serializer classesimport org.apache.xalan.serialize.Serializer;import org.apache.xalan.serialize.SerializerFactory;import org.apache.xalan.templates.OutputProperties;// Imported JAVA API for XML Parsing classesimport javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class DOMServlet extends HttpServlet{public void doGet (HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{try {TransformerFactory tFactory = TransformerFactory.newInstance();if(tFactory.getFeature(DOMSource.FEATURE) && tFactory.getFeature(DOMResult.FEATURE)){// Process the stylesheet StreamSource and generate a Transformer.<!-- m --><a class="postlink" href="file://Transformer">file://Transformer</a><!-- m --> transformer = tFactory.newTransformer(new StreamSource(new URL("http://chris.rx3:8080/examples/birds.xsl").openStream()));Transformer transformer = tFactory.newTransformer(new StreamSource("birds.xsl"));file://Instantiate a DocumentBuilderFactory.DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();file://Use the DocumentBuilderFactory to create a DocumentBuilder.DocumentBuilder dBuilder = dFactory.newDocumentBuilder();file://Use the DocumentBuilder to parse the XML input.Document doc = dBuilder.parse("birds.xml");// Use the DOM Document to define a DOMSource object.DOMSource domSource = new DOMSource(doc);// Set the base URI for the DOMSource so any relative URIs it containscan// be resolved.domSource.setSystemId("birds.xml");// Create an empty DOMResult for the Result.DOMResult domResult = new DOMResult();// Perform the transformation, placing the output in the DOMResult.transformer.transform(domSource, domResult);}else{throw new org.xml.sax.SAXNotSupportedException("DOM nodeprocessing not supported!");}}catch (MalformedURLException mue1){mue1.printStackTrace();}catch ( Exception ex ){ex.printStackTrace();}}}I run it in Tomcat 3.2.1, and exception reported:javax.xml.parsers.ParserConfigurationException: Namespace not supported bySAXParserat com.sun.xml.parser.SAXParserImpl.<init>(SAXParserImpl.java:60)at com.sun.xml.parser.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:57)at org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:708)at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:601)at DOMServlet.doGet(DOMServlet.java:85)at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)at org.apache.tomcat.core.Handler.service(Handler.java:286)at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)at java.lang.Thread.run(Thread.java:479)Why?The same code works in an java application.The Xsl is:<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="person"><xsl:processing-instruction name="cocoon-format">type="text/html"</xsl:processing-instruction><html><head><title>Chris DOM Sample</title></head><body><p><br/></p><h1 align="center"><b><xsl:value-of select="name"/></b></h1><br/><h1 align="center"><b><xsl:value-of select="age"/></b></h1><br/><h1 align="center"><b><xsl:value-of select="height"/></b></h1><br/><center><table width="80%"><tr><td></td></tr></table></center></body></html></xsl:template></xsl:stylesheet>
 
Back
Top