NullPointer Exception in class SAX2DTM during FOP generation with SAX Parser

Discussion in 'Java' started by Jens Mueller, Apr 12, 2005.

  1. Jens Mueller

    Jens Mueller Guest

    Hi there,

    this mainly a XSLT, SAX, FOP Question, so I am not sure whether this
    is the
    right place, have tried comp.text.xml as well ....

    I try to convert a Java object to XML via SAX and let the FOP
    Transformer convert that via XSLT to valid XSL-FO. So I define a
    SAXReader which fires the SAX Events for the Java Object. This works
    fine and the Transformation to PDF is ok.
    However, I have one object which contains an XHTML String and the tags
    inside that string shall be passed to the XSLT without changing them.
    I have a XSL which would handle them properly and convert them to
    valid XSL-FO, I just don't know how to get them thru SAX ...
    My understanding is that I have to just make them fire the correct SAX
    events as well. My Idea was to use a SAX Parser for that part, let it
    handle the XHTML text and then continue with my other object's
    attributes:

    code sample (will not compile, ok ;-):

    class MyObjectReader{
    public void parse(MyObject obj) throws SAXException {

    // this works fine
    handler.startDocument();
    handler.startElement("address");
    handler.element("city", obj.getCity());
    handler.element("street", obj.getStreet());
    handler.endElement("address");
    // now try to let a vanilla SAX parser do the xhtml
    XMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
    reader.setContentHandler(handler);
    handler.startElement("xhml");
    reader.parse(new InputSource(new StringReader(obj.getXHTMLString())));
    handler.endElement("xhml");
    handler.endDocument();

    }
    }

    The whole thing gets used inside the FOP Transformation:

    class PDFHelper{
    public void convertObj2PDF(){

    Driver driver = new Driver();
    //Setup Renderer (output format)
    driver.setRenderer(Driver.RENDER_PDF);
    TransformerFactory factory = TransformerFactory.newInstance();
    // create transformer with the appropriate xsl
    Transformer transformer = factory.newTransformer(new StreamSource(new
    File(indir, xslFileName)));

    // Setup input for XSLT transformation
    // this returns a source which uses the above Reader
    Source src = obj.getSource();
    // Resulting SAX events (the generated FO) must be piped through to
    FOP
    Result res = new SAXResult(driver.getContentHandler());
    // Start XSLT transformation and FOP processing
    transformer.transform(src, res);
    }
    }

    now what happens is that I get a NullPointerException when, inside the
    XSL Transformation, after the "embedded" Parser has finished, the
    reader tries to end the "xhtml" element (line:
    handler.endElement("xhml");).
    The exception looks like this:

    [12.04.05 17:07:21:531 CEST] 5dd35dd3 SystemOut O [12.04.05
    17:07:21,406 CEST] util.pdf.PDFHelper - convertObj2PDF:
    obj=vo.AusgangspostVO@754d754d : Error in Transformer: null
    java.lang.NullPointerException
    at java.lang.Throwable.<init>(Throwable.java)
    at java.lang.Throwable.<init>(Throwable.java)
    at java.lang.NullPointerException.<init>(NullPointerException.java:60)
    at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.endElement(SAX2DTM.java:1886)
    at util.pdf.EasyGenerationContentHandlerProxy.endElement(EasyGenerationContentHandlerProxy.java:208)
    at util.pdf.EasyGenerationContentHandlerProxy.endElement(EasyGenerationContentHandlerProxy.java:123)
    at util.pdf.AusgangspostXMLReader.generateFor(AusgangspostXMLReader.java:159)
    at util.pdf.AusgangspostXMLReader.parse(AusgangspostXMLReader.java:57)
    at util.pdf.AusgangspostXMLReader.parse(AusgangspostXMLReader.java:33)
    at org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:493)
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:658)
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1129)
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1107)
    at util.pdf.PDFHelper.convertObj2PDF(PDFHelper.java:111)

    I guess this might be bcause the SAX2DTM class used by the XSLT is not
    compatible with my org.apache.xerces.parsers.SAXParser. Is this the
    right direction? Can I fix the problem by using another parser?
    Am I getting something terribly wrong?

    I am using FOP 0.20.5 with xalan 2.4.1 and xerces 2.2.1
    The app is running with jdk 1.4 and I cannot switch to newer versions
    of xerces or xalan due to problems with the appserver.

    Any hints are highly appreciated (even to a better suited newsgroup
    ....)

    Regards

    Jens
    Jens Mueller, Apr 12, 2005
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. VitaminB
    Replies:
    1
    Views:
    792
    Oliver Wong
    Apr 26, 2006
  2. Jens Mueller
    Replies:
    0
    Views:
    704
    Jens Mueller
    Apr 12, 2005
  3. FX
    Replies:
    3
    Views:
    304
    Thomas Fritsch
    Sep 12, 2006
  4. Pablo
    Replies:
    0
    Views:
    946
    Pablo
    Mar 28, 2007
  5. Replies:
    2
    Views:
    550
Loading...

Share This Page