[jdom-interest] newbie jdom -> xalan problem

Alan Eustace alan.eustace at bigfoot.com
Thu Apr 5 10:30:51 PDT 2001


Thanks for that, it works. (code is below)
The only thing that concerns me is that the process of integrating JDOM with Xalan
using piped streams seems overly complex (to an avowed newbie :-)). I was trying to do
it this way because I had built a certain amount of code around using piped streams,
as per the FAQ of a month ago, and only ran into problems with that lately.

I'm now trying to run the new suggestion in the FAQ  using JDOM Result and JDOM
Source.
Alan.

       PipedInputStream in = new PipedInputStream();
       final PipedOutputStream pout  = new PipedOutputStream( in );
       StreamSource source = new StreamSource( in );
       StreamResult outsource = new StreamResult (out);

       // starting a new thread with an "on the spot" Runnable impl.
       new Thread(new Runnable(){
          public void run(){
   try{
                XMLOutputter xmlOutputter = new XMLOutputter();
                xmlOutputter.output( xmldoc, pout  );

                pout.close();
   }
   catch(Exception e){
   }
          }
       }).start();

       processor.transform( source, outsource );
      }


Ken Rune Helland wrote:

> You have to write to the pipe and read from the pipe in to different threads
> because the write to the pipetoutputstream will block when
> a seartain number of bytes have been written to it waiting for some tread to
> read them from the pipedinputstream.
>
> try:
>
>    try{
>
>        PipedInputStream in = new PipedInputStream();
>        PipedOutputStream pout  = new PipedOutputStream( in );
>        StreamSource source = new StreamSource( in );
>        StreamResult outsource = new StreamResult (out);
>
>        // starting a new thread with an "on the spot" Runnable impl.
>        new Thread(new Runnable(){
>           run(){
>
>              XMLOutputter xmlOutputter = new XMLOutputter();
>              xmlOutputter.output( xmldoc, pout  );
>
>              pout.close();
>           }
>        }).start();
>
>        processor.transform( source, outsource );
>     }
>     catch (Exception e) {
>        e.printStackTrace();
>     }
>
> Warning, this is from the top of my head and i have not
> had time to test this.
>
> KenR
>
> At 03:49 PM 4/5/2001 +0100, Alan Eustace wrote:
> >I'd be very grateful if someone can shed any light on this;
> >I'm processing xml in a servlet, using piped streams as per the jdom faq
> >of about a month ago.
> >The parser hangs at the  "xmlOutputter.output( doc, pout );" line. I had
> >a similar problem before, which was to do
> >with not closing the piped output stream: adding the close() call solved
> >that, but I'm baffled by this problem. No exception is being thrown.
> >
> >Many thanks,
> >Alan Eustace.
> >
> >import java.io.*;
> >import javax.servlet.*;
> >import javax.servlet.http.*;
> >import java.util.*;
> >import org.jdom.Document;
> >import org.jdom.Element;
> >import org.jdom.input.*;
> >import org.jdom.output.*;
> >import org.jdom.input.SAXBuilder;
> >import org.jdom.output.XMLOutputter;
> >
> >// Xalan-J 2
> >import javax.xml.transform.Result;
> >import javax.xml.transform.Source;
> >import javax.xml.transform.Templates;
> >import javax.xml.transform.Transformer;
> >import javax.xml.transform.TransformerFactory;
> >import javax.xml.transform.stream.StreamSource;
> >import javax.xml.transform.stream.StreamResult;
> >
> >
> >
> >public class JDOMXalan extends HttpServlet{
> >
> >
> >   PrintWriter out;
> >   Element msg;
> >   Document xmldoc;
> >   Transformer processor;
> >
> >
> >   public void init(ServletConfig config)throws ServletException{
> >               super.init(config);
> >
> >             try{
> >
> >               File xslt = new File("foo.xsl");
> >               SAXBuilder builder = new SAXBuilder();
> >               xmldoc = builder.build(new File("foo.xml"));
> >               Element root = xmldoc.getRootElement();
> >               msg = root.getChild("message");
> >               TransformerFactory transformerFactory =
> >TransformerFactory.newInstance();
> >               Templates stylesheet = transformerFactory.newTemplates(new
> >StreamSource( xslt ) );
> >               processor = stylesheet.newTransformer();
> >
> >             }
> >             catch (Exception j){
> >                   j.printStackTrace();
> >             }
> >   }
> >
> >
> >   public void doGet(HttpServletRequest req, HttpServletResponse
> >res)throws
> >   ServletException, IOException{
> >         out = res.getWriter();
> >         res.setContentType("text/html");
> >
> >       try{
> >
> >       PipedInputStream in = new PipedInputStream();
> >       PipedOutputStream pout  = new PipedOutputStream( in );
> >       StreamSource source = new StreamSource( in );
> >       StreamResult outsource = new StreamResult (out);
> >
> >       XMLOutputter xmlOutputter = new XMLOutputter();
> >        //***parser hangs here***
> >       xmlOutputter.output( xmldoc, pout  );
> >
> >       pout.close();
> >       processor.transform( source, outsource );
> >       }
> >       catch (Exception e) {
> >          e.printStackTrace();
> >       }
> >   }
> >}
> >
> >_______________________________________________
> >To control your jdom-interest membership:
> >http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com




More information about the jdom-interest mailing list