You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Sieger, Nicholas" <ns...@netperceptions.com> on 2000/07/11 18:06:48 UTC

RE: BUG: SAXParser endElement reports incorrect local name w/ nam espaces

Jeffrey,

I'm the other poster that Kevin was referring to.  If it helps you, here's
an excerpt from my post a couple weeks back that also included a test case
that you might try out to reproduce the problem.

Thanks for looking into it,

Nick Sieger
nsieger@netperceptions.com

--- begin XercesTest.java ---

import java.io.StringReader;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class XercesTest
{
    private static String testNS = "/dev/null";
    private static String testXML1 =
        "<?xml version=\"1.0\" standalone=\"yes\"?>"
        + " <a xmlns=\"" + testNS + "\">\n"
        + "  <b>\n"
        + "   <c></c>\n"
        + "  </b>\n"
        + " </a>\n";
    private static String testXML2 =
        "<?xml version=\"1.0\" standalone=\"yes\"?>"
        + " <test:a xmlns:test=\"" + testNS + "\">\n"
        + "  <test:b>\n"
        + "   <test:c></test:c>\n"
        + "  </test:b>\n"
        + " </test:a>\n";

    private int elementAStart;
    private int elementBStart;
    private int elementCStart;
    private int elementAEnd;
    private int elementBEnd;
    private int elementCEnd;

    public XercesTest () {
        elementAStart = 0;
        elementBStart = 0;
        elementCStart = 0;
        elementAEnd   = 0;
        elementBEnd   = 0;
        elementCEnd   = 0;
    }

    public class MyHandler extends DefaultHandler
    {
        public void startElement (String namespaceURI, String name,
                                  String qName, Attributes attrs)
            throws SAXException {

            if (namespaceURI.equals (testNS)) {

                if (name.equals ("a")) {
                    elementAStart++;
                }
                else if (name.equals ("b")) {
                    elementBStart++;
                }
                else if (name.equals ("c")) {
                    elementCStart++;
                }
            }
        }
        
        public void endElement (String namespaceURI, String name,
                                String qName)
            throws SAXException {

            if (namespaceURI.equals (testNS)) {

                if (name.equals ("a")) {
                    elementAEnd++;
                }
                else if (name.equals ("b")) {
                    elementBEnd++;
                }
                else if (name.equals ("c")) {
                    elementCEnd++;
                }
            }
        }
    }

    public static class Assert
    {
        public static void equals (int a, int b) throws Exception {
            equals (new Integer (a), new Integer (b));
        }
        public static void equals (Object a, Object b) throws Exception {
            if (a.equals (b))
                return;
            throw new Exception ("assertion failed: expected <" + a.toString
()
                                 + "> but was <" + b.toString () + ">");
        }
    }

    public static void runTest1 () throws Exception {

        XMLReader reader = XMLReaderFactory.createXMLReader
            ("org.apache.xerces.parsers.SAXParser");

        reader.setFeature ("http://xml.org/sax/features/namespaces", true);

        XercesTest test = new XercesTest ();
        reader.setContentHandler (test.new MyHandler ());
        reader.parse (new InputSource (new StringReader (testXML1)));
                    
        Assert.equals (1, test.elementAStart);
        Assert.equals (1, test.elementBStart);
        Assert.equals (1, test.elementCStart);
        Assert.equals (1, test.elementCEnd);
        Assert.equals (1, test.elementBEnd);
        Assert.equals (1, test.elementAEnd);
    }

    public static void runTest2 () throws Exception {

        XMLReader reader = XMLReaderFactory.createXMLReader
            ("org.apache.xerces.parsers.SAXParser");

        reader.setFeature ("http://xml.org/sax/features/namespaces", true);

        XercesTest test = new XercesTest ();
        reader.setContentHandler (test.new MyHandler ());
        reader.parse (new InputSource (new StringReader (testXML2)));
                    
        Assert.equals (1, test.elementAStart);
        Assert.equals (1, test.elementBStart);
        Assert.equals (1, test.elementCStart);
        Assert.equals (1, test.elementCEnd);
        Assert.equals (1, test.elementBEnd);
        Assert.equals (1, test.elementAEnd);
    }

    public static void main (String[] args) {

        int exitStatus = 0;
        try {
            runTest1 ();
            runTest2 ();
        }
        catch (Exception e) {
            e.printStackTrace ();
            exitStatus = 1;
        }
        System.exit (exitStatus);
    }
}

--- end XercesTest.java

-----Original Message-----
From: Jeffrey Rodriguez [mailto:jeffreyr_97@hotmail.com]
Sent: Tuesday, July 11, 2000 5:05 AM
To: xerces-j-dev@xml.apache.org
Subject: Re: BUG: SAXParser endElement reports incorrect local name w/
namespaces


Hi Kevin,
Sorry for the delay in answering your report.

I will look at this tomorrow as time permits but I will keep
you posted in what I find.

Thanks for reporting this,

              Jeffrey Rodriguez
              IBM Silicon Valley

>From: Kevin Wiggen <kw...@yahoo.com>
>Reply-To: xerces-j-dev@xml.apache.org
>To: xerces-j-dev@xml.apache.org, nsieger@netperceptions.com
>Subject: BUG: SAXParser endElement reports incorrect local name w/ 
>namespaces
>Date: Sun, 9 Jul 2000 20:57:32 -0700 (PDT)
>
>I too am trying to use 1.1.* of the Xerces Java SAX
>parser with namespaces.  I read a note that spoke of
>the same problem I am having, but saw no reply.