Author: fanningpj
Date: Thu Sep 14 11:23:05 2023
New Revision: 1912305

URL: http://svn.apache.org/viewvc?rev=1912305&view=rev
Log:
[bug-67396] StreamHelper does not set standalone=yes when built-in javax 
Transformer is used

Added:
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java
   (with props)
Modified:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/StreamHelper.java

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/StreamHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/StreamHelper.java?rev=1912305&r1=1912304&r2=1912305&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/StreamHelper.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/StreamHelper.java
 Thu Sep 14 11:23:05 2023
@@ -24,16 +24,17 @@ import java.io.OutputStream;
 
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Result;
-import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.Internal;
 import org.apache.poi.util.XMLHelper;
 import org.w3c.dom.Document;
 
+@Internal
 public final class StreamHelper {
 
     private StreamHelper() {
@@ -53,8 +54,10 @@ public final class StreamHelper {
     public static boolean saveXmlInStream(Document xmlContent,
                                           OutputStream outStream) {
         try {
+            // https://bz.apache.org/bugzilla/show_bug.cgi?id=67396
+            xmlContent.setXmlStandalone(true);
             Transformer trans = XMLHelper.newTransformer();
-            Source xmlSource = new DOMSource(xmlContent);
+            DOMSource xmlSource = new DOMSource(xmlContent);
             // prevent close of stream by transformer:
             Result outputTarget = new StreamResult(new FilterOutputStream(
                     outStream) {
@@ -69,7 +72,6 @@ public final class StreamHelper {
                     out.flush(); // only flush, don't close!
                 }
             });
-            // xmlContent.setXmlStandalone(true);
             trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
             // don't indent xml documents, the indent will cause errors in 
calculating the xml signature
             // because of different handling of linebreaks in Windows/Unix

Added: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java?rev=1912305&view=auto
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java
 (added)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java
 Thu Sep 14 11:23:05 2023
@@ -0,0 +1,38 @@
+package org.apache.poi.openxml4j.opc;
+
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
+import org.apache.poi.ooxml.util.DocumentHelper;
+import org.junit.jupiter.api.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import static org.apache.poi.xssf.usermodel.XSSFRelation.NS_WORDPROCESSINGML;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class TestStreamHelper {
+    @Test
+    void testStandaloneFlag() throws IOException {
+        Document doc = DocumentHelper.createDocument();
+        Element elDocument = doc.createElementNS(NS_WORDPROCESSINGML, 
"w:document");
+        doc.appendChild(elDocument);
+        Element elBody = doc.createElementNS(NS_WORDPROCESSINGML, "w:body");
+        elDocument.appendChild(elBody);
+        Element elParagraph = doc.createElementNS(NS_WORDPROCESSINGML, "w:p");
+        elBody.appendChild(elParagraph);
+        Element elRun = doc.createElementNS(NS_WORDPROCESSINGML, "w:r");
+        elParagraph.appendChild(elRun);
+        Element elText = doc.createElementNS(NS_WORDPROCESSINGML, "w:t");
+        elRun.appendChild(elText);
+        elText.setTextContent("Hello Open XML !");
+
+        try (UnsynchronizedByteArrayOutputStream bos = new 
UnsynchronizedByteArrayOutputStream()) {
+            StreamHelper.saveXmlInStream(doc, bos);
+            String xml = bos.toString(StandardCharsets.UTF_8);
+            assertTrue(xml.contains("standalone=\"yes\""), "xml contains 
standalone=yes?");
+            assertTrue(xml.contains("encoding=\"UTF-8\""), "xml contains 
encoding=UTF-8?");
+        }
+    }
+}

Propchange: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to