[jdom-interest] Socket: Logical end of fle problem

Marcus Schneller schnemac at zhwin.ch
Thu Feb 14 04:37:18 PST 2002


I try to pass a BufferedReader from a Socket to the build(Reader reader) 
Method. To avoid that the parser closes the Stream i did following:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MyBufferedReader extends BufferedReader{
        public MyBufferedReader(InputStreamReader i) {

        public void close() {

To find the logical end of the file a did following;

import org.xml.sax.helpers.XMLFilterImpl;
import org.xml.sax.*;

public class SocketFilter extends XMLFilterImpl {

    /** Variablen, die das Ende des Documents erkennen sollen */
    private int level;
    private String firstTag;

    public void startElement(String uri, String localName,
      String qName, Attributes atts) throws SAXException {

      if (level++ == 0)
        firstTag = localName;
      super.startElement(uri, localName, qName, atts);
      System.out.println("start"+ localName);

    public void endElement(String uri, String localName,
      String qName) throws SAXException {

      if ((--level == 0) || firstTag.equals(localName))
        throw new SAXException("Finished");
      super.endElement(uri, localName, qName);
      System.out.println("stop"+ localName);

The class I create the SaxBuilder looks like this:

import java.io.InputStream;
import java.io.*;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.Namespace;

  public class InputDocumentHandler{

    private Document doc;
    private SAXBuilder builder;
    private Namespace ns;
    public InputDocumentHandler() {
        builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
           builder.setXMLFilter(new SocketFilter());             

    public void createDocument(Reader reader) throws JDOMException{
              doc = builder.build(reader);
              ns = doc.getRootElement().getNamespace();
        catch(JDOMException j){
            throw new JDOMException("Fehler beim Erzeugen des Documents: 
"+ j.getMessage());

When running the System.out.println(doc.toString()); Statement says:
[Document:  No DOCTYPE declaration,  No root element]
and the ns = doc.getRootElement().getNamespace(); Statement throws a 

What do I do wrong?

I read the FAQ on http://xml.apache.org/xerces-j/faq-write.html#faq-11 
about the Socket problem, but didn't manage to get it to work with 

Thanks for help


More information about the jdom-interest mailing list