You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sh...@apache.org on 2012/03/27 06:14:38 UTC

svn commit: r1305728 - in /axis/axis2/java/core/trunk/modules/kernel: src/org/apache/axis2/util/XMLPrettyPrinter.java test/org/apache/axis2/util/XMLPrettyPrinterTest.java

Author: shankar
Date: Tue Mar 27 04:14:37 2012
New Revision: 1305728

URL: http://svn.apache.org/viewvc?rev=1305728&view=rev
Log:
Closing the streams properly. If the streams are not closed properly, after using, file can't be deleted in windows. 

Added:
    axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/XMLPrettyPrinterTest.java
Modified:
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/XMLPrettyPrinter.java

Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/XMLPrettyPrinter.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/XMLPrettyPrinter.java?rev=1305728&r1=1305727&r2=1305728&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/XMLPrettyPrinter.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/XMLPrettyPrinter.java Tue Mar 27 04:14:37 2012
@@ -58,7 +58,9 @@ public class XMLPrettyPrinter {
         FileOutputStream outputStream = null;
         byte[] byteArray = null;
         try {
-            byteArray = IOUtils.getStreamAsByteArray(new FileInputStream(file));
+            FileInputStream fin = new FileInputStream(file);
+            byteArray = IOUtils.getStreamAsByteArray(fin);
+            fin.close();
             inputStream = new ByteArrayInputStream(byteArray);
             outputStream = new FileOutputStream(file);
 
@@ -88,6 +90,18 @@ public class XMLPrettyPrinter {
             log.debug("Pretty printed file : " + file);
         } catch (Throwable t) {
             log.debug("Exception occurred while trying to pretty print file " + file, t);
+            
+            /* if outputStream is already created, close them, because we are going reassign
+             * different value to that. It will leak the file handle (specially in windows, since
+             * deleting is going to be an issue)
+             */
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    log.debug(e.getMessage(), e);
+                }
+            }
             try {
                 if (byteArray != null) {
                     outputStream = new FileOutputStream(file);

Added: axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/XMLPrettyPrinterTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/XMLPrettyPrinterTest.java?rev=1305728&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/XMLPrettyPrinterTest.java (added)
+++ axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/XMLPrettyPrinterTest.java Tue Mar 27 04:14:37 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+public class XMLPrettyPrinterTest extends TestCase {
+    /**
+     * This method checks whether the file can be deleted after using PrettyPrinter. 
+     * It normally works fine in linux, but if the pretty printer doesn't close the streams properly
+     * it will fail in windows. 
+     * @throws IOException
+     */
+    public void testPrettifyStreamClose() throws IOException{
+        String filePath = new File(".").getAbsolutePath() + File.separator + 
+            "target" + File.separator + "test.xml";
+
+        //Create new file
+        File outputFile = new File(filePath);
+        outputFile.createNewFile();
+        OutputStream outStream = new FileOutputStream(outputFile);
+        outStream.write("<a><b>test</b></a>".getBytes());
+        outStream.close();
+        
+        //Prettyfy the output
+        XMLPrettyPrinter.prettify(outputFile);
+        
+        //Delete file
+        assertTrue(outputFile.delete());
+    }
+
+}