-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Description
Stéphane Nicoll opened SPR-14934 and commented
This is a regression introduced by #18260
PathMatchingResourcePatternResolver#doFindAllClassPathResources first gets the path returned by the LaunchedUrlClassLoader which will add the URLs of all nested jar + the URL of BOOT-INF-classes, something like URL [jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/]
Because we need to get all XML files from the root (path is the empty string) we also invoke addAllClassLoaderJarRoots which works recursively as follow:
- does not add anything with
LaunchedUrlClassLoader - with
classLoader.getSystemClassLoader()addsURL [jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/] - with its parent (
AppClassLoader) addsURL [jar:file:SPR-13685-0.0.1-SNAPSHOT.jar!/]viaaddClassPathManifestEntries. It also adds a bunch of entries from JDK jars - does not add anything with
ExtClassLoader
So we have the following entries for the candidate location:
jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/
jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/
jar:file:SPR-13685-0.0.1-SNAPSHOT.jar!/
So, for the same a.xml at the root of the classpath in src/main/resources we end up with the following candidates:
jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/a.xml
jar:file:/Users/snicoll/workspace/pivotal/spring-framework-issues/SPR-13685/target/SPR-13685-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes/a.xml
jar:file:SPR-13685-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes/a.xml
At this point I can only guess that each entry match each candidate in the list above (in that order). it isn't obvious how the second one lead to a lookup in BOOT-INF/classes though but given that a ! is missing in the second case, it's an indication it may come from that faulty URL.
Affects: 4.3 GA
Issue Links:
- PathMatchingResourcePatternResolver does not consider manifest based classpaths [SPR-13685] #18260 PathMatchingResourcePatternResolver does not consider manifest based classpaths
- PathMatchingResourcePatternResolver finds duplicate resources for executable jars but not for executable wars [SPR-14936] #19503 PathMatchingResourcePatternResolver finds duplicate resources for executable jars but not for executable wars