Discussions

XML & Web services: Echo01.java makes an error at runtime!

  1. Echo01.java makes an error at runtime! (1 messages)

    I downloaded Echo01.java and slideSample01.xml from
      http://java.sun.com/xml/jaxp-1.1/docs/tutorial/sax/2a_echo.html.

    It makes an error at runtime:
      ... ...
      at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at java.lang.ClassLoader.loadClassInternal(Unknown Source)

    I found one thing!
    If I comment,
      // import org.xml.sax.helpers.DefaultHandler;
      public class Echo01 //extends DefaultHandler

      it doesn't make an error but do nothing.

    And I found that crimson.jar have org/xml/sax/helpers/DefaultHandler.class.

    Please give me an answer!

    *** Echo01.java ***
    import java.io.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.DefaultHandler;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;

    public class Echo01 extends DefaultHandler
    {
        public static void main(String argv[])
        {
            if (argv.length != 1) {
                System.err.println("Usage: cmd filename");
                System.exit(1);
            }

            // Use an instance of ourselves as the SAX event handler
            DefaultHandler handler = new Echo01();
            // Use the default (non-validating) parser
            SAXParserFactory factory = SAXParserFactory.newInstance();
            try {
                // Set up output stream
                out = new OutputStreamWriter(System.out, "UTF8");

                // Parse the input
                SAXParser saxParser = factory.newSAXParser();
                saxParser.parse( new File(argv[0]), handler);

            } catch (Throwable t) {
                t.printStackTrace();
            }
            System.exit(0);
        }

        static private Writer out;

        //===========================================================
        // SAX DocumentHandler methods
        //===========================================================

        public void startDocument()
        throws SAXException
        {
            emit("<?xml version='1.0' encoding='UTF-8'?>");
            nl();
        }

        public void endDocument()
        throws SAXException
        {
            try {
                nl();
                out.flush();
            } catch (IOException e) {
                throw new SAXException("I/O error", e);
            }
        }

        public void startElement(String namespaceURI,
                                 String lName, // local name
                                 String qName, // qualified name
                                 Attributes attrs)
        throws SAXException
        {
            String eName = lName; // element name
            if ("".equals(eName)) eName = qName; // namespaceAware = false
            emit("<"+eName);
            if (attrs != null) {
                for (int i = 0; i < attrs.getLength(); i++) {
                    String aName = attrs.getLocalName(i); // Attr name
                    if ("".equals(aName)) aName = attrs.getQName(i);
                    emit(" ");
                    emit(aName+"=\""+attrs.getValue(i)+"\"");
                }
            }
            emit(">");
        }

        public void endElement(String namespaceURI,
                               String sName, // simple name
                               String qName // qualified name
                              )
        throws SAXException
        {
            emit("</"+sName+">");
        }

        public void characters(char buf[], int offset, int len)
        throws SAXException
        {
            String s = new String(buf, offset, len);
            emit(s);
        }

        //===========================================================
        // Utility Methods ...
        //===========================================================

        // Wrap I/O exceptions in SAX exceptions, to
        // suit handler signature requirements
        private void emit(String s)
        throws SAXException
        {
            try {
                out.write(s);
                out.flush();
            } catch (IOException e) {
                throw new SAXException("I/O error", e);
            }
        }

        // Start a new line
        private void nl()
        throws SAXException
        {
            String lineEnd = System.getProperty("line.separator");
            try {
                out.write(lineEnd);
            } catch (IOException e) {
                throw new SAXException("I/O error", e);
            }
        }
    }
  2. You need to add the JAR file with the class you mentioned, to your CLASSPATH.

    It's just moaning it can't find the class it wants.

    The reason it does nothing is that your class is no longer a handler for documents so there is nothing it can ask you to do.

    Chz

    Tony