< prev index next >
src/java.base/share/classes/jdk/internal/loader/URLClassPath.java
Print this page
@@ -634,24 +634,41 @@
url = new URL(base, ParseUtil.encodePath(name, false));
} catch (MalformedURLException e) {
throw new IllegalArgumentException("name");
}
final URLConnection uc;
+ URLConnection uce = null;
try {
if (check) {
URLClassPath.check(url);
}
uc = url.openConnection();
+ uce = uc;
InputStream in = uc.getInputStream();
if (uc instanceof JarURLConnection) {
/* Need to remember the jar file so it can be closed
* in a hurry.
*/
JarURLConnection juc = (JarURLConnection)uc;
jarfile = JarLoader.checkJar(juc.getJarFile());
}
} catch (Exception e) {
+ if (null != uce && uce instanceof JarURLConnection) {
+ /* Need to create jarfile to be able to close fd;
+ * cannot use getJarFile() on resource URL.
+ */
+ try {
+ String sbase = base.toString();
+ int sep = sbase.indexOf("!/");
+ URL urlf = new URL(sbase.substring(0, sep + 2));
+ URLConnection ucf = urlf.openConnection();
+ JarURLConnection jucf = (JarURLConnection)ucf;
+ jarfile = JarLoader.checkJar(jucf.getJarFile());
+ } catch (Exception e1) {
+ // ignore
+ }
+ }
return null;
}
return new Resource() {
public String getName() { return name; }
public URL getURL() { return url; }
< prev index next >