cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cumming...@netscape.net (Steven Cummings)
Subject RE: R: R: Strings to SAX events
Date Mon, 11 Nov 2002 14:54:40 GMT
Luca,

The only thing that I can tell is that some of the events in your consumer really aren't being
passed along, you're just logging the event. I suppose this might affect the process. My consumer
implements and passes along EVERY single event aside from start/end-Document. I'll show that
code below. Just to note though, I didn't not extend AbstractXMLConsumer, I implemented the
XMLConsumer interface. I'm not sure how this would change things. Also, your code to perform
the parsing looks correct, but you directly create a XercesParser whereas I went on ahead
and used the Avalon parsing component (after all, we are coding a new component for Cocoon).
So here is that code snippet:

        Parser parser;
        try {
            parser = (Parser) this.manager.lookup(Parser.ROLE);
        } catch(ComponentException ce) {
            // Failed to get it, so no need to try releasing it (probably null anyway).
            throw new SAXException(ce);
        }
        try {
            InputSource source = new InputSource(new StringReader(content));
            // XMLConsumer implements both ContentHandler and LexicalHandler.
            ContentPassingXMLConsumer handler = 
            new ContentPassingXMLConsumer(super.xmlConsumer);
            parser.parse(source, handler, handler);
        } catch(Exception e) {
            throw new SAXException(e);
        } finally {
            this.manager.release(parser);
        }

And finally, here is my consumer:

public class ContentPassingXMLConsumer implements XMLConsumer {
    
    protected XMLConsumer xmlConsumer;
    
    public ContentPassingXMLConsumer(XMLConsumer xmlConsumer) {
        this.xmlConsumer = xmlConsumer;
    }
    
    public void startDocument() throws SAXException {
        // The document is going to be embedded, so don't send this event.
    }
    
    public void ignorableWhitespace(char[] ch, int start, int length) 
    throws SAXException {
        this.xmlConsumer.ignorableWhitespace(ch, start, length);
    }
    
    public void characters(char[] ch, int start, int length) 
    throws SAXException {
        this.xmlConsumer.characters(ch, start, length);
    }
    
    public void endEntity(String name) throws SAXException {
        this.xmlConsumer.endEntity(name);
    }
    
    public void processingInstruction(String target, String data) 
    throws SAXException {
        this.xmlConsumer.processingInstruction(target, data);
    }
    
    public void startPrefixMapping(String prefix, String uri) 
    throws SAXException {
        this.xmlConsumer.startPrefixMapping(prefix, uri);
    }
    
    public void endDTD() throws SAXException {
        this.xmlConsumer.endDTD();
    }
    
    public void skippedEntity(String name) throws SAXException {
        this.xmlConsumer.skippedEntity(name);
    }
    
    public void endDocument() throws SAXException {
        // As with startDocument, don't send this event.
    }
    
    public void startDTD(String name, String publicId, String systemId) 
    throws SAXException {
        this.xmlConsumer.startDTD(name, publicId, systemId);
    }
    
    public void endCDATA() throws SAXException {
        this.xmlConsumer.endCDATA();
    }
    
    public void startCDATA() throws SAXException {
        this.xmlConsumer.startCDATA();
    }
    
    public void comment(char[] ch, int start, int length) throws SAXException {
        this.xmlConsumer.comment(ch, start, length);
    }
    
    public void setDocumentLocator(Locator locator) {
        this.xmlConsumer.setDocumentLocator(locator);
    }
    
    public void endPrefixMapping(String prefix) throws SAXException {
        this.xmlConsumer.endPrefixMapping(prefix);
    }
    
    public void startElement(String namespaceURI, String localName, 
    String qName, Attributes atts) throws SAXException {
        this.xmlConsumer.startElement(namespaceURI, localName, qName, atts);
    }
    
    public void endElement(String namespaceURI, String localName, String qName) 
    throws SAXException {
        this.xmlConsumer.endElement(namespaceURI, localName, qName);
    }
    
    public void startEntity(String name) throws SAXException {
        this.xmlConsumer.startEntity(name);
    }
}

