cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From C├ędric Damioli <cedric.dami...@anyware-tech.com>
Subject Re: how to call a servlet from a generator, but with parameters POSTed!
Date Thu, 14 Mar 2002 08:01:27 GMT
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
> walter@e-gramma.it
> 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: <cocoon-users-unsubscribe@xml.apache.org>
> For additional commands, e-mail: <cocoon-users-help@xml.apache.org>
>



---------------------------------------------------------------------
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: <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail: <cocoon-users-help@xml.apache.org>


Mime
View raw message