Advertisement
Guest User

Untitled

a guest
Jul 1st, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.68 KB | None | 0 0
  1. package org.jboss.windup.util;
  2.  
  3. import java.io.IOException;
  4. import java.net.URL;
  5. import java.util.Collections;
  6. import java.util.Enumeration;
  7. import java.util.LinkedHashSet;
  8. import java.util.List;
  9. import java.util.Set;
  10.  
  11. /**
  12.  * A composite class loader which looks for classes and resources in a list of class loaders.
  13.  *
  14.  * @author Ondrej Zizka, ozizka at redhat.com
  15.  */
  16. public class FurnaceCompositeClassLoader extends ClassLoader
  17. {
  18.     private final Set<ClassLoader> loaders = new LinkedHashSet<>();
  19.  
  20.     public FurnaceCompositeClassLoader(List<ClassLoader> loaders)
  21.     {
  22.         this.loaders.addAll(loaders);
  23.     }
  24.  
  25.     public FurnaceCompositeClassLoader(ClassLoader classLoader, List<ClassLoader> loaders)
  26.     {
  27.         super(classLoader);
  28.         this.loaders.addAll(loaders);
  29.     }
  30.  
  31.     @Override
  32.     public Class<?> findClass(String name) throws ClassNotFoundException
  33.     {
  34.         for (ClassLoader classLoader : loaders)
  35.         {
  36.             try
  37.             {
  38.                 return classLoader.loadClass(name);
  39.             }
  40.             catch (ClassNotFoundException notFound)
  41.             {
  42.                 // oh well
  43.             }
  44.         }
  45.  
  46.         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
  47.         if (contextLoader != null)
  48.         {
  49.             return contextLoader.loadClass(name);
  50.         }
  51.         else
  52.         {
  53.             return super.findClass(name);
  54.         }
  55.     }
  56.  
  57.     @Override
  58.     public URL getResource(String name)
  59.     {
  60.         for (ClassLoader classLoader : loaders)
  61.         {
  62.             URL resource = classLoader.getResource(name);
  63.             if (resource != null)
  64.             {
  65.                 return resource;
  66.             }
  67.         }
  68.  
  69.         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
  70.         if (contextLoader != null)
  71.         {
  72.             return contextLoader.getResource(name);
  73.         }
  74.         else
  75.         {
  76.             return super.getResource(name);
  77.         }
  78.     }
  79.  
  80.     @Override
  81.     public Enumeration<URL> getResources(String name) throws IOException
  82.     {
  83.         Set<URL> result = new LinkedHashSet<>();
  84.         for (ClassLoader classLoader : loaders)
  85.         {
  86.             result.addAll(Collections.list(classLoader.getResources(name)));
  87.         }
  88.  
  89.         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
  90.         if (contextLoader != null)
  91.         {
  92.             result.addAll(Collections.list(contextLoader.getResources(name)));
  93.         }
  94.         else
  95.         {
  96.             result.addAll(Collections.list(super.getResources(name)));
  97.         }
  98.         return Collections.enumeration(result);
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement