SQE xml test for LSSerializer failed since build b25_2014-07-30-1719_1029. Seems there is some defect after recent xml parser updated, that causes LSSerializer remove "return carrige" character from the following xml:
<?xml version="1.0" encoding="UTF-16"?>
<test>tt</test>
The xml will be converted to <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
Run the following java program:
import java.io.*;
import javax.xml.parsers.*;
import com.sun.org.apache.xerces.internal.impl.Constants;
import org.xml.sax.*;
import org.w3c.dom.*;
import org.w3c.dom.ls.*;
public class Test
{
public static void main(String[] args) throws Exception
{
test("1.0");
test("1.1");
}
private static void test(String version) throws Exception
{
final String XML_DOCUMENT =
"<?xml version=\"" + version + "\" encoding=\"UTF-16\"?>\n"
+ "<test>tt</test>";
final String XML_DOCUMENT_PRETTY_PRINT =
"<?xml version=\"" + version + "\" encoding=\"UTF-16\"?>\n"
+ "<test>tt</test>\n";
// it all begins with a Document
DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
StringReader stringReader = new StringReader(XML_DOCUMENT);
InputSource inputSource = new InputSource(stringReader);
Document document = documentBuilder.parse(inputSource);
// query DOM Interfaces to get to a LSSerializer
DOMImplementation domImplementation =
documentBuilder.getDOMImplementation();
DOMImplementationLS domImplementationLS =
(DOMImplementationLS) domImplementation;
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
// get configuration
DOMConfiguration domConfiguration = lsSerializer.getDomConfig();
// get default serialization
System.out.println("default " + Constants.DOM_FORMAT_PRETTY_PRINT
+ " should be false. Actual value is " + domConfiguration.getParameter(Constants.DOM_FORMAT_PRETTY_PRINT));
String result = lsSerializer.writeToString(document);
System.out.println(
"serialization result is: " + result
+ "\n it equals the original xml: " + XML_DOCUMENT.equals(result));
// configure LSSerializer to format-pretty-print
domConfiguration.setParameter(
Constants.DOM_FORMAT_PRETTY_PRINT,
Boolean.TRUE);
System.out.println("try to set " + Constants.DOM_FORMAT_PRETTY_PRINT
+ " to true. Actual result is " + domConfiguration.getParameter(Constants.DOM_FORMAT_PRETTY_PRINT));
result = lsSerializer.writeToString(document);
System.out.println(
"serialization result is: " + result
+ "\n it equals the pretty format xml: " + XML_DOCUMENT_PRETTY_PRINT.equals(result));
}
}
output:
default format-pretty-print should be false. Actual value is false
serialization result is: <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
it equals the original xml: false
try to set format-pretty-print to true. Actual result is true
serialization result is: <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
it equals the pretty format xml: false
default format-pretty-print should be false. Actual value is false
serialization result is: <?xml version="1.1" encoding="UTF-16"?><test>tt</test>
it equals the original xml: false
try to set format-pretty-print to true. Actual result is true
serialization result is: <?xml version="1.1" encoding="UTF-16"?><test>tt</test>
it equals the pretty format xml: false
It's not expected.
<?xml version="1.0" encoding="UTF-16"?>
<test>tt</test>
The xml will be converted to <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
Run the following java program:
import java.io.*;
import javax.xml.parsers.*;
import com.sun.org.apache.xerces.internal.impl.Constants;
import org.xml.sax.*;
import org.w3c.dom.*;
import org.w3c.dom.ls.*;
public class Test
{
public static void main(String[] args) throws Exception
{
test("1.0");
test("1.1");
}
private static void test(String version) throws Exception
{
final String XML_DOCUMENT =
"<?xml version=\"" + version + "\" encoding=\"UTF-16\"?>\n"
+ "<test>tt</test>";
final String XML_DOCUMENT_PRETTY_PRINT =
"<?xml version=\"" + version + "\" encoding=\"UTF-16\"?>\n"
+ "<test>tt</test>\n";
// it all begins with a Document
DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
StringReader stringReader = new StringReader(XML_DOCUMENT);
InputSource inputSource = new InputSource(stringReader);
Document document = documentBuilder.parse(inputSource);
// query DOM Interfaces to get to a LSSerializer
DOMImplementation domImplementation =
documentBuilder.getDOMImplementation();
DOMImplementationLS domImplementationLS =
(DOMImplementationLS) domImplementation;
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
// get configuration
DOMConfiguration domConfiguration = lsSerializer.getDomConfig();
// get default serialization
System.out.println("default " + Constants.DOM_FORMAT_PRETTY_PRINT
+ " should be false. Actual value is " + domConfiguration.getParameter(Constants.DOM_FORMAT_PRETTY_PRINT));
String result = lsSerializer.writeToString(document);
System.out.println(
"serialization result is: " + result
+ "\n it equals the original xml: " + XML_DOCUMENT.equals(result));
// configure LSSerializer to format-pretty-print
domConfiguration.setParameter(
Constants.DOM_FORMAT_PRETTY_PRINT,
Boolean.TRUE);
System.out.println("try to set " + Constants.DOM_FORMAT_PRETTY_PRINT
+ " to true. Actual result is " + domConfiguration.getParameter(Constants.DOM_FORMAT_PRETTY_PRINT));
result = lsSerializer.writeToString(document);
System.out.println(
"serialization result is: " + result
+ "\n it equals the pretty format xml: " + XML_DOCUMENT_PRETTY_PRINT.equals(result));
}
}
output:
default format-pretty-print should be false. Actual value is false
serialization result is: <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
it equals the original xml: false
try to set format-pretty-print to true. Actual result is true
serialization result is: <?xml version="1.0" encoding="UTF-16"?><test>tt</test>
it equals the pretty format xml: false
default format-pretty-print should be false. Actual value is false
serialization result is: <?xml version="1.1" encoding="UTF-16"?><test>tt</test>
it equals the original xml: false
try to set format-pretty-print to true. Actual result is true
serialization result is: <?xml version="1.1" encoding="UTF-16"?><test>tt</test>
it equals the pretty format xml: false
It's not expected.
- relates to
-
JDK-8249867 XML declaration is not followed by a newline
- Closed