# XML Transform Bug Workaround



## wersi77 (8. Mai 2021)

Hallo zusammen,

leider existiert der folgende XML transform Bug in den Versionen JDK 9 und höher.




__





						[JDK-8262285] XML Transform using indent creates empty (whitespaces) lines - Java Bug System
					






					bugs.openjdk.java.net
				




Zum Nachstellen des Problems ein beispielhafter Code:

```
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class JI9060450 {
    public static void main(String[] args) throws Exception {
        String data = "data";

        StreamSource source = new StreamSource(new StringReader("<foo><bar><![CDATA[" + data + "]]></bar></foo>"));
        StreamResult result = new StreamResult(new StringWriter());

        Transformer tform = TransformerFactory.newInstance().newTransformer();
        tform.setOutputProperty(OutputKeys.INDENT, "yes");
        tform.transform(source, result);

        String xml = result.getWriter().toString(); // This String contains the extra whitespace

        Document document = DocumentBuilderFactory.newInstance()
            .newDocumentBuilder()
            .parse(new InputSource(new StringReader(xml)));

        String resultData = document.getElementsByTagName("bar")
            .item(0)
            .getTextContent();

        assert(data.equals(resultData));
        
        System.out.println(xml);
        
        System.out.println(resultData);
    }
}
```

Mein Problem ist, dass eine Anwendung mir XML Dateien liefert und ich diese (insbesondere den CDATA) verarbeiten muss. Die plötzlich hinzugefügten Blanks führen dann zum falschen Ergebnis.
Kennt jemand einen funktionierenden Workaround, dass z.B. die XML Dateien entsprechend dem Format aus JDK 8 transformiert bzw. angepasst werden?
Vielen Dank für Eure Hilfe


----------



## Oneixee5 (9. Mai 2021)

Ich bin der Meinung, dein Beispiel provoziert den Bug gar nicht. Es müsste so aussehen:

```
final StreamSource source = new StreamSource(new StringReader("<foo>\n\t<bar>\n\t\t<![CDATA[" + data + "]]>\n\t</bar>\n</foo>"));
```
Das Problem lässt sich leicht umgehen:


```
final String resultData = document.getElementsByTagName("bar")
                .item(0)
                .getTextContent()
                .trim();
```
Getestet unter:


```
$java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment GraalVM CE 21.0.0 (build 11.0.10+8-jvmci-21.0-b06)
OpenJDK 64-Bit Server VM GraalVM CE 21.0.0 (build 11.0.10+8-jvmci-21.0-b06, mixed mode, sharing)

$uname -srio
Linux 5.8.0-50-generic x86_64 GNU/Linux
```


----------

