org.springframework.core.io.support
Class PathMatchingResourcePatternResolver

public class PathMatchingResourcePatternResolver
implements ResourcePatternResolver
ResourcePatternResolver implementation that applies Ant-style path matching, using Spring's PathMatcher utility.

Locations can either be suitable for ResourceLoader.getResource (URLs like "file:C:/context.xml", pseudo-URLs like "classpath:/context.xml", relative file paths like "/WEB-INF/context.xml"), or Ant-style patterns like "/WEB-INF/*-context.xml".

In the pattern case, the location has to be resolvable to java.io.File or to a "jar:" URL (leading to a java.net.JarURLConnection) to allow for searching though the specified directory tree. In particular, this is not guaranteed to work with a WAR file that is not expanded.

There is special support for retrieving multiple class path resources with the same name, via the "classpath*" prefix. For example, "classpath*:META-INF/beans.xml" will find all "beans.xml" files in the class path, be it in "classes" directories or in JAR files. This is particularly useful for autodetecting config files of the same name at the same location within each jar file.

The "classpath*:" prefix can also be combined with a PathMatcher pattern, for example "classpath*:META-INF/*-beans.xml". In this case, all matching resources in the class path will be found, even if multiple resources of the same name exist in different jar files.

WARNING: Note that "classpath*:" will only work reliably with at least one root directory before the pattern starts, unless the actual target files reside in the file system. This means that a pattern like "classpath*:*.xml" will not retrieve files from the root of jar files but rather only from the root of expanded directories. This originates from a limitation in the JDK's ClassLoader.getResources method which only returns file system locations for a passed-in empty String (indicating potential roots to search).

Warning: Ant-style patterns with "classpath:" resources are not guaranteed to find matching resources if the root package to search is available in multiple class path locations. Preferably, use "classpath*:" with the same Ant-style pattern in such a case, which will search all class path locations that contain the root package.

If neither given a PathMatcher pattern nor a "classpath*:" location, this resolver will return a single resource via the underlying ResourceLoader.

Since1.0.2
VersionNot specified.
AuthorJuergen Hoeller
Wiki javadoc Use textile entry format.
Add your comments here.
Field Summary
protected Log logger
No description provided.
Constructor Summary
PathMatchingResourcePatternResolver()
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader.
PathMatchingResourcePatternResolver( ClassLoader classLoader )
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader.
PathMatchingResourcePatternResolver( ResourceLoader resourceLoader )
Create a new PathMatchingResourcePatternResolver.
PathMatchingResourcePatternResolver( ResourceLoader resourceLoader, ClassLoader classLoader )
Create a new PathMatchingResourcePatternResolver.
Method Summary
protected String determineRootDir( String location )
Determine the root directory for the given location.
protected Set doFindPathMatchingFileResources( Resource rootDirResource, String subPattern )
Find all resources in the file system that match the given location pattern via the Ant-style PathMatcher.
protected Set doFindPathMatchingJarResources( Resource rootDirResource, String subPattern )
Find all resources in jar files that match the given location pattern via the Ant-style PathMatcher.
protected void doRetrieveMatchingFiles( String fullPattern, File dir, Set result )
Recursively retrieve files that match the given pattern, adding them to the given result list.
protected Resource[] findAllClassPathResources( String location )
Find all class location resources with the given location via the ClassLoader.
protected Resource[] findPathMatchingResources( String locationPattern )
Find all resources that match the given location pattern via the Ant-style PathMatcher.
ClassLoader getClassLoader()
Return the ClassLoader that this pattern resolver works with (never null).
PathMatcher getPathMatcher()
Return the PathMatcher that this resource pattern resolver uses.
Resource getResource( String location )
No description provided.
ResourceLoader getResourceLoader()
Return the ResourceLoader that this pattern resolver works with.
Resource[] getResources( String locationPattern )
No description provided.
protected boolean isJarResource( Resource resource )
Return whether the given resource handle indicates a jar resource that the doFindPathMatchingJarResources method can handle.
protected Set retrieveMatchingFiles( File rootDir, String pattern )
Retrieve files that match the given path pattern, checking the given directory and its subdirectories.
void setPathMatcher( PathMatcher pathMatcher )
Set the PathMatcher implementation to use for this resource pattern resolver.
logger
protected Log logger
No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
PathMatchingResourcePatternResolver
public PathMatchingResourcePatternResolver ( )
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader.

ClassLoader access will happen via the thread context class loader.

Wiki javadoc Use textile entry format.
Add your comments here.
PathMatchingResourcePatternResolver
public PathMatchingResourcePatternResolver ( ClassLoader classLoader )
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader.
Parameters
TypeNameDescription
ClassLoader classLoader the ClassLoader to load classpath resources with, or null for using the thread context class loader
Wiki javadoc Use textile entry format.
Add your comments here.
PathMatchingResourcePatternResolver
public PathMatchingResourcePatternResolver ( ResourceLoader resourceLoader )
Create a new PathMatchingResourcePatternResolver.

ClassLoader access will happen via the thread context class loader.

