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