-
Bug
-
Resolution: Done
-
Major
-
None
-
1.2.6
-
None
The method org.jboss.shrinkwrap.impl.base.URLPackageScanner.handleArchiveByFile(File) creates a ZipFile but never closes it:
private void handleArchiveByFile(File file) throws IOException, ClassNotFoundException { try { log.fine("archive: " + file); ZipFile zip = new ZipFile(file); Enumeration<? extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); String name = entry.getName(); if (name.startsWith(prefix + packageNamePath) && name.endsWith(SUFFIX_CLASS) && (addRecursively || !name.substring((prefix + packageNamePath).length() + 1).contains("/"))) { String className = name.replace("/", ".").substring(prefix.length(), name.length() - SUFFIX_CLASS.length()); foundClass(className, name ); } } } catch (ZipException e) { throw new RuntimeException("Error handling file " + file, e); } }
Solution: Close zip in finally.
I found this problem with the help of Eclipse (which showed warning "Resource leak: 'zip' is never closed") while analyzing why three tests are unable to delete the test archive.
Besides the fix in URLPackageScanner we need one more change to enable the deletion of the test archive in those tests: All three tests create a cusom URLClassLoader but they never close it.
Unfortunately, java.net.URLClassLoader.close() is a JDK7+ feature but the tests are executed with JDK5.