| 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 | } |