Class PackageNamesScanner

java.lang.Object
org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter
org.glassfish.jersey.server.internal.scanning.PackageNamesScanner
All Implemented Interfaces:
AutoCloseable, Iterator<String>, ResourceFinder

public final class PackageNamesScanner extends AbstractResourceFinderAdapter
A scanner that recursively scans URI-based resources present in a set of package names, and nested package names of that set. (Recursive scanning of nested packages can be disabled using a proper constructor.)

The URIs for a package name are obtained, by default, by invoking ClassLoader.getResources(java.lang.String) with the parameter that is the package name with "." replaced by "/".

Each URI is then scanned using a registered UriSchemeResourceFinderFactory that supports the URI scheme.

The following are registered by default. The FileSchemeResourceFinderFactory for "file" URI schemes. The JarZipSchemeResourceFinderFactory for "jar" or "zip" URI schemes to jar resources. The VfsSchemeResourceFinderFactory for the JBoss-based "vfsfile" and "vfszip" URI schemes.

Further schemes may be registered by registering an implementation of UriSchemeResourceFinderFactory in the META-INF/services file whose name is the fully qualified class name of UriSchemeResourceFinderFactory.

If a URI scheme is not supported a ResourceFinderException will be thrown and package scanning deployment will fail.

Author:
Paul Sandoz, Jakub Podlesak
  • Constructor Details

    • PackageNamesScanner

      public PackageNamesScanner(String[] packages, boolean recursive)
      Scan a set of packages using a context ClassLoader. The recursive flag determines whether the packages will be scanned recursively together with their nested packages (true) or if only the specified packages shall be scanned (false).
      Parameters:
      packages - an array of package names.
      recursive - if (true the packages will be scanned recursively together with any nested packages, if false only the explicitly listed packages will be scanned.
    • PackageNamesScanner

      public PackageNamesScanner(ClassLoader classLoader, String[] packages, boolean recursive)
      Scan a set of packages using the provided ClassLoader. The recursive flag determines whether the packages will be scanned recursively together with their nested packages (true) or if only the specified packages shall be scanned (false).
      Parameters:
      classLoader - the ClassLoader to load classes from.
      packages - an array of package names.
      recursive - if (true the packages will be scanned recursively together with any nested packages, if false only the explicitly listed packages will be scanned.
  • Method Details