Coverage Report - liquibase.servicelocator.WebSpherePackageScanClassResolver
 
Classes in this File Line Coverage Branch Coverage Complexity
WebSpherePackageScanClassResolver
11%
1/9
0%
0/2
1.333
 
 1  
 package liquibase.servicelocator;
 2  
 
 3  
 import java.io.IOException;
 4  
 import java.net.URL;
 5  
 import java.util.Enumeration;
 6  
 
 7  
 /**
 8  
  * WebSphere specific resolver to handle loading annotated resources in JAR files.
 9  
  */
 10  
 public class WebSpherePackageScanClassResolver extends DefaultPackageScanClassResolver {
 11  
 
 12  
     private final String resourcePath;
 13  
 
 14  
     /**
 15  
      * Constructor.
 16  
      * 
 17  
      * @param resourcePath
 18  
      *            the fixed resource path to use for fetching camel jars in WebSphere.
 19  
      */
 20  0
     public WebSpherePackageScanClassResolver(String resourcePath) {
 21  0
         this.resourcePath = resourcePath;
 22  0
     }
 23  
 
 24  
     /**
 25  
      * Is the classloader from IBM and thus the WebSphere platform?
 26  
      * 
 27  
      * @param loader
 28  
      *            the classloader
 29  
      * @return <tt>true</tt> if IBM classloader, <tt>false</tt> otherwise.
 30  
      */
 31  
     public static boolean isWebSphereClassLoader(ClassLoader loader) {
 32  9
         return loader.getClass().getName().startsWith("com.ibm");
 33  
     }
 34  
 
 35  
     /**
 36  
      * Overloaded to handle specific problem with getting resources on the IBM WebSphere platform.
 37  
      * <p/>
 38  
      * WebSphere can <b>not</b> load resources if the resource to load is a folder name, such as a packagename, you have
 39  
      * to explicit name a resource that is a file.
 40  
      * 
 41  
      * @param loader
 42  
      *            the classloader
 43  
      * @param packageName
 44  
      *            the packagename for the package to load
 45  
      * @return URL's for the given package
 46  
      * @throws java.io.IOException
 47  
      *             is thrown by the classloader
 48  
      */
 49  
     @Override
 50  
     protected Enumeration<URL> getResources(ClassLoader loader, String packageName) throws IOException {
 51  
         // try super first, just in vase
 52  0
         Enumeration<URL> enumeration = super.getResources(loader, packageName);
 53  0
         if (!enumeration.hasMoreElements()) {
 54  0
             log.debug("Using WebSphere workaround to load the camel jars with the annotated converters.");
 55  
             // Special WebSphere trick to load a file that exists in the JAR and then let it go from there.
 56  
             // The trick is that we just need the URL's for the .jars that contains the type
 57  
             // converters that is annotated. So by searching for this resource WebSphere is able to find
 58  
             // it and return the URL to the .jar file with the resource. Then the DefaultPackageScanClassResolver
 59  
             // can take it from there and find the classes that are annotated.
 60  0
             enumeration = loader.getResources(resourcePath);
 61  
         }
 62  
 
 63  0
         return enumeration;
 64  
     }
 65  
 
 66  
 }