protected void processDirectory(URL absoluteUrl, String relativePath, ClassVisitor visitor)
            throws MalformedURLException
   {

      // log directory name on trace level
      if (log.isTraceEnabled())
      {
         log.trace("Processing directory: " + relativePath);
      }

      // Convert url to string, this will result in a full path of a node in an exploded war archive
      // let it be "file://opt/server/application/abc/expoded/ear/war/WEB-INF/classes/com/"
      String urlAsString = absoluteUrl.toString();

      Set<?> paths = servletContext.getResourcePaths(relativePath);
      if (paths == null || paths.isEmpty())
      {
         return;
      }

      // Process child nodes
      for (Object obj : paths)
      {
         // produces "/WEB-INF/classes/com/mycompany/"
         String childNodeName = obj.toString();

         // get last part of the node path (folder or class entry)
         // for example for childnode "/WEB-INF/classes/com/mycompany/" returns "mycompany/"
         String childNodeRelative = getChildNodeName(childNodeName);

         // get the folder of the node inside WEB-INF
         // for example for childnode "/WEB-INF/classes/com/mycompany/" returns "/WEB-INF/classes/com/"
         String webInfFolder = childNodeName.substring(0, childNodeName.length() - childNodeRelative.length());

         // Find relative base folder
         // produces "file://opt/server/application/abc/expoded/ear/war/"
         String urlBase = urlAsString.substring(0, urlAsString.length() - webInfFolder.length());

         // Create child node URL
         // produces "file://opt/server/application/abc/expoded/ear/war/WEB-INF/classes/com/mycompany/"
         URL childNodeUrl = new URL(urlBase + childNodeName);

         if (childNodeRelative.endsWith("/"))
         {
            // Recursive cal
            processDirectory(childNodeUrl, childNodeName, visitor);
         }
         if (childNodeRelative.endsWith(".class"))
         {
            handleClassEntry(childNodeName, visitor);
         }
      }
   }
protected void processDirectory(URL absoluteUrl, String relativePath, ClassVisitor visitor)
            throws MalformedURLException
   {

      
      if (log.isTraceEnabled())
      {
         log.trace("Processing directory: " + relativePath);
      }

      
      
      String urlAsString = absoluteUrl.toString();

      Set<?> paths = servletContext.getResourcePaths(relativePath);
      if (paths == null || paths.isEmpty())
      {
         return;
      }

      
      for (Object obj : paths)
      {
         
         String childNodeName = obj.toString();

         
         
         String childNodeRelative = getChildNodeName(childNodeName);

         
         
         String webInfFolder = childNodeName.substring(0, childNodeName.length() - childNodeRelative.length());

         
         
         String urlBase = urlAsString.substring(0, urlAsString.length() - webInfFolder.length());

         
         
         URL childNodeUrl = new URL(urlBase + childNodeName);

         if (childNodeRelative.endsWith("/"))
         {
            
            processDirectory(childNodeUrl, childNodeName, visitor);
         }
         if (childNodeRelative.endsWith(".class"))
         {
            handleClassEntry(childNodeName, visitor);
         }
      }
   }
protected void processDirectory ( URL absoluteUrl , String relativePath , ClassVisitor visitor ) throws MalformedURLException { // log directory name on trace level if ( log . isTraceEnabled ( ) ) { log . trace ( "Processing directory: " + relativePath ) ; } // Convert url to string, this will result in a full path of a node in an exploded war archive // let it be "file://opt/server/application/abc/expoded/ear/war/WEB-INF/classes/com/" String urlAsString = absoluteUrl . toString ( ) ; Set < ? > paths = servletContext . getResourcePaths ( relativePath ) ; if ( paths == null || paths . isEmpty ( ) ) { return ; } // Process child nodes for ( Object obj : paths ) { // produces "/WEB-INF/classes/com/mycompany/" String childNodeName = obj . toString ( ) ; // get last part of the node path (folder or class entry) // for example for childnode "/WEB-INF/classes/com/mycompany/" returns "mycompany/" String childNodeRelative = getChildNodeName ( childNodeName ) ; // get the folder of the node inside WEB-INF // for example for childnode "/WEB-INF/classes/com/mycompany/" returns "/WEB-INF/classes/com/" String webInfFolder = childNodeName . substring ( 0 , childNodeName . length ( ) - childNodeRelative . length ( ) ) ; // Find relative base folder // produces "file://opt/server/application/abc/expoded/ear/war/" String urlBase = urlAsString . substring ( 0 , urlAsString . length ( ) - webInfFolder . length ( ) ) ; // Create child node URL // produces "file://opt/server/application/abc/expoded/ear/war/WEB-INF/classes/com/mycompany/" URL childNodeUrl = new URL ( urlBase + childNodeName ) ; if ( childNodeRelative . endsWith ( "/" ) ) { // Recursive cal processDirectory ( childNodeUrl , childNodeName , visitor ) ; } if ( childNodeRelative . endsWith ( ".class" ) ) { handleClassEntry ( childNodeName , visitor ) ; } } }
Scan for classes in a single directory. This method will call itself recursively if it finds other directories and
call {@link #processClass(String, InputStream, ClassVisitor)} when it finds a file ending with ".class" and
that is accepted by the {@link PackageFilter}

@param absoluteUrl The absolute URL of the WEB-INF node to scan
@param relativePath The path of the node inside the WEB-INF
@param visitor The visitor class to call for classes found
@throws MalformedURLException for invalid URLs
Scan for classes in a single directory . This method will call itself recursively if it finds other directories and call { @link #processClass ( String InputStream ClassVisitor ) } when it finds a file ending with . class and that is accepted by the { @link PackageFilter }