-
Bug
-
Resolution: Fixed
-
P3
-
6
-
b78
-
x86
-
linux
FULL PRODUCT VERSION :
[jwi@stujwi tcli]$ java -version
java version "1.6.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-beta-b59g)
Java HotSpot(TM) Client VM (build 1.6.0-beta-b59g, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Linux stujwi.eur.ad.sag 2.6.15-1.1831_FC4 #1 Tue Feb 7 13:37:42 EST 2006 i686 i686 i386 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The attached program is parsing an XML document, demonstrating that it is well formed. Once that is done, it parses the same document again, this time transforming the output to a stream. The result is expected to be well formed as well.
However, this is not the case: The result document contains multiple instances of the attribute xmlns:xql.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the attached Java class.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
This is with JDK 1.5:
[jwi@stujwi tcli]$ /usr/java/jdk1.5.0_06/bin/java -cp target/classes/ TSD3
Input is well formed.
Output is well formed.
ACTUAL -
And this is with JDK1.6:
[jwi@stujwi tcli]$ /usr/java/jdk1.6.0/bin/java -cp target/classes/ TSD3
Input is well formed.
<?xml version="1.0" encoding="UTF-8"?><ino:response xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/" xmlns:xql="http://metalab.unc.edu/xql/"> <xql:query>xs:schema[@ino:docname='ino:collection/TSD3']</xql:query></ino:response>
org.xml.sax.SAXParseException: Attribute "xmlns:xql" was already specified for element "ino:response".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1401)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1545)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1310)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1281)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3079)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:910)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:506)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at TSD3.parseString(TSD3.java:18)
at TSD3.main(TSD3.java:35)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
public class TSD3 {
private static void parseString(String s) throws Exception {
InputSource is = new InputSource(new StringReader(s));
SAXParserFactory.newInstance().newSAXParser().parse(is, new DefaultHandler());
}
public static void main(String[] args) throws Exception {
final String xsd =
"<ino:response"
+ " xmlns:ino='http://namespaces.softwareag.com/tamino/response2'"
+ " xmlns:xql='http://metalab.unc.edu/xql/'>"
+ " <xql:query>xs:schema[@ino:docname='ino:collection/TSD3']</xql:query>"
+ "</ino:response>";
parseString(xsd);
System.out.println("Input is well formed.");
Transformer t = TransformerFactory.newInstance().newTransformer();
StreamSource ss = new StreamSource(new StringReader(xsd));
StringWriter sw = new StringWriter();
t.transform(ss, new StreamResult(sw));
try {
parseString(sw.toString());
System.out.println("Output is well formed.");
} catch (SAXParseException e) {
System.out.println(sw.toString());
e.printStackTrace(System.out);
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Choose a different JAXP implementation.
Release Regression From : 5.0
The above release value was the last known release where this
bug was known to work. Since then there has been a regression.
[jwi@stujwi tcli]$ java -version
java version "1.6.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-beta-b59g)
Java HotSpot(TM) Client VM (build 1.6.0-beta-b59g, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Linux stujwi.eur.ad.sag 2.6.15-1.1831_FC4 #1 Tue Feb 7 13:37:42 EST 2006 i686 i686 i386 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The attached program is parsing an XML document, demonstrating that it is well formed. Once that is done, it parses the same document again, this time transforming the output to a stream. The result is expected to be well formed as well.
However, this is not the case: The result document contains multiple instances of the attribute xmlns:xql.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the attached Java class.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
This is with JDK 1.5:
[jwi@stujwi tcli]$ /usr/java/jdk1.5.0_06/bin/java -cp target/classes/ TSD3
Input is well formed.
Output is well formed.
ACTUAL -
And this is with JDK1.6:
[jwi@stujwi tcli]$ /usr/java/jdk1.6.0/bin/java -cp target/classes/ TSD3
Input is well formed.
<?xml version="1.0" encoding="UTF-8"?><ino:response xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/" xmlns:xql="http://metalab.unc.edu/xql/"> <xql:query>xs:schema[@ino:docname='ino:collection/TSD3']</xql:query></ino:response>
org.xml.sax.SAXParseException: Attribute "xmlns:xql" was already specified for element "ino:response".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1401)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1545)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1310)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1281)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3079)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:910)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:506)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at TSD3.parseString(TSD3.java:18)
at TSD3.main(TSD3.java:35)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
public class TSD3 {
private static void parseString(String s) throws Exception {
InputSource is = new InputSource(new StringReader(s));
SAXParserFactory.newInstance().newSAXParser().parse(is, new DefaultHandler());
}
public static void main(String[] args) throws Exception {
final String xsd =
"<ino:response"
+ " xmlns:ino='http://namespaces.softwareag.com/tamino/response2'"
+ " xmlns:xql='http://metalab.unc.edu/xql/'>"
+ " <xql:query>xs:schema[@ino:docname='ino:collection/TSD3']</xql:query>"
+ "</ino:response>";
parseString(xsd);
System.out.println("Input is well formed.");
Transformer t = TransformerFactory.newInstance().newTransformer();
StreamSource ss = new StreamSource(new StringReader(xsd));
StringWriter sw = new StringWriter();
t.transform(ss, new StreamResult(sw));
try {
parseString(sw.toString());
System.out.println("Output is well formed.");
} catch (SAXParseException e) {
System.out.println(sw.toString());
e.printStackTrace(System.out);
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Choose a different JAXP implementation.
Release Regression From : 5.0
The above release value was the last known release where this
bug was known to work. Since then there has been a regression.