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()); + } + +}