| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| WebSpherePackageScanClassResolver | 
 | 
 | 1.3333333333333333;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 | } |