question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Illegal access: this web application instance has been stopped already.

See original GitHub issue

Spring boot dev tools is unable to restart the server automatically. POM:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.4.4</version>
	<relativePath/>
	<!-- lookup parent from repository -->
</parent>
<properties>
	<java.version>1.8</java.version>
</properties>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<scope>runtime</scope>
	<optional>true</optional>
</dependency>
<dependency>
	<groupId>org.apache.axis</groupId>
	<artifactId>axis</artifactId>
	<version>1.4</version>
</dependency>

Error:

Illegal access: this web application instance has been stopped already. Could not load [META-INF/services/org.apache.axis.EngineConfigurationFactory]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.

StackTrace:


java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [META-INF/services/org.apache.axis.EngineConfigurationFactory]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
	at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1384) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1037) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.commons.discovery.jdk.JDK12Hooks.getResources(JDK12Hooks.java:134) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResources(DiscoverResources.java:124) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResource(DiscoverResources.java:98) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.DiscoverResources$1.hasNext(DiscoverResources.java:84) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassNames(DiscoverNamesInFile.java:226) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassName(DiscoverNamesInFile.java:209) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.hasNext(DiscoverNamesInFile.java:196) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.names.NameDiscoverers$1.getNextIterator(NameDiscoverers.java:122) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.names.NameDiscoverers$1.hasNext(NameDiscoverers.java:105) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.getNextResource(ResourceClassDiscoverImpl.java:116) [commons-discovery-0.5.jar:0.5]
	at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.hasNext(ResourceClassDiscoverImpl.java:103) [commons-discovery-0.5.jar:0.5]
	at org.apache.axis.configuration.EngineConfigurationFactoryFinder$1.run(EngineConfigurationFactoryFinder.java:120) [axis-1.4.jar:na]
	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_131]
	at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:113) [axis-1.4.jar:na]
	at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:160) [axis-1.4.jar:na]
	at org.apache.axis.client.Service.getEngineConfiguration(Service.java:813) [axis-1.4.jar:na]
	at org.apache.axis.client.Service.getAxisClient(Service.java:104) [axis-1.4.jar:na]
	at org.apache.axis.client.Service.<init>(Service.java:113) [axis-1.4.jar:na]
	at com.fedex.ws.ship.v26.ShipServiceLocator.<init>(ShipServiceLocator.java:12) [classes/:na]
	at com.foo.service.ShipService.processShipment(ShipService.java:69) [classes/:na]
	at com.foo.controller.ShipController.processShipping(ShipController.java:38) [classes/:na]
	at com.foo.controller.ShipController$$FastClassBySpringCGLIB$$3bcae4f4.invoke(<generated>) [classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) [spring-aop-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) [spring-aop-5.3.5.jar:5.3.5]
	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123) [spring-context-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) [spring-aop-5.3.5.jar:5.3.5]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) [spring-aop-5.3.5.jar:5.3.5]
	at com.foo.controller.ShipController$$EnhancerBySpringCGLIB$$291f6053.processShipping(<generated>) [classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_131]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_131]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_131]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.5.jar:5.3.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) [tomcat-embed-core-9.0.44.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.5.jar:5.3.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) [tomcat-embed-core-9.0.44.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:106) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_131]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_131]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.44.jar:9.0.44]
	at java.lang.Thread.run(Unknown Source) [na:1.8.0_131]

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:6 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
wilkinsonacommented, Mar 31, 2021

Thanks for the sample.

The problem you’re experiencing is due to a bug in Axis. The first time AxisProperties.getNameDiscoverer() is called, it performs lazy initialization of some static fields. As part of this initialization a reference to the thread context class loader is retrieved and stored in a static field. This will cause problems in any environment where the ClassLoader of AxisProperties and the thread context class loader are not the same. For example, if you deployed an application to a servlet container with Axis configured as a shared library, the shared library would capture a reference to the web app class loader of the first web application to call AxisProperties.getNameDiscoverer(). Undeploying that web application would then result in a memory leak as its ClassLoader could not be garbage collected. A similar problem occurs with Devtools where a new web app class loader is created for each restart, but Axis holds onto the web app class loader from the first time it’s called.

You can avoid the problem by getting Axis to initialise its name discoverer outside of a web request. This prevents it from capturing a reference to the web app class loader. To do so, add the following method to your main application class:

@PostConstruct
void preventAxisPropertiesClassLoaderLeak() {
	ClassLoader tccl = Thread.currentThread().getContextClassLoader();
	Thread.currentThread().setContextClassLoader(AxisProperties.class.getClassLoader());
	AxisProperties.getNameDiscoverer();
	Thread.currentThread().setContextClassLoader(tccl);
}

An alternative approach would be to use reflection to set AxisPropertiesloader and nameDiscoverer fields to null, however the approach above appears to be sufficient and feels slightly simpler to me.

0reactions
harikesh409commented, Mar 31, 2021

Thanks for the sample.

The problem you’re experiencing is due to a bug in Axis. The first time AxisProperties.getNameDiscoverer() is called, it performs lazy initialization of some static fields. As part of this initialization a reference to the thread context class loader is retrieved and stored in a static field. This will cause problems in any environment where the ClassLoader of AxisProperties and the thread context class loader are not the same. For example, if you deployed an application to a servlet container with Axis configured as a shared library, the shared library would capture a reference to the web app class loader of the first web application to call AxisProperties.getNameDiscoverer(). Undeploying that web application would then result in a memory leak as its ClassLoader could not be garbage collected. A similar problem occurs with Devtools where a new web app class loader is created for each restart, but Axis holds onto the web app class loader from the first time it’s called.

You can avoid the problem by getting Axis to initialise its name discoverer outside of a web request. This prevents it from capturing a reference to the web app class loader. To do so, add the following method to your main application class:

@PostConstruct
void preventAxisPropertiesClassLoaderLeak() {
	ClassLoader tccl = Thread.currentThread().getContextClassLoader();
	Thread.currentThread().setContextClassLoader(AxisProperties.class.getClassLoader());
	AxisProperties.getNameDiscoverer();
	Thread.currentThread().setContextClassLoader(tccl);
}

An alternative approach would be to use reflection to set AxisPropertiesloader and nameDiscoverer fields to null, however the approach above appears to be sufficient and feels slightly simpler to me.

Thank you I was able to resolve using the given snippet.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Illegal access: this web application instance has been stopped ...
Problem solved after restarting the tomcat and apache, the tomcat was caching older version of the app.
Read more >
Illegal access: this web application instance ... - Google Groups
I've gotten the below error a few times in the past few weeks. When it happens, the Java client simply returns `null` to...
Read more >
Illegal access - SDL Gateway
Worldserver no longer reachable after Windows security update - Illegal access: this web application instance has been stopped already.
Read more >
java.lang.IllegalStateException: Illegal access - CodeRanch
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [sun.management.
Read more >
Illegal access: this web application instance has been stopped ...
Faces application. I am getting this error: INFO: Illegal access: this web application instance has been stopped already. Could not load java.lang.Object.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found