< 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 >