GNU JAXP Bug report: Attribute value including &

Ito Kazumitsu <[email protected]>
Newsgroups gmane.comp.java.vm.kaffe.general,gmane.comp.java.classpath.extensions.xml
Message-ID <[email protected]>
Hi,

I have found a case where an attribute value is treated
incorrectly.

If you write <a b='X&amp;Y&amp;Z'>, the value of attribute b
should be 'X&Y&Z', but 'X&' and 'Y&' becomes characters nodes
and only 'Z' becomes the value of b.

I am using gnu.xml.aelfred2.* included in kaffe.  They are
dated as follows

-rw-rw-r--   1 ito      ito          5318 Dec  3  2002 JAXPFactory.java
-rw-rw-r--   1 ito      ito         35362 Feb  7  2003 SAXDriver.java
-rw-rw-r--   1 ito      ito        128240 Dec  3  2002 XmlParser.java
-rw-rw-r--   1 ito      ito          9792 Dec 22  2002 XmlReader.java

Here is the test case.

$ cat TestSAX2.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

public class TestSAX2 {

    public static void main(String[] args) throws Exception {
        String uri = args[0];
        new TestSAX2(uri);
    }

    public TestSAX2(String uri) throws Exception {
	SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setFeature("http://xml.org/sax/features/namespaces", true);
        factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
	XMLReader xr = factory.newSAXParser().getXMLReader();
        xr.setContentHandler(new MyHandler());
        xr.parse(uri); 
    }

private class MyHandler extends DefaultHandler {

    public void startElement(
        String nsURI,
	String localName,
	String qName,
        Attributes atts
    ) {
	System.out.println("START ELEMENT");
	System.out.println(" URI = " + nsURI);
	System.out.println(" local = " + localName);
	System.out.println(" qname = " + qName);
	System.out.println("ATTRIBUTES");
        for (int a=0; a<atts.getLength(); a++) {
            System.out.println(" URI = " + atts.getURI(a));
            System.out.println(" local = " + atts.getLocalName(a));
            System.out.println(" qname = " + atts.getQName(a));
            System.out.println(" value = " + atts.getValue(a));
        }
	System.out.println("END ATTRIBUTES");
    }

    public void endElement(
        String nsURI,
	String localName,
	String qName
    ) {
	System.out.println("END ELEMENT");
	System.out.println(" URI = " + nsURI);
	System.out.println(" local = " + localName);
	System.out.println(" qname = " + qName);
    }

    public void characters(
        char ch[],
        int start,
        int length
    ) {
        System.out.println("CHARACTERS");
        System.out.println(new String(ch, start, length));
        System.out.println("END CHARACTERS");
    }

}

}
$ cat 01.xml
<a0>
<a b='X&amp;Y&amp;Z'>test</a>
</a0>
$ java TestSAX2 file://$HOME/javatest/01.xml
START ELEMENT
 URI = 
 local = a0
 qname = a0
ATTRIBUTES
END ATTRIBUTES
CHARACTERS
X&
END CHARACTERS
CHARACTERS
Y&
END CHARACTERS
START ELEMENT
 URI = 
 local = a
 qname = a
ATTRIBUTES
 URI = 
 local = b
 qname = b
 value = Z
END ATTRIBUTES
CHARACTERS
test
END CHARACTERS
END ELEMENT
 URI = 
 local = a
 qname = a
END ELEMENT
 URI = 
 local = a0
 qname = a0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.