[jdom-interest] RE: Something Odd in JDomResult (StreamResult works fine) (?)

John caron caron at unidata.ucar.edu
Fri Aug 3 13:44:00 PDT 2001


"Kevin Williams" <kwilliams at effsols.com> asked:

I am seeing the same problem; I have triple checked the jars on my classpath. Did you find the cause of this problem?

> I do have an </xsl:stylesheet> in the code, I just forgot to copy it into
> the email.
> 
> I changed my code to use a StreamResult instead of a JDom result (which is
> better for my code anyway, thanks).  But now I get a new error.  I'm using
> the xalan.jar that came with jdomb7.  Any more clues?
> 
> Thanks!
> 
> Kevin
> 
> 
> java.lang.NoSuchMethodError
>         at
> org.apache.xpath.axes.ChildIterator.nextNode(ChildIterator.java:140)
>         at
> org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.ja
> va:428)
>         at
> org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.jav
> a:193)
>         at
> org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.ja
> va:495)
>         at
> org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.jav
> a:193)
>         at
> org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
> erImpl.java:2154)
>         at
> org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
> erImpl.java:2097)
>         at
> org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:
> 739)
>         at
> org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.ja
> va:495)
>         at
> org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.jav
> a:193)
>         at
> org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
> erImpl.java:2154)
>         at
> org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
> erImpl.java:2097)
>         at
> org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Transformer
> Impl.java:2029)
>         at
> org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.j
> ava:1189)
>         at
> org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:2894)
>         at java.lang.Thread.run(Thread.java:484)
> 
> 
> 
> > -----Original Message-----
> > From: jdom-interest-admin at jdom.org
> > [mailto:jdom-interest-admin at jdom.org]On Behalf Of daniele rizzi
> > Sent: Friday, July 20, 2001 2:45 AM
> > To: Kevin Williams; jdom-interest at jdom.org
> > Subject: Something Odd in JDomResult (StreamResult works fine) (?) was
> > R: [jdom-interest] XML and XSL, fine using xt command line parser, but
> > java.util.EmptyStackException in JDom
> >
> >
> >
> > Dear all,
> > if you mind running the following code, you'll be amazed discovering
> > that a Transform into StreamResult works fine but the very same Transform
> > into a JDomResult falls into a java.util.EmptyStackException
> >
> > any hint ?
> > daniele.rizzi at largesys.it (ps. SAXResult works!, but it's not so useful)
> >
> >
> > ---- begin of code ----
> >
> > package dany;
> >
> > import org.jdom.*;
> > import org.jdom.input.*;
> > import org.jdom.output.*;
> > import org.jdom.transform.*;
> >
> > import org.xml.sax.*;
> > import org.xml.sax.helpers.*;
> >
> > import java.io.*;
> > import java.util.*;
> > import java.sql.*;
> >
> > import javax.xml.transform.*;
> > import javax.xml.transform.sax.*;
> > import javax.xml.transform.dom.*;
> > import javax.xml.transform.stream.*;
> >
> > import oracle.xml.parser.v2.* ;
> >
> > public class ErrorXsl  {
> >
> > public String xmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " +
> >    "<TemplateBody><Free_Form_Text>Ref#: </Free_Form_Text>" +
> >    "end of template</TemplateBody>";
> >
> > public String xslData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " +
> >    "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" " +
> >        " version=\"1.0\"> " +
> >        "<xsl:template match=\"TemplateBody\"> "+
> >        " Dear , <xsl:apply-templates/> Thank you for your
> > business.</xsl:template> "+
> >        " </xsl:stylesheet>";
> >
> >   /**
> >    * Constructor
> >    */
> >
> >   public ErrorXsl() {
> >
> >
> >     try {
> >
> >        //1_ open xml
> >
> >          StringReader sr = new StringReader(xmlData);
> >          SAXBuilder saxbuilder = new SAXBuilder(
> >               "oracle.xml.parser.v2.SAXParser", false);
> >
> >          Document docXml = saxbuilder.build(sr);
> >          sr.close();
> >
> >          System.out.println(printDocument(docXml));
> >
> >        //2_ open xsl
> >
> >        sr = new StringReader(xslData);
> >
> >        SAXSource ss = new SAXSource( new InputSource(sr));
> >        Transformer transformer =
> >             TransformerFactory.newInstance().newTransformer(ss);
> >
> >
> >        // this works
> >        //StreamResult outDoc = new StreamResult(new
> > File("c:\\pippo.txt"));
> >
> >        // this works too!
> >        //SAXResult  outDoc = new SAXResult(new DefaultHandler());
> >
> >        // this not!
> >        JDOMResult outDoc = new JDOMResult();
> >
> >
> >        transformer.transform(new JDOMSource(docXml), outDoc);
> >
> >     }
> >     catch(Exception ex) {
> >         System.out.println("EX:"+ex.getMessage());
> >         ex.printStackTrace();
> >
> >     }
> >
> >   }
> >
> >
> >  }
> >
> >   /**
> >    * main
> >    */
> >   public static void main(String[] args) {
> >     ErrorXsl errorXsl = new ErrorXsl();
> >   }
> > }
> > ---- end of code ----
> >
> >
> > -----Messaggio originale-----
> > Da: jdom-interest-admin at jdom.org
> > [mailto:jdom-interest-admin at jdom.org]Per conto di Kevin Williams
> > Inviato: venerdì 20 luglio 2001 0.42
> > A: jdom-interest at jdom.org
> > Oggetto: [jdom-interest] XML and XSL, fine using xt command line parser,
> > but java.util.EmptyStackException in JDom
> >
> >
> > Sorry for the length, but I wanted to make sure there was enough
> > information
> > to determine what the error is.  When I transform the xml with
> > the xsl from
> > the command line, it works fine.  When using JDom (code snippet
> > at bottom) I
> > get an exception.  I'm new to XSL (started yesterday :) ) so it may be a
> > simple error.  Thanks for your help.
> >
> > Here is the error I get when attempting to transform an xml string using a
> > simple stylesheet:
> >
> > javax.xml.transform.TransformerException: java.util.EmptyStackException
> >         at
> > org.apache.xalan.transformer.TransformerImpl.transformNode(Transfo
> rmerImpl.j
> > ava:1212)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.j
> ava:2894)
> >         at java.lang.Thread.run(Thread.java:484)
> > ---------
> > java.util.EmptyStackException
> >         at java.util.Stack.peek(Stack.java:82)
> >         at org.jdom.input.SAXHandler.characters(SAXHandler.java:483)
> >         at
> > org.xml.sax.helpers.XMLFilterImpl.characters(XMLFilterImpl.java:614)
> >         at
> > org.apache.xalan.transformer.ResultTreeHandler.characters(ResultTr
> eeHandler.
> > java:446)
> >         at
> > org.apache.xalan.templates.ElemTextLiteral.execute(ElemTextLiteral
> .java:233)
> >         at
> > org.apache.xalan.templates.ElemForEach.transformSelectedNodes(Elem
> ForEach.ja
> > va:495)
> >         at
> > org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTem
> plates.jav
> > a:193)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
> > (Transform
> > erImpl.java:2154)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
> > (Transform
> > erImpl.java:2097)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(T
> ransformer
> > Impl.java:2029)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.transformNode(Transfo
> rmerImpl.j
> > ava:1189)
> >         at
> > org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.j
> ava:2894)
> >         at java.lang.Thread.run(Thread.java:484)
> >
> > +++++++++++++++++++++++++++++++++++++++
> > the XML source:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <TemplateBody><Free_Form_Text>Ref#: </Free_Form_Text><ref_number>
> >          #[ref_number]
> >          <!-- This displays the reference number. -->
> >       </ref_number><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>PositionType:
> > </Free_Form_Text><position_type>
> >          #[position_type]
> >          <!-- This displays the current position type. -->
> >       </position_type><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>Product ID: </Free_Form_Text><product_id>
> >  #[product_id]
> >          <!-- This displays the current product ID. -->
> >       </product_id><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>Product Type:
> > </Free_Form_Text><product_type>
> >          #[product_type]
> >          <!-- This displaysthe current product type. -->
> >       </product_type><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>Ref# (again):
> > </Free_Form_Text><ref_number>
> >   #[ref_number]
> >          <!-- This displays the reference number. -->
> >       </ref_number><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>Product ID (again):
> > </Free_Form_Text><product_id>
> >          #[product_id]
> >          <!-- This displays the current product ID. -->
> >       </product_id><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>Ref# (yet again):
> > </Free_Form_Text><ref_number>
> >          #[ref_number]
> >          <!-- This displays the reference number. -->
> >       </ref_number><Free_Form_Text>
> > </Free_Form_Text><Free_Form_Text>
> > </Free_Form_Text></TemplateBody>
> >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > XSL template:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > version="1.0">
> > <xsl:template match="TemplateBody">
> > Dear #[customer],
> >
> > <xsl:apply-templates/>
> >
> > Thank you for your business.
> >
> > Sincerely,
> >
> > #[Preparer]
> > </xsl:template>
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > and the code that runs it:
> >       org.jdom.Document jdom =
> > ((JDomStyledDocument)bodyTextArea.getDocument()).generateJDom();
> >
> >       StringReader stylesheet = new StringReader(letterLayout);
> >
> >       try {
> >          Transformer transformer = TransformerFactory.newInstance()
> >                              .newTransformer(new
> > StreamSource(stylesheet));
> >          JDOMResult out = new JDOMResult();
> >          transformer.transform(new JDOMSource(jdom), out);
> >          org.jdom.Document outdoc = out.getDocument();
> >
> >
> >          ESIJDomTreeModel tempModel = new ESIJDomTreeModel(outdoc);
> >          try {
> >             String xmlStr = tempModel.generateXMLString();
> >             letterTextPane.setText(xmlStr);
> >          } catch (ESIException ex) {
> >             new ESIExceptionDialog(null, ex);
> >          }
> >
> >       } catch (TransformerException e) {
> >          //throw new JDOMException("XSLT Trandformation failed", e);
> >          ESILog.getLog().trace("XXXXXXXXXXXXX transform failed", e);
> >       }
> >
> > _______________________________________________
> > To control your jdom-interest membership:
> > http://lists.denveronline.net/mailman/options/jdom-interest/yourad
> dr at yourhos
> t.com
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
> t.com
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com

 


Regards, John




More information about the jdom-interest mailing list