JDK-7166588 : JDK7 update 4 changed XML indenting behavior
  • Type: Bug
  • Component: xml
  • Sub-Component: jaxp
  • Affected Version: 7
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux_ubuntu
  • CPU: x86
  • Submitted: 2012-05-04
  • Updated: 2012-06-09
  • Resolved: 2012-05-11
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
$ ~/dev/tools/jdk1.7.0_03/bin/java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

$ ~/dev/tools/jdk1.7.0_04/bin/java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)


ADDITIONAL OS VERSION INFORMATION :
Linux work-laptop 3.0.0-17-generic #30-Ubuntu SMP Thu Mar 8 20:45:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

A DESCRIPTION OF THE PROBLEM :
Between JDK7 update 3 and update 4, the output traditional "pretty printing" of XML has changed. In update 3 and prior (including JDK6 and earlier), there's a line separator after the XML prolog. As of update 4, the XML prolog and starting root element are on the same line.

A full example:

$ cat XmlTest.java
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;

public class XmlTest {
    public static void main(String[] args) throws Exception {
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        StreamResult result = new StreamResult(System.out);
        transformer.transform(new StreamSource(new StringReader("<foo/>")), result);
    }
}

$ javac XmlTest.java

$ ~/dev/tools/jdk1.7.0_03/bin/java XmlTest
<?xml version="1.0" encoding="UTF-8"?>
<foo/>

$ ~/dev/tools/jdk1.7.0_04/bin/java XmlTest
<?xml version="1.0" encoding="UTF-8"?><foo/>

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the provided source code and run it with 7u3 and 7u4.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The same output from both versions.
ACTUAL -
Missing line separator in 7u4 output.

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;

public class XmlTest {
    public static void main(String[] args) throws Exception {
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        StreamResult result = new StreamResult(System.out);
        transformer.transform(new StreamSource(new StringReader("<foo/>")), result);
    }
}

---------- END SOURCE ----------