Hi Walter, Walter Gamba wrote:
> Hello! > > SUMMARY: How to use a servlet as a generator in Cocoon, but allowing > forms data to be passed via POST method (And NOT GET!!) > ---------------------------------------------- > > > I can obtain correct XML output, provided I am happy with the raw XML > and i don't translate it .. (and a side question could be.. how can I > make the transformation from DOM to SAX efficiently, using some > xml.apache.org library.. without serializing the DOM on a Stream and > parsing it back?? THis brute force approach is the one I use now... > but this is another question.. i suppose.. ) Cocoon provides helpers to deal with DOM2SAX and SAX2DOM : org.apache.cocoon.xml.dom.DOMStreamer in your case. Look at Javadocs if this matches your needs. Concerning your NPE, I already had the same : my mistake was to have sent two contentHandler.startDocument(). And I think you may do so here according to your code : the first is explicitly written, and the second one may be implicit within the parser.parse(). > > > THe Problem arises when I add a Trasformer: > > <map:match pattern="prova/test.html"> > <map:generate type="testgen" > > <map:parameter name="servlet-class" > value="TestServlet"/> > </map:generate> > <map:transform src="stylesheets/prova/TestServlet.xsl"/> > <map:serialize type="html"/> > </map:match> > > I've made the xsl such that it works fine with our testServlet and the > requestGenerator: > ... > <map:generate type="request" /> > <map:transform src="stylesheets/prova/TestServlet.xsl"/> > > With the request generator it works fine and I get neatly formatted > HTML, with our servlet, that apparently generates the same kind of > XMLm it breaks down.. > > Or, to be correct, it does not match any tags. The XSL is read because > in the browser the basic HTML tags and title of the page (as specified > inthe top level XSL "/" template-mathcing rule) are displayed, but any > further XML tag is ignored, and moreover cocoon complains: > > FATAL_E (2002-03-13) 09:54.57:446 [core.xslt-processor] > (/cocoon/prova/test.html) Thread-20/TraxErrorHandler: Error in > TraxTransformer: javax.xml.transform.TransformerException: > java.lang.NullPointerException > javax.xml.transform.TransformerException: java.lang.NullPointerException > at > >org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1230) > > at > org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3139) > > at java.lang.Thread.run(Thread.java:484) > --------- > java.lang.NullPointerException > at > >org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:1887) > > > at > >org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1175) > > at > org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3139) > > at java.lang.Thread.run(Thread.java:484) > > > THat's it. I enclose the bit of code of the Generator that translated > a DOM to SAX events.. perhaps there is something here that works with > raw XML but breaks down when SAX events are sent down the pipeline.. > > Any help would be appreciated! > Thanx > > Walter Gamba > > ----------------------- > public synchronized void outputXML(String NSURI, Document doc) > { > try{ > super.contentHandler.startDocument(); > //super.contentHandler.startPrefixMapping("",NSURI); > transformDOM2SAX(super.contentHandler,doc); > //super.contentHandler.endPrefixMapping(""); > super.contentHandler.endDocument(); > }catch(SAXException s){ > log.error("Errore SAX!:"+s); > } > } > > private static /* synchronized */ void transformDOM2SAX(ContentHandler > cHandler, Document doc) { > //brute force way > try { > //1) open stream > CharArrayWriter writer = new CharArrayWriter(); > > printDocument(writer, doc); > > //2) create SAX parserthat can read from stream > SAXParserFactory spf = SAXParserFactory.newInstance(); > SAXParser parser = spf.newSAXParser(); > > //3) build a reader and InputSource > Reader reader = new CharArrayReader(writer.toCharArray()); > InputSource source = new InputSource(reader); > > log.debug("TestGenerator::transformDOM2SAX -> parse"); > ServletDefaultHandler sdh=new ServletDefaultHandler(cHandler); > try{ > parser.parse(source, sdh); > } > catch(Exception npe){ > log.error("Errore in PARSE:"+npe,npe); > } > //writer.close(); > log.debug("TestGenerator::transformDOM2SAX -> end parse"); > > } > catch (IOException ioe) { > log.error("Errore in creazione reader/writer oppure in > source:" + ioe, ioe); > } > catch (ParserConfigurationException pfe) { > log.error("Errore parseconfig!:" + pfe, pfe); > } > catch (SAXException sax) { > log.error("Errore sax!:" + sax, sax); > } > > > Walter Gamba > [EMAIL PROTECTED] > E-Gramma srl > via Palazzo di Citta' 8 - 10122 TORINO > tel 011-5136583 fax 011-5136582 > www.e-gramma.it > > > --------------------------------------------------------------------- > Please check that your question has not already been answered in the > FAQ before posting. <http://xml.apache.org/cocoon/faqs.html> > > To unsubscribe, e-mail: <[EMAIL PROTECTED]> > For additional commands, e-mail: <[EMAIL PROTECTED]> > --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faqs.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>