Author: skitching Date: Mon Oct 17 02:09:19 2005 New Revision: 325866 URL: http://svn.apache.org/viewcvs?rev=325866&view=rev Log: Update to previous commit. There was another place in Digester class where new InputSource(String) was being called, so the "safe" implementation of that constructor has been factored out into a separate method. See bugzilla #37034.
Modified: jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java Modified: jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java?rev=325866&r1=325865&r2=325866&view=diff ============================================================================== --- jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java (original) +++ jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java Mon Oct 17 02:09:19 2005 @@ -26,6 +26,7 @@ import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.net.URLConnection; +import java.net.MalformedURLException; import java.util.EmptyStackException; import java.util.HashMap; import java.util.Iterator; @@ -1517,21 +1518,7 @@ } try { - // Ideally we would just call - // return (new InputSource(entityURL)); - // Unforunately it appears that when the entityURL - // points to a file within a jar archive a caching mechanism - // inside the InputSource implementation causes a file-handle - // to the jar file to remain open. On Windows systems this then - // causes the jar archive file to be locked on disk ("in use") - // which makes it impossible to delete the jar file - and that - // really stuffs up "undeploy" in webapps in particular. - URLConnection urlConnection = new URL(entityURL).openConnection(); - urlConnection.setUseCaches(false); - InputSource source = new InputSource(urlConnection.getInputStream()); - source.setSystemId(entityURL); - return source; - + return createInputSourceFromURL(entityURL); } catch (Exception e) { throw createSAXException(e); } @@ -1716,7 +1703,7 @@ public Object parse(String uri) throws IOException, SAXException { configure(); - InputSource is = new InputSource(uri); + InputSource is = createInputSourceFromURL(uri); getXMLReader().parse(is); return (root); @@ -1753,6 +1740,27 @@ } + /** + * Given a URL, return an InputSource that reads from that URL. + * <p> + * Ideally this function would not be needed and code could just use + * <code>new InputSource(entityURL)</code>. + * Unforunately it appears that when the entityURL points to a file + * within a jar archive a caching mechanism inside the InputSource + * implementation causes a file-handle to the jar file to remain open. + * On Windows systems this then causes the jar archive file to be + * locked on disk ("in use") which makes it impossible to delete the + * jar file - and that really stuffs up "undeploy" in webapps in + * particular. + */ + private InputSource createInputSourceFromURL(String url) + throws MalformedURLException, IOException { + URLConnection urlConnection = new URL(url).openConnection(); + urlConnection.setUseCaches(false); + InputSource source = new InputSource(urlConnection.getInputStream()); + source.setSystemId(url); + return source; + } // --------------------------------------------------------- Rule Methods --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]