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