-
Bug
-
Resolution: Fixed
-
P4
-
6u20
-
b06
-
x86
-
linux_ubuntu
FULL PRODUCT VERSION :
1.6.0_20
1.6.0_29
1.7.0_04_ea
ADDITIONAL OS VERSION INFORMATION :
Ubuntu Linux 10.04 - kernel 2.6.0.32
Mac OS-X, 7.0.2 - Darwin Kernel Version 11.2.0
A DESCRIPTION OF THE PROBLEM :
The following well formed XML instances cause XML transformation to throw exceptions when using javax.xml.transform.stax.StAXSource as a source (but not when using StreamSource).
Causes java.lang.IllegalStateException("StAXSource(XMLStreamReader) with XMLStreamReader not in XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state"):
<?xml-stylesheet href='show.xsl' type='text/html'?>
<root/>
Causes javax.xml.transform.TransformerException("ParseError at [row,col]:[1,105] Message: found: DTD, expected START_ELEMENT or END_ELEMENT"):
<?xml version='1.0'?>
<?xml-stylesheet href='show.xsl' type='text/html'?>
<!DOCTYPE root>
<root/>
Causes javax.xml.transform.TransformerException("ParseError at [row,col]:[1,105] Message: found: DTD, expected START_ELEMENT or END_ELEMENT"):
<?xml version='1.0'?>
<?xml-stylesheet href='show.xsl' type='text/html'?>
<!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]>
<root/>
Similar bug reported as Bug ID 6715417, but further details, and more failures are uncovered by the attached unit test.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached (self contained) JUnit tests: StaxSourceParsingBug.java
also available here: https://xml-extractor.googlecode.com/svn/trunk/src/test/java/org/softee/extractor/transform/StaxSourceParsingBug.java
Unit tests have also been included, that show that the same XML instances that cause execptions when using StAXSource all succeed when using StreamSource.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Attached JUnit tests should all pass
ACTUAL -
Attached JUnit tests fails:
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource3()
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource5()
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource7()
ERROR MESSAGES/STACK TRACES THAT OCCUR :
StaxSourceParsingBug.testParseStaxSource3():
java.lang.IllegalStateException: StAXSource(XMLStreamReader) with XMLStreamReadernot in XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state
at javax.xml.transform.stax.StAXSource.<init>(StAXSource.java:155)
at org.softee.extractor.transform.StaxSourceParsingBug.parseStaxSource(StaxSourceParsingBug.java:134)
at org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource3(StaxSourceParsingBug.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
StaxSourceParsingBug.testParseStaxSource5():
javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,88]
Message: found: DTD, expected START_ELEMENT or END_ELEMENT
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:739)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:340)
at org.softee.extractor.transform.StaxSourceParsingBug.unityTransform(StaxSourceParsingBug.java:141)
at org.softee.extractor.transform.StaxSourceParsingBug.parseStaxSource(StaxSourceParsingBug.java:135)
at org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource5(StaxSourceParsingBug.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,88]
Message: found: DTD, expected START_ELEMENT or END_ELEMENT
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1250)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.bridge(StAXStream2SAX.java:145)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.parse(StAXStream2SAX.java:118)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:678)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:727)
... 28 more
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package org.softee.extractor.transform;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* This test was written to reproduce a bug that exists in Java SE, where exceptions are thrown when using a StaxSource
* to parse certain wellformed XML instances.
*
* Bug has been reproduced with the following Java versions:
* - 1.6.0_29-b11-402-11M3527 (Mac OS X, 10.7.2)
* - 1.7.0_04-ea-b13 (Mac OS X, 10.7.2)
*
* The bug has been previously reported http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=8315aa2186353a67f7fb0db73f510?bug_id=6715417
*/
public class StaxSourceParsingBug {
/** Succeeds StAXSource processing */
private static final String XML_1 = "<root/>";
/** Succeeds StAXSource processing */
private static final String XML_2 = "<!DOCTYPE root [<!ENTITY et 'Come Home'>]><root et='&et;'/>";
/** Fails StAXSource processing with java.lang.IllegalStateException */
private static final String XML_3 = "<?xml-stylesheet href='show.xsl' type='text/html'?><root/>";
/** Succeeds StAXSource processing */
private static final String XML_4 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><root/>";
/** Fails StAXSource processing with javax.xml.transform.TransformerException */
private static final String XML_5 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><!DOCTYPE root><root/>";
/** Succeeds StAXSource processing */
private static final String XML_6 = "<?xml version='1.0'?><!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>";
/** Fails StAXSource processing with javax.xml.transform.TransformerException */
private static final String XML_7 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>";
TransformerFactory tf = TransformerFactory.newInstance();
@BeforeClass
public static void beforeClass() {
//System.getProperties().list(System.out);
showProperty("java.version");
showProperty("java.runtime.version");
showProperty("os.name");
showProperty("os.version");
}
private static void showProperty(String name) {
System.out.printf("%s = %s%n", name, System.getProperty(name));
}
@Test
public void testParseStreamSource() throws Exception {
parseStreamSource(XML_1);
parseStreamSource(XML_2);
parseStreamSource(XML_3);
parseStreamSource(XML_4);
parseStreamSource(XML_5);
parseStreamSource(XML_6);
parseStreamSource(XML_7);
}
@Test
public void testParseStaxSource1() throws Exception {
parseStaxSource(XML_1);
}
@Test
public void testParseStaxSource2() throws Exception {
parseStaxSource(XML_2);
}
/**
* Fails with:
* java.lang.IllegalStateException: StAXSource(XMLStreamReader) with XMLStreamReader not in
* XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state
*/
@Test
public void testParseStaxSource3() throws Exception {
parseStaxSource(XML_3);
}
@Test
public void testParseStaxSource4() throws Exception {
parseStaxSource(XML_4);
}
/**
* Fails with:
* javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,105]
* Message: found: DTD, expected START_ELEMENT or END_ELEMENT
*/
@Test
public void testParseStaxSource5() throws Exception {
parseStaxSource(XML_5);
}
@Test
public void testParseStaxSource6() throws Exception {
parseStaxSource(XML_6);
}
/**
* Fails with:
* javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,105]
* Message: found: DTD, expected START_ELEMENT or END_ELEMENT
*/
@Test
public void testParseStaxSource7() throws Exception {
parseStaxSource(XML_7);
}
private void parseStreamSource(String xml) throws Exception {
Source source = new StreamSource(new StringReader(xml));
unityTransform(source, xml);
}
private void parseStaxSource(String xml) throws Exception {
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new StringReader(xml));
StAXSource source = new StAXSource(xmlStreamReader);
unityTransform(source, xml);
}
private void unityTransform(Source source, String sourceXml) throws Exception{
StringWriter sw = new StringWriter();
Result result = new StreamResult(sw);
tf.newTransformer().transform(source, result);
System.out.printf("%n%s:%nSource: %s%nResult: %s%n", source.getClass().getSimpleName(), sourceXml, sw);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Replacing the StAXSource with another Source implementation, such as StreamSource, SAXSource, DOMSource fixes the problem.
This, however is NOT possible when using frameworks (CXF) that expose a Source of type StAXSource
1.6.0_20
1.6.0_29
1.7.0_04_ea
ADDITIONAL OS VERSION INFORMATION :
Ubuntu Linux 10.04 - kernel 2.6.0.32
Mac OS-X, 7.0.2 - Darwin Kernel Version 11.2.0
A DESCRIPTION OF THE PROBLEM :
The following well formed XML instances cause XML transformation to throw exceptions when using javax.xml.transform.stax.StAXSource as a source (but not when using StreamSource).
Causes java.lang.IllegalStateException("StAXSource(XMLStreamReader) with XMLStreamReader not in XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state"):
<?xml-stylesheet href='show.xsl' type='text/html'?>
<root/>
Causes javax.xml.transform.TransformerException("ParseError at [row,col]:[1,105] Message: found: DTD, expected START_ELEMENT or END_ELEMENT"):
<?xml version='1.0'?>
<?xml-stylesheet href='show.xsl' type='text/html'?>
<!DOCTYPE root>
<root/>
Causes javax.xml.transform.TransformerException("ParseError at [row,col]:[1,105] Message: found: DTD, expected START_ELEMENT or END_ELEMENT"):
<?xml version='1.0'?>
<?xml-stylesheet href='show.xsl' type='text/html'?>
<!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]>
<root/>
Similar bug reported as Bug ID 6715417, but further details, and more failures are uncovered by the attached unit test.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached (self contained) JUnit tests: StaxSourceParsingBug.java
also available here: https://xml-extractor.googlecode.com/svn/trunk/src/test/java/org/softee/extractor/transform/StaxSourceParsingBug.java
Unit tests have also been included, that show that the same XML instances that cause execptions when using StAXSource all succeed when using StreamSource.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Attached JUnit tests should all pass
ACTUAL -
Attached JUnit tests fails:
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource3()
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource5()
org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource7()
ERROR MESSAGES/STACK TRACES THAT OCCUR :
StaxSourceParsingBug.testParseStaxSource3():
java.lang.IllegalStateException: StAXSource(XMLStreamReader) with XMLStreamReadernot in XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state
at javax.xml.transform.stax.StAXSource.<init>(StAXSource.java:155)
at org.softee.extractor.transform.StaxSourceParsingBug.parseStaxSource(StaxSourceParsingBug.java:134)
at org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource3(StaxSourceParsingBug.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
StaxSourceParsingBug.testParseStaxSource5():
javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,88]
Message: found: DTD, expected START_ELEMENT or END_ELEMENT
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:739)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:340)
at org.softee.extractor.transform.StaxSourceParsingBug.unityTransform(StaxSourceParsingBug.java:141)
at org.softee.extractor.transform.StaxSourceParsingBug.parseStaxSource(StaxSourceParsingBug.java:135)
at org.softee.extractor.transform.StaxSourceParsingBug.testParseStaxSource5(StaxSourceParsingBug.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,88]
Message: found: DTD, expected START_ELEMENT or END_ELEMENT
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1250)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.bridge(StAXStream2SAX.java:145)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.parse(StAXStream2SAX.java:118)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:678)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:727)
... 28 more
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package org.softee.extractor.transform;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* This test was written to reproduce a bug that exists in Java SE, where exceptions are thrown when using a StaxSource
* to parse certain wellformed XML instances.
*
* Bug has been reproduced with the following Java versions:
* - 1.6.0_29-b11-402-11M3527 (Mac OS X, 10.7.2)
* - 1.7.0_04-ea-b13 (Mac OS X, 10.7.2)
*
* The bug has been previously reported http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=8315aa2186353a67f7fb0db73f510?bug_id=6715417
*/
public class StaxSourceParsingBug {
/** Succeeds StAXSource processing */
private static final String XML_1 = "<root/>";
/** Succeeds StAXSource processing */
private static final String XML_2 = "<!DOCTYPE root [<!ENTITY et 'Come Home'>]><root et='&et;'/>";
/** Fails StAXSource processing with java.lang.IllegalStateException */
private static final String XML_3 = "<?xml-stylesheet href='show.xsl' type='text/html'?><root/>";
/** Succeeds StAXSource processing */
private static final String XML_4 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><root/>";
/** Fails StAXSource processing with javax.xml.transform.TransformerException */
private static final String XML_5 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><!DOCTYPE root><root/>";
/** Succeeds StAXSource processing */
private static final String XML_6 = "<?xml version='1.0'?><!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>";
/** Fails StAXSource processing with javax.xml.transform.TransformerException */
private static final String XML_7 = "<?xml version='1.0'?><?xml-stylesheet href='show.xsl' type='text/html'?><!DOCTYPE root [<!ELEMENT greeting (#PCDATA)>]><root/>";
TransformerFactory tf = TransformerFactory.newInstance();
@BeforeClass
public static void beforeClass() {
//System.getProperties().list(System.out);
showProperty("java.version");
showProperty("java.runtime.version");
showProperty("os.name");
showProperty("os.version");
}
private static void showProperty(String name) {
System.out.printf("%s = %s%n", name, System.getProperty(name));
}
@Test
public void testParseStreamSource() throws Exception {
parseStreamSource(XML_1);
parseStreamSource(XML_2);
parseStreamSource(XML_3);
parseStreamSource(XML_4);
parseStreamSource(XML_5);
parseStreamSource(XML_6);
parseStreamSource(XML_7);
}
@Test
public void testParseStaxSource1() throws Exception {
parseStaxSource(XML_1);
}
@Test
public void testParseStaxSource2() throws Exception {
parseStaxSource(XML_2);
}
/**
* Fails with:
* java.lang.IllegalStateException: StAXSource(XMLStreamReader) with XMLStreamReader not in
* XMLStreamConstants.START_DOCUMENT or XMLStreamConstants.START_ELEMENT state
*/
@Test
public void testParseStaxSource3() throws Exception {
parseStaxSource(XML_3);
}
@Test
public void testParseStaxSource4() throws Exception {
parseStaxSource(XML_4);
}
/**
* Fails with:
* javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,105]
* Message: found: DTD, expected START_ELEMENT or END_ELEMENT
*/
@Test
public void testParseStaxSource5() throws Exception {
parseStaxSource(XML_5);
}
@Test
public void testParseStaxSource6() throws Exception {
parseStaxSource(XML_6);
}
/**
* Fails with:
* javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,105]
* Message: found: DTD, expected START_ELEMENT or END_ELEMENT
*/
@Test
public void testParseStaxSource7() throws Exception {
parseStaxSource(XML_7);
}
private void parseStreamSource(String xml) throws Exception {
Source source = new StreamSource(new StringReader(xml));
unityTransform(source, xml);
}
private void parseStaxSource(String xml) throws Exception {
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new StringReader(xml));
StAXSource source = new StAXSource(xmlStreamReader);
unityTransform(source, xml);
}
private void unityTransform(Source source, String sourceXml) throws Exception{
StringWriter sw = new StringWriter();
Result result = new StreamResult(sw);
tf.newTransformer().transform(source, result);
System.out.printf("%n%s:%nSource: %s%nResult: %s%n", source.getClass().getSimpleName(), sourceXml, sw);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Replacing the StAXSource with another Source implementation, such as StreamSource, SAXSource, DOMSource fixes the problem.
This, however is NOT possible when using frameworks (CXF) that expose a Source of type StAXSource
- duplicates
-
JDK-6715417 The implicit parse in the transform() gives parse error for good xml
-
- Closed
-
- relates to
-
JDK-6715417 The implicit parse in the transform() gives parse error for good xml
-
- Closed
-