Class ClassFinder

java.lang.Object
org.apache.jorphan.reflect.ClassFinder

public final class ClassFinder extends Object
This class finds classes that extend one of a set of parent classes.
  • Field Details

    • JMETER_SKIP_CLASS_SCANNING_ATTRIBUTE

      public static final String JMETER_SKIP_CLASS_SCANNING_ATTRIBUTE
      See Also:
  • Method Details

    • getSkipJarsWithJmeterSkipClassScanningAttribute

      @API(status=EXPERIMENTAL, since="5.6") public static boolean getSkipJarsWithJmeterSkipClassScanningAttribute()
    • skipJarsWithJmeterSkipClassScanningAttribute

      @API(status=INTERNAL, since="5.6") public static ClassFinder.Closeable skipJarsWithJmeterSkipClassScanningAttribute()
      Configures if ClassFinder should skip jar files that have JMeter-Skip-Class-Scanning: true manifest attribute. JMeter will skip such jars when it uses both ServiceLoader and ClassFinder. However, ClassFinder was public, so it was possible that custom plugins could use it, and they should be able to find the implementations even if they are in jars with JMeter-Skip-Class-Scanning: true.

      Sample usage:

       List<String> classNames;
       try (ClassFinder.Closeable ignored = ClassFinder.skipJarsWithJmeterSkipClassScanningAttribute()) {
         // findClassesThatExtend will not skip jars with JMeter-Skip-Class-Scanning: true manifest attribute
         classNames = ClassFinder.findClassesThatExtend(...);
       
      Returns:
      closeable that will reset "skip jar files with manifest entry" flag when closed. Use it in try-with-resources
    • loadServices

      public static <S> Collection<S> loadServices(Class<S> service, ServiceLoader<S> serviceLoader, ServiceLoadExceptionHandler<? super S> exceptionHandler)
      Loads services implementing a given interface. This is an intended replacement for findClassesThatExtend.
      Type Parameters:
      S - type of service (class or interface)
      Parameters:
      service - interface that services should extend.
      serviceLoader - ServiceLoader to fetch services.
      exceptionHandler - exception handler to use for services that fail to load.
      Returns:
      collection of services that load successfully
    • findClassesThatExtend

      @Deprecated public static List<String> findClassesThatExtend(String[] paths, Class<?>[] superClasses) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Convenience method for findClassesThatExtend(String[], Class[], boolean) with the option to include inner classes in the search set to false.
      Parameters:
      paths - pathnames or jarfiles to search for classes
      superClasses - required parent class(es)
      Returns:
      List of Strings containing discovered class names.
      Throws:
      IOException - when scanning the classes fails
    • findClassesThatExtend

      @Deprecated public static List<String> findClassesThatExtend(String[] strPathsOrJars, Class<?>[] superClasses, boolean innerClasses) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find classes in the provided path(s)/jar(s) that extend the class(es).
      Parameters:
      strPathsOrJars - pathnames or jarfiles to search for classes
      superClasses - required parent class(es)
      innerClasses - should we include inner classes?
      Returns:
      List containing discovered classes
      Throws:
      IOException - when scanning for classes fails
    • findClassesThatExtend

      @API(status=DEPRECATED, since="5.6") @Deprecated public static List<String> findClassesThatExtend(String[] strPathsOrJars, Class<?>[] superClasses, boolean innerClasses, String contains, String notContains) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find classes in the provided path(s)/jar(s) that extend the class(es).
      Parameters:
      strPathsOrJars - pathnames or jarfiles to search for classes
      superClasses - required parent class(es)
      innerClasses - should we include inner classes?
      contains - classname should contain this string
      notContains - classname should not contain this string
      Returns:
      List containing discovered classes
      Throws:
      IOException - when scanning classes fails
    • findAnnotatedClasses

      @API(status=DEPRECATED, since="5.6") @Deprecated public static List<String> findAnnotatedClasses(String[] strPathsOrJars, Class<? extends Annotation>[] annotations, boolean innerClasses) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find classes in the provided path(s)/jar(s) that extend the class(es).
      Parameters:
      strPathsOrJars - pathnames or jarfiles to search for classes
      annotations - required annotations
      innerClasses - should we include inner classes?
      Returns:
      List containing discovered classes
      Throws:
      IOException - when scanning classes fails
    • findAnnotatedClasses

      @API(status=DEPRECATED, since="5.6") @Deprecated public static List<String> findAnnotatedClasses(String[] strPathsOrJars, Class<? extends Annotation>[] annotations) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find classes in the provided path(s)/jar(s) that extend the class(es). Inner classes are not searched.
      Parameters:
      strPathsOrJars - pathnames or jarfiles to search for classes
      annotations - required annotations
      Returns:
      List containing discovered classes
      Throws:
      IOException - when scanning classes fails
    • findClassesThatExtend

      @API(status=DEPRECATED, since="5.6") @Deprecated public static List<String> findClassesThatExtend(String[] searchPathsOrJars, Class<?>[] classNames, boolean innerClasses, String contains, String notContains, boolean annotations) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find classes in the provided path(s)/jar(s) that extend the class(es).
      Parameters:
      searchPathsOrJars - pathnames or jarfiles to search for classes
      classNames - required parent class(es) or annotations
      innerClasses - should we include inner classes?
      contains - classname should contain this string
      notContains - classname should not contain this string
      annotations - true if classnames are annotations
      Returns:
      List containing discovered classes
      Throws:
      IOException - when scanning classes fails
    • findClasses

      @API(status=DEPRECATED, since="5.6") @Deprecated public static List<String> findClasses(String[] searchPathsOrJars, ClassFilter filter) throws IOException
      Deprecated.
      use loadServices(Class, ServiceLoader, ServiceLoadExceptionHandler) or JMeterUtils#loadServicesAndScanJars
      Find all classes in the given jars that passes the class filter.
      Parameters:
      searchPathsOrJars - list of strings representing the jar locations
      filter - ClassFilter that the classes in the jars should conform to
      Returns:
      list of all classes in the jars, that conform to filter
      Throws:
      IOException - when reading the jar files fails