eclipse-ee4j / eclipse-ee4j/jersey
Classloading issue in case of custom classloader usage
- Dominant language
- Java
- Stars
- 730
- Forks
- 382
- PR merge metrics
- No merged PRs in 30d
Description
When Jersey is loaded via custom classloader it's failing with ClassNotFoundException:
```
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / Caused by :java.lang.ClassNotFoundException: org.glassfish.jersey.internal.spi.AutoDiscoverable
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:335)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:302)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.defineClass1(Native Method)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:385)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:344)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:302)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.FilteringClassLoader.findClass(FilteringClassLoader.java:106)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.FilteringClassLoader.loadClass(FilteringClassLoader.java:91)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.Class.forName0(Native Method)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.lang.Class.forName(Class.java:270)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:403)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:398)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at java.security.AccessController.doPrivileged(Native Method)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.ServiceFinder$AbstractLazyIterator.hasNext(ServiceFinder.java:577)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.ServiceFinder.toClassArray(ServiceFinder.java:418)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.ServiceFinderBinder.configure(ServiceFinderBinder.java:90)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.hk2.utilities.binding.AbstractBinder.install(AbstractBinder.java:329)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.server.ServerBinder.configure(ServerBinder.java:94)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.inject.Injections.bind(Injections.java:154)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:144)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:329)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:339)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
**** Error Fri Aug 28 12:39:56 EDT 2015 1440779996519 / at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:362)
```
The reason of such exception is that ServiceFinder(loaded by current custom classloader) is using current thread's context classloader for loading services and as a result such classes are not found. All those service classes are coming with current custom classloader and not available for thread's context classloader. What I'm asking for is to change such logic and do fallback to current classloader. Something like Validation library are doing - [http://grepcode.com/file/repo1.maven.org/maven2/javax.validation/validation-api/1.1.0.Final/javax/validation/Validation.java?av=f](http://grepcode.com/file/repo1.maven.org/maven2/javax.validation/validation-api/1.1.0.Final/javax/validation/Validation.java?av=f)
I already had email conversation with Marek Potociar regarding this clasloading issue and he agreed to look into fallback with own classloader usage.
Note, that javax.ws.rs.client.FactoryFinder is having the same problem.
#### Environment
Weblogic 12.1.3, Java7
#### Affected Versions
[2.19]
Contributor guide
Assessment
This issue has not been assessed yet.