diff --git a/core/src/main/java/com/needhamsoftware/unojar/JarClassLoader.java b/core/src/main/java/com/needhamsoftware/unojar/JarClassLoader.java index 9b0a053..80b3455 100644 --- a/core/src/main/java/com/needhamsoftware/unojar/JarClassLoader.java +++ b/core/src/main/java/com/needhamsoftware/unojar/JarClassLoader.java @@ -1012,6 +1012,9 @@ protected URL findResource(String unresolvedResource) { } protected Enumeration findResources(String name) throws IOException { + if (name.length()>1 && name.endsWith("/")) { + return findResources(name.substring(0, name.length() - 1)); + } LOGGER.info("findResources(%s)", name); LOGGER.info("findResources: looking in %s", jarNames); Iterator iter = jarNames.iterator(); @@ -1141,4 +1144,4 @@ protected String findTheLibrary(String BINLIB_PREFIX, String name) { return result; } -} +} \ No newline at end of file diff --git a/core/src/test/java/com/needhamsoftware/unojar/JarClassLoaderTest.java b/core/src/test/java/com/needhamsoftware/unojar/JarClassLoaderTest.java index 7459d4b..906126d 100644 --- a/core/src/test/java/com/needhamsoftware/unojar/JarClassLoaderTest.java +++ b/core/src/test/java/com/needhamsoftware/unojar/JarClassLoaderTest.java @@ -6,6 +6,9 @@ import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; @@ -15,13 +18,14 @@ import static com.copyright.easiertest.EasierMocks.verify; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class JarClassLoaderTest { - @ObjectUnderTest - private JarClassLoader object; - @Mock - private JarClassLoader jclMock; + @ObjectUnderTest + private JarClassLoader object; + @Mock + private JarClassLoader jclMock; public JarClassLoaderTest() { prepareMocks(this); @@ -71,4 +75,17 @@ public void testDelegateToExt() { // that too solves the infinite loop. replay(); } + + @Test + public void findResourcesShouldIgnoreTrailingSlash() throws IOException, URISyntaxException { + URI jarFile = this.getClass().getResource("/uno-jar-examples-unojar.jar").toURI(); + JarClassLoader loader = new JarClassLoader(this.getClass().getClassLoader(), jarFile.toURL().toExternalForm()); + // populate caches + assertNotNull(loader.load("META-INF/foo/hello.txt", null)); + replay(); + assertNotNull(loader.findResource("META-INF/foo/")); + assertNotNull(loader.findResource("META-INF/foo")); + assertTrue(loader.findResources("META-INF/foo/").hasMoreElements()); + assertTrue(loader.findResources("META-INF/foo").hasMoreElements()); + } } \ No newline at end of file diff --git a/core/src/test/java/com/needhamsoftware/unojar/LoggerTest.java b/core/src/test/java/com/needhamsoftware/unojar/LoggerTest.java index da4aeb0..482261d 100644 --- a/core/src/test/java/com/needhamsoftware/unojar/LoggerTest.java +++ b/core/src/test/java/com/needhamsoftware/unojar/LoggerTest.java @@ -49,6 +49,6 @@ public void testOutput() throws IOException, InterruptedException { System.out.println("Error:"+error); System.out.println("Exit:"+start.exitValue()); assertEquals(2,bootInfoCount.get()); - assertEquals(88,jclDebugCount.get()); + assertEquals(94,jclDebugCount.get()); } -} +} \ No newline at end of file diff --git a/core/src/test/resources/uno-jar-examples-unojar.jar b/core/src/test/resources/uno-jar-examples-unojar.jar index 1a6be4b..a30a874 100644 Binary files a/core/src/test/resources/uno-jar-examples-unojar.jar and b/core/src/test/resources/uno-jar-examples-unojar.jar differ