This implements absolutely every method of XMLConsumer (ContentHandler and LexicalHandler)
and passes all but the document methods on. I really don't know what else to tell you about
why your code won't work. Again, I suspect it's either because you extend AbstractXMLConsumer
and don't quite implement all the methods or because you're directly using a XercesParser
instead of the Avalon parser. Hope this helps.

/S


"Luca Morandini" <spectrum.morandini@ipzs.it> wrote:

>Steven,
>
>first: we'd like to thank you for your help :)
>
>Second: we've tried to use your suggestion... to no avail :(
>
>Here's the failing code:
>
>InputSource source= new InputSource(new StringReader(svgs));
>XercesParser respParser;
>respParser= new XercesParser();
>ChartXMLConsumer cons= new ChartXMLConsumer((AbstractSAXTransformer)(this));
>respParser.setConsumer(cons);
>respParser.parse(source);
>
>It fails at the last statement with the dreaded "null pointer exc.".
>The parser we're using is an
>org.apache.cocoon.components.parser.XercesParser, while the ChartXMLConsumer
>is subclass of an org.apache.cocoon.xml.AbstractXMLConsumer, with suitable
>methods added.
>
>We think your idea is to trap some SAX events in the AbstractXMLConsumer
>subclass, and pass them along to the Transfomer class; while some SAX
>events, like StartDocument/EndDocument aren't passed along.
>
>Well, we've done that, but it fails before even passing a single SAX event
>to the transformer... any guess ?
>
>Best regards,
>
>P.S.
>Here's the AbstractXMLConsumer subclass code:
>
>    public class ChartXMLConsumer extends AbstractXMLConsumer {
>
>        AbstractSAXTransformer trasf;
>
>        ChartXMLConsumer(AbstractSAXTransformer trasfIn) {
>
>            this.trasf= trasfIn;
>        }
>
>        public void processingInstruction(String target, String data)
>                throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED AND IGNORED PI");
>        }
>
>        public void startDTD(String name, String publicId, String systemId)
>              throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED START DTD");
>        }
>
>        public void endDTD()
>            throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED START DTD");
>        }
>
>        public  void startDocument()
>                throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED START OF DOCUMENT
>V.02");
>        }
>
>        public  void endDocument()
>                throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED END OF DOCUMENT");
>        }
>
>        public void startElement(String uri, String name, String raw,
>                             Attributes attributes) throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED STARTELEMENT");
>            trasf.startElement(uri, name, raw, attributes);
>        }
>
>
>        public void endElement(String uri, String name, String raw)
>                throws SAXException {
>
>            getLogger().debug("[CHART XML CONSUMER] RECEIVED ENDELEMENT");
>            trasf.endElement(uri, name, raw);
>        }
>    }
>
>Luca Morandini
>lmorandini@ieee.org
>spectrum.morandini@ipzs.it
>
>> -----Messaggio originale-----
>> Da: Steven Cummings [mailto:cummingscs@netscape.net]
>> Inviato: venerdì 8 novembre 2002 17.43
>> A: cocoon-users@xml.apache.org
>> Oggetto: RE: R: Strings to SAX events
>>
>>
>> Luca,
>>
>> I'm doing something very similar to implement a SOAPTransformer.
>> What I've done is implement an XMLConsumer so that it passes ALL
>> events that it recieves directly to the transformer's super-class
>> (super.startElement, super.endElement... etc.) Because you've
>> probably already started an output SAX stream that you want to
>> embed the content of the string in, you simply neglect to pass
>> along the startDocument and endDocument events. This is very
>> important. Otherwise, the solution is pretty simple. Hope this helps.
>>
>> /S
>>
>> "Luca Morandini" <spectrum.morandini@ipzs.it> wrote:
>>
>> >Ludovic,
>> >
>> >we're writing a Transformer to produce SVG (and JPEG/PNG
>> optionally) charts.
>> >The idea is having the chart description and associated data in XML as
>> >input, transform them, ending up with a nice SVG to be serialized.
>> >
>> >We're using a charting library which doesn't produce a SAX stream, but
>> >outputs the SVG element as a string, hence, the need to insert this XML
>> >elements in the output SAX stream.
>> >
>> >I hope this clears the matter :)
>> >
>> >Luca Morandini
>> >Istituto Poligrafico e Zecca dello Stato
>> >lmorandini@ieee.org
>> >spectrum.morandini@ipzs.it
>> >
>> >
>> >> -----Messaggio originale-----
>> >> Da: Ludovic de Beaurepaire [mailto:ludovic.debeaurepaire@axonie.com]
>> >> Inviato: venerdì 8 novembre 2002 11.26
>> >> A: cocoon-users@xml.apache.org
>> >> Oggetto: Re: Strings to SAX events
>> >>
>> >>
>> >> Luca
>> >>
>> >> Sorry if it is NOK, but i didn't understand why you want to add
>> >> XML datas in
>> >> the transformer instead of in your pipeline's generator ?
>> >>
>> >> Ludovic
>> >> ----- Original Message -----
>> >> From: "Luca Morandini" <spectrum.morandini@ipzs.it>
>> >> To: <cocoon-users@xml.apache.org>
>> >> Sent: Friday, November 08, 2002 11:11 AM
>> >> Subject: R: Strings to SAX events
>> >>
>> >>
>> >> > Ludovic,
>> >> >
>> >> > thanks for your kind answer, but we are not in an XSP page
>> >> (we're writing
>> >> a
>> >> > Transformer instead), hence, your suggestion is not truly
>> useful to us.
>> >> >
>> >> > Best regards,
>> >> >
>> >> > Luca Morandini
>> >> > lmorandini@ieee.org
>> >> >
>> >> > > -----Messaggio originale-----
>> >> > > Da: Ludovic de Beaurepaire
>> [mailto:ludovic.debeaurepaire@axonie.com]
>> >> > > Inviato: venerdì 8 novembre 2002 11.02
>> >> > > A: cocoon-users@xml.apache.org
>> >> > > Oggetto: Re: Strings to SAX events
>> >> > >
>> >> > >
>> >> > > Try in a XSP the following, data is your xml string :
>> >> > >
>> >> > > <util:include-expr>
>> >> > > <util:expr><xsp:expr>
>> >> > > data
>> >> > > </xsp:expr></util:expr>
>> >> > > </util:include-expr>
>> >> > >
>> >> > >
>> >> > >
>> >> > > ----- Original Message -----
>> >> > > From: "Luca Morandini" <spectrum.morandini@ipzs.it>
>> >> > > To: <cocoon-users@xml.apache.org>
>> >> > > Sent: Friday, November 08, 2002 10:55 AM
>> >> > > Subject: Strings to SAX events
>> >> > >
>> >> > >
>> >> > > > Folks,
>> >> > > >
>> >> > > >  We're in the process of writing a Transformer, which, of
>> >> > > course, outputs
>> >> > > > SAX
>> >> > > >  events... but, in the midst of this stream , we need to
>> insert an
>> >> > > >  XML element stored in a string.
>> >> > > >
>> >> > > >  To do this we're groping in the dark trying something like
this:
>> >> > > >
>> >> > > >   JaxpParser respParser = new JaxpParser();
>> >> > > >   respParser.parse( new InputSource(new StringReader(str)),
>> >> > > >           new EmbeddedXMLPipe(contentHandler));
>> >> > > >
>> >> > > >  Which fails giving this:
>> >> > > >  org.apache.cocoon.ProcessingException: Failed to
>> execute pipeline.:
>> >> > > >  java.lang.ClassCastException
>> >> > > >  ...
>> >> > > >  Caused by: java.lang.ClassCastException
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > com.lucamorandini.charts.ChartTransformer.endElement(ChartTransfor
>> >> > > mer.java:6
>> >> > > > 55)
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > org.apache.cocoon.components.sax.XMLByteStreamInterpreter.parse(XM
>> >> > > LByteStrea
>> >> > > > mInterpreter.java:129)
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > org.apache.cocoon.components.sax.XMLByteStreamInterpreter.deserial
>> >> > > ize(XMLByt
>> >> > > > eStreamInterpreter.java:102)
>> >> > > >   at
>> >> > > >
>> org.apache.cocoon.components.pipeline.CachingEventPipeline.process
>> >> > > >  (CachingEventPipeline.java:219)
>> >> > > >   ... 44 more
>> >> > > >
>> >> > > >  java.lang.ClassCastException
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > com.lucamorandini.charts.ChartTransformer.endElement(ChartTransfor
>> >> > > mer.java:6
>> >> > > > 55)
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > org.apache.cocoon.components.sax.XMLByteStreamInterpreter.parse(XM
>> >> > > LByteStrea
>> >> > > > mInterpreter.java:129)
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > org.apache.cocoon.components.sax.XMLByteStreamInterpreter.deserial
>> >> > > ize(XMLByt
>> >> > > > eStreamInterpreter.java:102)
>> >> > > >   at
>> >> > > >
>> org.apache.cocoon.components.pipeline.CachingEventPipeline.process
>> >> > > >  (CachingEventPipeline.java:219)
>> >> > > >   at
>> >> > > >
>> >> > > >
>> >> > > org.apache.cocoon.components.pipeline.CachingStreamPipeline.proces
>> >> > > s(CachingS
>> >> > > > treamPipeline.java:399)
>> >> > > >
>> >> > > >  The classes we use are:
>> >> > > >   org.apache.avalon.excalibur.xml.JaxpParser;
>> >> > > >   org.xml.sax.InputSource;
>> >> > > >   java.io.StringReader;
>> >> > > >   org.apache.cocoon.xml.EmbeddedXMLPipe;
>> >> > > >
>> >> > > >  And the environment is:
>> >> > > >   Solaris 5.8
>> >> > > >   JDK 1.4.1_01
>> >> > > >   Tomcat 4.1.12-LE-jdk14
>> >> > > >   Cocoon 2.0.3
>> >> > > >
>> >> > > >  May someone please help us ?
>> >> > > >
>> >> > > >  Thanks in advance,
>> >> > > >
>> >> > > > Piero De Nicola & Luca Morandini
>> >> > > >
>> >> > > >
>> >> > > >      We are protected from the virus by Norton Antivirus
>> >> > > Corporate Edition
>> >> > > >
>> >> > > >
>> >> ---------------------------------------------------------------------
>> >> > > > Please check that your question  has not already been
>> >> answered in the
>> >> > > > FAQ before posting.
>> ><http://xml.apache.org/cocoon/faq/index.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/faq/index.html>
>> >> >
>> >> > To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
>> >> > For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>> >> >
>> >>
>> >>
>> >>      We are protected from the virus by Norton Antivirus
>> Corporate Edition
>> >>
>> >> ---------------------------------------------------------------------
>> >> Please check that your question  has not already been answered in the
>> >> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.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/faq/index.html>
>> >
>> >To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
>> >For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>> >
>> >
>> >     We are protected from the virus by Norton Antivirus
>> Corporate Edition
>> >
>> >---------------------------------------------------------------------
>> >Please check that your question  has not already been answered in the
>> >FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
>> >
>> >To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
>> >For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>> >
>> >
>>
>>
>> --
>> Steven Cummings
>> Columbia, MO
>> Email: cummingscs@netscape.net
>> AIM:   cummingscs
>> ICQ:   3330114
>>
>>
>> __________________________________________________________________
>> The NEW Netscape 7.0 browser is now available. Upgrade now!
>> http://channels.netscape.com/ns/browsers/download.jsp
>>
>> Get your own FREE, personal Netscape Mail account today at
>> http://webmail.netscape.com/
>>
>> ---------------------------------------------------------------------
>> Please check that your question  has not already been answered in the
>> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
>>
>> To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
>> For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>>
>>
>
>
>     We are protected from the virus by Norton Antivirus Corporate Edition
>
>---------------------------------------------------------------------
>Please check that your question  has not already been answered in the
>FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
>
>To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
>For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>
>


-- 
Steven Cummings
Columbia, MO
Email: cummingscs@netscape.net
AIM:   cummingscs
ICQ:   3330114


__________________________________________________________________
The NEW Netscape 7.0 browser is now available. Upgrade now! http://channels.netscape.com/ns/browsers/download.jsp


Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/

---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.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