-
Bug
-
Resolution: Unresolved
-
P4
-
6
-
x86
-
linux
FULL PRODUCT VERSION :
1.6
ADDITIONAL OS VERSION INFORMATION :
Linux chopsuey.nyc.corp.google.com 2.6.18.5-gg7-mixed64-32 #1 SMP Tue Feb 13 18:07:55 GMT 2007 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
not applicable
A DESCRIPTION OF THE PROBLEM :
Parse an XML document using SAX (xerces) with an undefined entity &idontexist;
I expect to have ContentHandler#skippedEntity called with a stack trace something like this (as happens with java 1.5):
at com.google.gxp.compiler.parser.SaxXmlParser$SaxEventAdapter.skippedEntity(SaxXmlParser.java:219)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startGeneralEntity(AbstractSAXParser.java:419)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startGeneralEntity(XMLDTDValidator.java:1089)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.startEntity(XMLDocumentFragmentScannerImpl.java:634)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.startEntity(XMLDocumentScannerImpl.java:531)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:746)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1334)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1756)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at com.google.gxp.compiler.parser.SaxXmlParser.parse(SaxXmlParser.java:56)
instead skippedEntity() is NOT called.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
see Description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
see Description
ACTUAL -
see Description
ERROR MESSAGES/STACK TRACES THAT OCCUR :
not applicable
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package com.google.hjh;
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* This program demonstrates a bug in JDK 1.6.
*
* With JDK 1.5.0_06 it will output OK!
* With JDK 1.6.0_01 it will output FAIL!
*
* @author ###@###.### (Harry Heymann)
*/
public class XercesBug {
private static final String BAD_ENTITY = "badentity";
public static void main(String[] args) throws Exception {
//System.setProperty("org.xml.sax.driver",
// "org.apache.xerces.parsers.SAXParser");
SaxEventHandler saxEventHandler = new SaxEventHandler();
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(saxEventHandler);
xmlReader.setEntityResolver(saxEventHandler);
xmlReader.parse(getDocument());
if (BAD_ENTITY.equals(saxEventHandler.getSkippedEntity())) {
System.out.println("OK!");
} else {
System.out.println("FAIL!");
}
}
private static InputSource getDocument() {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE tag SYSTEM \"http://google.com/test/external.ent\">");
sb.append("<tag>");
sb.append("&" + BAD_ENTITY + ";");
sb.append("</tag>");
return new InputSource(new StringReader(sb.toString()));
}
private static class SaxEventHandler
implements ContentHandler, EntityResolver {
private String skippedEntity = null;
public String getSkippedEntity() {
return skippedEntity;
}
/**
* This is the real center of the bug. JDK 1.6.0_01 is failing to
* call this function for some unknown reason.
*/
public void skippedEntity(String name) {
skippedEntity = name;
}
public InputSource resolveEntity(String publicId, String systemId) {
InputSource result = new InputSource(new StringReader(""));
result.setPublicId(publicId);
result.setSystemId(systemId);
return result;
}
public void setDocumentLocator(Locator locator) {
}
public void startDocument() {
}
public void endDocument() {
}
public void startPrefixMapping(String prefix, String uri) {
}
public void endPrefixMapping(String prefix) {
}
public void startElement(String nsUri, String localName, String qName,
Attributes saxAttrs) {
}
public void endElement(String nsUri, String localName, String qName) {
}
public void characters(char[] ch, int start, int length) {
}
public void ignorableWhitespace(char ch[], int start, int length) {
}
public void processingInstruction(String target, String data) {
}
}
}
---------- END SOURCE ----------
1.6
ADDITIONAL OS VERSION INFORMATION :
Linux chopsuey.nyc.corp.google.com 2.6.18.5-gg7-mixed64-32 #1 SMP Tue Feb 13 18:07:55 GMT 2007 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
not applicable
A DESCRIPTION OF THE PROBLEM :
Parse an XML document using SAX (xerces) with an undefined entity &idontexist;
I expect to have ContentHandler#skippedEntity called with a stack trace something like this (as happens with java 1.5):
at com.google.gxp.compiler.parser.SaxXmlParser$SaxEventAdapter.skippedEntity(SaxXmlParser.java:219)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startGeneralEntity(AbstractSAXParser.java:419)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startGeneralEntity(XMLDTDValidator.java:1089)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.startEntity(XMLDocumentFragmentScannerImpl.java:634)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.startEntity(XMLDocumentScannerImpl.java:531)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:746)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1334)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1756)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at com.google.gxp.compiler.parser.SaxXmlParser.parse(SaxXmlParser.java:56)
instead skippedEntity() is NOT called.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
see Description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
see Description
ACTUAL -
see Description
ERROR MESSAGES/STACK TRACES THAT OCCUR :
not applicable
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package com.google.hjh;
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* This program demonstrates a bug in JDK 1.6.
*
* With JDK 1.5.0_06 it will output OK!
* With JDK 1.6.0_01 it will output FAIL!
*
* @author ###@###.### (Harry Heymann)
*/
public class XercesBug {
private static final String BAD_ENTITY = "badentity";
public static void main(String[] args) throws Exception {
//System.setProperty("org.xml.sax.driver",
// "org.apache.xerces.parsers.SAXParser");
SaxEventHandler saxEventHandler = new SaxEventHandler();
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(saxEventHandler);
xmlReader.setEntityResolver(saxEventHandler);
xmlReader.parse(getDocument());
if (BAD_ENTITY.equals(saxEventHandler.getSkippedEntity())) {
System.out.println("OK!");
} else {
System.out.println("FAIL!");
}
}
private static InputSource getDocument() {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE tag SYSTEM \"http://google.com/test/external.ent\">");
sb.append("<tag>");
sb.append("&" + BAD_ENTITY + ";");
sb.append("</tag>");
return new InputSource(new StringReader(sb.toString()));
}
private static class SaxEventHandler
implements ContentHandler, EntityResolver {
private String skippedEntity = null;
public String getSkippedEntity() {
return skippedEntity;
}
/**
* This is the real center of the bug. JDK 1.6.0_01 is failing to
* call this function for some unknown reason.
*/
public void skippedEntity(String name) {
skippedEntity = name;
}
public InputSource resolveEntity(String publicId, String systemId) {
InputSource result = new InputSource(new StringReader(""));
result.setPublicId(publicId);
result.setSystemId(systemId);
return result;
}
public void setDocumentLocator(Locator locator) {
}
public void startDocument() {
}
public void endDocument() {
}
public void startPrefixMapping(String prefix, String uri) {
}
public void endPrefixMapping(String prefix) {
}
public void startElement(String nsUri, String localName, String qName,
Attributes saxAttrs) {
}
public void endElement(String nsUri, String localName, String qName) {
}
public void characters(char[] ch, int start, int length) {
}
public void ignorableWhitespace(char ch[], int start, int length) {
}
public void processingInstruction(String target, String data) {
}
}
}
---------- END SOURCE ----------