|
|
|
@ -371,7 +371,7 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol |
|
|
|
for (URL url : ((URLClassLoader) classLoader).getURLs()) { |
|
|
|
for (URL url : ((URLClassLoader) classLoader).getURLs()) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
UrlResource jarResource = new UrlResource( |
|
|
|
UrlResource jarResource = new UrlResource( |
|
|
|
ResourceUtils.JAR_URL_PREFIX + url.toString() + ResourceUtils.JAR_URL_SEPARATOR); |
|
|
|
ResourceUtils.JAR_URL_PREFIX + url + ResourceUtils.JAR_URL_SEPARATOR); |
|
|
|
if (jarResource.exists()) { |
|
|
|
if (jarResource.exists()) { |
|
|
|
result.add(jarResource); |
|
|
|
result.add(jarResource); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -423,11 +423,11 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol |
|
|
|
for (String path : StringUtils.delimitedListToStringArray( |
|
|
|
for (String path : StringUtils.delimitedListToStringArray( |
|
|
|
javaClassPathProperty, System.getProperty("path.separator"))) { |
|
|
|
javaClassPathProperty, System.getProperty("path.separator"))) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
File file = new File(path); |
|
|
|
String filePath = new File(path).getAbsolutePath(); |
|
|
|
UrlResource jarResource = new UrlResource(ResourceUtils.JAR_URL_PREFIX + |
|
|
|
UrlResource jarResource = new UrlResource(ResourceUtils.JAR_URL_PREFIX + |
|
|
|
ResourceUtils.FILE_URL_PREFIX + file.getAbsolutePath() + |
|
|
|
ResourceUtils.FILE_URL_PREFIX + filePath + ResourceUtils.JAR_URL_SEPARATOR); |
|
|
|
ResourceUtils.JAR_URL_SEPARATOR); |
|
|
|
// Potentially overlapping with URLClassLoader.getURLs() result above!
|
|
|
|
if (jarResource.exists()) { |
|
|
|
if (!result.contains(jarResource) && !hasDuplicate(filePath, result) && jarResource.exists()) { |
|
|
|
result.add(jarResource); |
|
|
|
result.add(jarResource); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -446,6 +446,29 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Check whether the given file path has a duplicate but differently structured entry |
|
|
|
|
|
|
|
* in the existing result, i.e. with or without a leading slash. |
|
|
|
|
|
|
|
* @param filePath the file path (with or without a leading slash) |
|
|
|
|
|
|
|
* @param result the current result |
|
|
|
|
|
|
|
* @return {@code true} if there is a duplicate (i.e. to ignore the given file path), |
|
|
|
|
|
|
|
* {@code false} to proceed with adding a corresponding resource to the current result |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private boolean hasDuplicate(String filePath, Set<Resource> result) { |
|
|
|
|
|
|
|
if (result.isEmpty()) { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
String duplicatePath = (filePath.startsWith("/") ? filePath.substring(1) : "/" + filePath); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
return result.contains(new UrlResource(ResourceUtils.JAR_URL_PREFIX + ResourceUtils.FILE_URL_PREFIX + |
|
|
|
|
|
|
|
duplicatePath + ResourceUtils.JAR_URL_SEPARATOR)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (MalformedURLException ex) { |
|
|
|
|
|
|
|
// Ignore: just for testing against duplicate.
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Find all resources that match the given location pattern via the |
|
|
|
* Find all resources that match the given location pattern via the |
|
|
|
* Ant-style PathMatcher. Supports resources in jar files and zip files |
|
|
|
* Ant-style PathMatcher. Supports resources in jar files and zip files |
|
|
|
|