Parameters
TypeNameDescription
ResourceLoader resourceLoader the ResourceLoader to load root directories and actual resources with
Wiki javadoc Use textile entry format.
Add your comments here.
PathMatchingResourcePatternResolver
public PathMatchingResourcePatternResolver ( ResourceLoader resourceLoader, ClassLoader classLoader )
Create a new PathMatchingResourcePatternResolver.
Parameters
TypeNameDescription
ResourceLoader resourceLoader the ResourceLoader to load root directories and actual resources with
ClassLoader classLoader the ClassLoader to load classpath resources with, or null for using the thread context class loader
Wiki javadoc Use textile entry format.
Add your comments here.
determineRootDir
protected String determineRootDir ( String location )
Determine the root directory for the given location.

Used for determining the starting point for file matching, resolving the root directory location to a java.io.File and passing it into retrieveMatchingFiles, with the remainder of the location as pattern.

Will return "/WEB-INF" for the pattern "/WEB-INF/*.xml", for example.

Parameters
TypeNameDescription
String location the location to checkn
Wiki javadoc Use textile entry format.
Add your comments here.
doFindPathMatchingFileResources
protected Set doFindPathMatchingFileResources ( Resource rootDirResource, String subPattern )
throws
Find all resources in the file system that match the given location pattern via the Ant-style PathMatcher.
Parameters
TypeNameDescription
Resource rootDirResource the root directory as Resource
String subPattern the sub pattern to match (below the root directory)
Exceptions
IOException in case of I/O errors
Wiki javadoc Use textile entry format.
Add your comments here.
doFindPathMatchingJarResources
protected Set doFindPathMatchingJarResources ( Resource rootDirResource, String subPattern )
throws
Find all resources in jar files that match the given location pattern via the Ant-style PathMatcher.
Parameters
TypeNameDescription
Resource rootDirResource the root directory as Resource
String subPattern the sub pattern to match (below the root directory)
Exceptions
IOException in case of I/O errors
Wiki javadoc Use textile entry format.
Add your comments here.
doRetrieveMatchingFiles
protected void doRetrieveMatchingFiles ( String fullPattern, File dir, Set result )
throws
Recursively retrieve files that match the given pattern, adding them to the given result list.
Parameters
TypeNameDescription
String fullPattern the pattern to match against, with preprended root directory path
File dir the current directory
Set result the Set of matching File instances to add to
Returns void No description provided.
Exceptions
IOException if directory contents could not be retrieved
Wiki javadoc Use textile entry format.
Add your comments here.
findAllClassPathResources
protected Resource[] findAllClassPathResources ( String location )
throws
Find all class location resources with the given location via the ClassLoader.
Parameters
TypeNameDescription
String location the absolute path within the classpath
Exceptions
IOException in case of I/O errors
Wiki javadoc Use textile entry format.
Add your comments here.
findPathMatchingResources
protected Resource[] findPathMatchingResources ( String locationPattern )
throws
Find all resources that match the given location pattern via the Ant-style PathMatcher. Supports resources in jar files and zip files and in the file system.
Parameters
TypeNameDescription
String locationPattern the location pattern to match
Exceptions
IOException in case of I/O errors
Wiki javadoc Use textile entry format.
Add your comments here.
getClassLoader
public ClassLoader getClassLoader ( )
Return the ClassLoader that this pattern resolver works with (never null).
Wiki javadoc Use textile entry format.
Add your comments here.
getPathMatcher
public PathMatcher getPathMatcher ( )
Return the PathMatcher that this resource pattern resolver uses.
Wiki javadoc Use textile entry format.
Add your comments here.
getResource
public Resource getResource ( String location )
No description provided.
Implements method in ResourceLoader
Parameters
TypeNameDescription
String location No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
getResourceLoader
public ResourceLoader getResourceLoader ( )
Return the ResourceLoader that this pattern resolver works with.
Wiki javadoc Use textile entry format.
Add your comments here.
getResources
public Resource[] getResources ( String locationPattern )
throws
No description provided.
Implements method in ResourcePatternResolver
Parameters
TypeNameDescription
String locationPattern No description provided.
Exceptions
IOException No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
isJarResource
protected boolean isJarResource ( Resource resource )
throws
Return whether the given resource handle indicates a jar resource that the doFindPathMatchingJarResources method can handle.

The default implementation checks against the URL protocols "jar", "zip" and "wsjar" (the latter are used by BEA WebLogic Server and IBM WebSphere, respectively, but can be treated like jar files).

Parameters
TypeNameDescription
Resource resource the resource handle to check (usually the root directory to start path matching from)
Exceptions
IOException No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
retrieveMatchingFiles
protected Set retrieveMatchingFiles ( File rootDir, String pattern )
throws
Retrieve files that match the given path pattern, checking the given directory and its subdirectories.
Parameters
TypeNameDescription
File rootDir the directory to start from
String pattern the pattern to match against, relative to the root directory
Exceptions
IOException if directory contents could not be retrieved
Wiki javadoc Use textile entry format.
Add your comments here.
setPathMatcher
public void setPathMatcher ( PathMatcher pathMatcher )
Set the PathMatcher implementation to use for this resource pattern resolver. Default is AntPathMatcher.
Parameters
TypeNameDescription
PathMatcher pathMatcher No description provided.
Returns void No description provided.
See also
Wiki javadoc Use textile entry format.
Add your comments here.