Great idea. I did just that and it worked for the most part, but I also had to tweak ClassLoaders.java around line 46.
public ClassLoader get(int idx) {
ClassLoader cl = (ClassLoader)classLoaders.elementAt(idx);
try {
cl.toString();
return cl;
} catch (NullPointerException e) {
return Thread.currentThread().getContextClassLoader().getParent();
}
}
It seems that the vector of ClassLoader's had a reference to the ClassLoader that was used for the containers first deployment, but when the container was stopped, that classLoader should have been thrown away. So, on redeployment, this method would return that old classloader which wasn't null, but also didn't work. i.e. (cl == null) would return false, but cl.toString() would throw the NPE for the 'dead' reference (is there a better term for this?). Anyway, it's not pretty, but it works for my needs.
Thanks!
On 1/15/06, Davanum Srinivas <[EMAIL PROTECTED]> wrote:
Please get the latest sources for commons-discovery and build it
yourself to see if that works. I remember some check-ins, but don't
remember if there was a release after that.
thanks,
dims
On 1/15/06, Edward Blazer < [EMAIL PROTECTED]> wrote:
> Hi,
>
> I've googled the topic to death but can't find a solution to the infamous
> NullPointerException caused by Axis/Commons-Discovery during a servlet
> restart (error occurs for many different vendors; jboss, jetty, others?) My
> application has an embedded server (jetty) for serving Axis WebServices, but
> also acts as a client of web-services. I've discovered that if I remove the
> Axis libraries from the applications classpath that it can restart without
> error, however this causes a problem when the application tries to consume
> web-services since Axis isn't in the classpath.
>
> Any ideas?
>
> Thanks
>
> java.lang.NullPointerException
> at
> org.mortbay.http.ContextLoader.getResource(ContextLoader.java:257)
> at
> org.apache.commons.discovery.jdk.JDK12Hooks.getResources
> (JDK12Hooks.java :149)
> at
> org.apache.commons.discovery.resource.DiscoverResources$1.getNextResources(DiscoverResources.java:153)
> at
> org.apache.commons.discovery.resource.DiscoverResources$1.getNextResource (DiscoverResources.java
> :129)
> at
> org.apache.commons.discovery.resource.DiscoverResources$1.hasNext(DiscoverResources.java:116)
> at
> org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassNames (DiscoverNamesInFile.java
> :186)
> at
> org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassName(DiscoverNamesInFile.java:170)
> at
> org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.hasNext (DiscoverNamesInFile.java
> :157)
> at
> org.apache.commons.discovery.resource.names.NameDiscoverers$1.getNextIterator(NameDiscoverers.java:143)
> at
> org.apache.commons.discovery.resource.names.NameDiscoverers$1.hasNext (NameDiscoverers.java
> :126)
> at
> org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.getNextResource(ResourceClassDiscoverImpl.java:159)
> at
> org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.hasNext
> (ResourceClassDiscoverImpl.java:147)
> at
> org.apache.axis.configuration.EngineConfigurationFactoryFinder$1.run(EngineConfigurationFactoryFinder.java:120)
> at java.security.AccessController.doPrivileged (Native
> Method)
> at
> org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:113)
> at
> org.apache.axis.transport.http.AxisServletBase.getEngineEnvironment (AxisServletBase.java
> :273)
> at
> org.apache.axis.transport.http.AxisServletBase.getEngine(AxisServletBase.java:172)
> at
> org.apache.axis.transport.http.AxisServletBase.getOption (AxisServletBase.java:396)
> at org.apache.axis.transport.http.AxisServletBase.init
> (AxisServletBase.java:112)
> at
> javax.servlet.GenericServlet.init(GenericServlet.java:168)
> at
> org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:383)
> at org.mortbay.jetty.servlet.ServletHolder.start
> (ServletHolder.java:243)
> at
> org.mortbay.jetty.servlet.ServletHandler.initializeServlets (ServletHandler.java:446)
> at
> org.mortbay.jetty.servlet.WebApplicationHandler.initializeServlets(WebApplicationHandler.java
> :321)
> at
> org.mortbay.jetty.servlet.WebApplicationContext.doStart (WebApplicationContext.java:509)
> at org.mortbay.util.Container.start(Container.java:72)
> at org.mortbay.http.HttpServer.doStart(HttpServer.java
> :708)
> at org.mortbay.util.Container.start (Container.java:72)
> at JettyTest2.start(JettyTest2.java:35)
> at JettyTest2.testDoubleStartStop(JettyTest2.java:30)
> at JettyTest2.main(JettyTest2.java:22)
--
Davanum Srinivas : http://wso2.com/blogs/
