You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by an...@apache.org on 2006/09/21 06:04:33 UTC

svn commit: r448452 - in /ant/core/trunk: CONTRIBUTORS WHATSNEW contributors.xml src/etc/testcases/types/resources/build.xml src/main/org/apache/tools/ant/types/resources/URLResource.java

Author: antoine
Date: Wed Sep 20 21:04:32 2006
New Revision: 448452

URL: http://svn.apache.org/viewvc?view=rev&rev=448452
Log:
patch submitted by Xavier Hanin, mainly closing HttpURLConnection

Modified:
    ant/core/trunk/CONTRIBUTORS
    ant/core/trunk/WHATSNEW
    ant/core/trunk/contributors.xml
    ant/core/trunk/src/etc/testcases/types/resources/build.xml
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java

Modified: ant/core/trunk/CONTRIBUTORS
URL: http://svn.apache.org/viewvc/ant/core/trunk/CONTRIBUTORS?view=diff&rev=448452&r1=448451&r2=448452
==============================================================================
Binary files - no diff available.

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=448452&r1=448451&r2=448452
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Sep 20 21:04:32 2006
@@ -20,7 +20,7 @@
 * the ant wrapper script should now correctly locate the java
   executable in more recent IBM JDKs for AIX as well.
 
-* URLResource did not close jar files.
+* URLResource did not close jar files, and also did not disconnect HTTPConnection (s).
 
 * <junittask/> created junitvmwatcher*.properties files but did not close and delete them.  
 

Modified: ant/core/trunk/contributors.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/contributors.xml?view=diff&rev=448452&r1=448451&r2=448452
==============================================================================
--- ant/core/trunk/contributors.xml (original)
+++ ant/core/trunk/contributors.xml Wed Sep 20 21:04:32 2006
@@ -1016,6 +1016,10 @@
   </name>
   <name>
     <first>Xavier</first>
+    <last>Hanin</last>
+  </name>
+  <name>
+    <first>Xavier</first>
     <last>Witdouck</last>
   </name>
   <name>

Modified: ant/core/trunk/src/etc/testcases/types/resources/build.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/types/resources/build.xml?view=diff&rev=448452&r1=448451&r2=448452
==============================================================================
--- ant/core/trunk/src/etc/testcases/types/resources/build.xml (original)
+++ ant/core/trunk/src/etc/testcases/types/resources/build.xml Wed Sep 20 21:04:32 2006
@@ -320,7 +320,10 @@
     <length property="httpurl.length">
       <url refid="httpurl" />
     </length>
-    <fail>
+    <length property="file.length">
+      <file file="${file}"/>
+    </length>
+    <fail message="length of url ${httpurl.length} length of file ${file.length} file should be twice as big">
       <condition>
         <not>
           <length file="${file}" when="greater" length="${httpurl.length}" />

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java?view=diff&rev=448452&r1=448451&r2=448452
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java Wed Sep 20 21:04:32 2006
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.MalformedURLException;
@@ -148,6 +149,28 @@
         if (isReference()) {
             return ((Resource) getCheckedRef()).isExists();
         }
+        return isExists(false);
+    }
+
+    /**
+     * Find out whether the URL exists, and close the connection
+     * opened to the URL if closeConnection is true.
+     *
+     * Note that this method does ensure that if:
+     * - the resource exists (if it returns true)
+     * - and if the current object is not a reference
+     * (isReference() returns false)
+     * - and if it was called with closeConnection to false,
+     *
+     * then the connection to the URL (stored in the conn
+     * private field) will be opened, and require to be closed
+     * by the caller.
+     *
+     * @param closeConnection true if the connection should be closed
+     * after the call, false if it should stay open.
+     * @return true if this resource exists.
+     */
+    private synchronized boolean isExists(boolean closeConnection) {
         if (getURL() == null) {
             return false;
         }
@@ -156,9 +179,14 @@
             return true;
         } catch (IOException e) {
             return false;
+        } finally {
+            if (closeConnection) {
+                close();
+            }
         }
     }
 
+
     /**
      * Tells the modification time in milliseconds since 01.01.1970 .
      *
@@ -169,15 +197,10 @@
         if (isReference()) {
             return ((Resource) getCheckedRef()).getLastModified();
         }
-        if (!isExists()) {
-            return 0L;
-        }
-        try {
-            connect();
-            return conn.getLastModified();
-        } catch (IOException e) {
+        if (!isExists(false)) {
             return 0L;
         }
+        return conn.getLastModified();
     }
 
     /**
@@ -199,7 +222,7 @@
         if (isReference()) {
             return ((Resource) getCheckedRef()).getSize();
         }
-        if (!isExists()) {
+        if (!isExists(false)) {
             return 0L;
         }
         try {
@@ -271,6 +294,7 @@
      *         Resource as a stream.
      * @throws UnsupportedOperationException if OutputStreams are not
      *         supported for this Resource type.
+     * @throws IOException if the URL cannot be opened.
      */
     public synchronized OutputStream getOutputStream() throws IOException {
         if (isReference()) {
@@ -286,6 +310,7 @@
 
     /**
      * Ensure that we have a connection.
+     * @throws IOException if the connection cannot be established.
      */
     protected synchronized void connect() throws IOException {
         URL u = getURL();
@@ -304,7 +329,15 @@
         }
     }
 
-    private void close() {
+    /**
+     * Closes the URL connection if:
+     * - it is opened (i.e. the field conn is not null)
+     * - this type of URLConnection supports some sort of close mechanism
+     *
+     * This method ensures the field conn will be null after the call.
+     *
+     */
+    private synchronized void close() {
         if (conn != null) {
             try {
                 if (conn instanceof JarURLConnection) {
@@ -312,9 +345,11 @@
                     JarFile jf = juc.getJarFile();
                     jf.close();
                     jf = null;
+                } else if (conn instanceof HttpURLConnection) {
+                    ((HttpURLConnection) conn).disconnect();
                 }
             } catch (IOException exc) {
-
+                //ignore
             } finally {
                 conn = null;
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org