I found this interesting problem last week. Run the program below. It is very simple, first create a dummy xml file and read it with the standard library and write to the file.
Look at the created gtest2.xml file, you will see that it has content that came out of nowhere.
In my case, this is a sample of the wrong partition (the place changes on different machines).
<test>1924</test> <test>1925</test> <test>t>24</test> <test>1927</test> <test>1928</test> <test>1929</test>
This does not happen if I change the xml version to 1.0. So is something wrong with my code or jdk?
Here is the test code:
import java.io.File; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; public class DocumentBuilderCheck { public static void main(String[] args) throws Exception { String filename = "/tmp/gtest.xml"; generateXmlFile(filename, 2500); Document doc = readXmlFile(filename); String filename2 = "/tmp/gtest2.xml"; writeDocument(doc, filename2); } private static void writeDocument(Document document, String filename) throws Exception { StreamResult streamResult = new StreamResult(filename); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.transform(new DOMSource(document), streamResult); } private static Document readXmlFile(String filename) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); return doc; } private static void generateXmlFile(String filename, int total) throws Exception { File f = new File(filename); PrintWriter pw = new PrintWriter(f); pw.write("<?xml version=\"1.1\" encoding=\"UTF-8\"?>"); pw.write("<main_tag>"); for (int i = 0; i < total; i++) { pw.write("<test>" + String.format("%04d", i) + "</test>"); } pw.write("</main_tag>"); pw.close(); } }
source share