[jdom-interest] BUG in SAXBuilder

Jason Hunter jhunter at collab.net
Thu Feb 22 12:39:30 PST 2001


I can't resist a story problem.  :-)

I just glanced at the test code (didn't try running it or anything), but
here's the likely culprit.  "buff" wraps around "file".  Thus reading
buff will read file.  In your test code you read buff, then you try
reading file.  Of course by this point file has been fully read.

-jh-

Kevin Baynes wrote:
> 
> I've run into a problem building a JDOM document by passing a Reader into
> the SAXBuilder (today's snapshot).
> 
> In the sample application included below, I can pass two direct subclasses
> of java.io.Reader into the SAXBuilder.build(java.io.Reader characterStream)
> method and get success  - BufferedReader and InputStreamReader.
> 
> However, when I try to pass the FileReader subclass of InputStreamReader, I
> get a failure.
> 
> I even tried upcasting the FileReader to InputStreamReader and Reader, which
> both fail.
> 
> I'm getting an error that appears to be similar to the EOF Socket error:
> org.jdom.JDOMException: The root element is required in a well-formed
> document.: Error on line 1: The root element is required in a well-formed
> document.
> 
> It seems to me that if I can pass a two subclasses of Reader and get
> success, that all the subclasses should work. (all subclasses should have
> all features of superclass).
> 
> Am I wrong in this thought? Can you see some error I am making?
> 
> You can download the following files to check me:
> ftp://ftpGuest:ftpGuest@hemlock.renex.com/RequestParser2.java
> ftp://ftpGuest:ftpGuest@hemlock.renex.com/RequestParser2.class
> ftp://ftpGuest:ftpGuest@hemlock.renex.com/trace.txt (pass this file to
> RequestParser)
> 
> Pass through the file to parse as command line args: java RequestParser2
> trace.txt
> 
> Thanks!
> 
> -Kevin Baynes
> kbaynes at renex.com
> 
> Here is the file that will generate the errors:
> 
> import java.io.*;
> 
> import org.jdom.*;
> import org.jdom.input.*;
> import org.jdom.output.*;
> 
> import java.util.*;
> 
> public class RequestParser2 {
> 
>         public static void main(String[] args) {
> 
>                 //if ( "Reader".equalsIgnoreCase(args[1]) )
> 
>                 try {
> 
>                         File theFile = new File(args[0]);
>                         FileReader file = new FileReader(theFile);
>                         BufferedReader buff = new BufferedReader(file);
>                         FileInputStream fis = new FileInputStream(new File(args[0]));
>                         InputStreamReader isr = new InputStreamReader(new FileInputStream(new
> File(args[0])));
> 
>                         SAXBuilder builder = new SAXBuilder();
>                         XMLOutputter fmt = new XMLOutputter();
>                         Document doc;
>                         int i;
> 
>                         try {
>                                 // build and output with FileInputStream
>                                 System.out.println("\n\n******************\nbuild and output with
> FileInputStream. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build(fis);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with BufferedReader
>                                 System.out.println("\n\n******************\nbuild and output with
> BufferedReader. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build(buff);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with FileReader
>                                 System.out.println("\n\n******************\nbuild and output with
> FileReader. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build( file);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with FileReader cast to Reader
>                                 System.out.println("\n\n******************\nbuild and output with
> FileReader cast to Reader. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build((java.io.Reader)file);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with FileReader cast to InputStreamReader
>                                 System.out.println("\n\n******************\nbuild and output with
> FileReader cast to InputStreamReader. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build((java.io.InputStreamReader)file);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with InputStreamReader
>                                 System.out.println("\n\n******************\nbuild and output with
> InputStreamReader. Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build( isr );
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                         try {
>                                 // build and output with File
>                                 System.out.println("\n\n******************\nbuild and output with File.
> Ready? (hit 'Enter')");
>                                 System.in.read();System.in.read();
>                                 doc = builder.build(theFile);
>                                 fmt.output(doc,System.out);
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
> 
>                 } catch (Exception e) {
>                         e.printStackTrace();
>                 }
> 
>         }
> 
> } // end RequestParser2 class
> 
> Here is the file being parsed:
> 
> <?xml version="1.0"
> encoding="UTF-8"?><WMREQUEST><ACTION>adminLogin</ACTION><PAYLOAD><LOGINID>ke
> vin</LOGINID><PWORD>kegvin</PWORD></PAYLOAD></WMREQUEST>
> 
> _______________________________________________
> 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