I picked 8.5.34 because 8.5.35 has that code change while 34 doesn't. https://github.com/apache/tomcat/blob/8.5.35/java/org/apache/catalina/loader/WebappClassLoaderBase.java#L1050
I'll do some debugging for the classloader soon. I'm still trying to get my application running. I'm wrestling with the following error at runtime. Caused by: org.apache.jasper.JasperException: Unable to compile class for > JSP > at > org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:610) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:382) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) > ~[jasper.jar:8.5.34] > at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) > ~[jasper.jar:8.5.34] > at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) > ~[servlet-api.jar:?] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > com.centrify.platform.service.analytics.filter.GlobalAttributeFilter.doFilter(GlobalAttributeFilter.java:41) > ~[com.centrify.platform.service.analytics/:?] > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > org.cg.services.core.filter.ExecutionTimeFilter.doFilterInternal(ExecutionTimeFilter.java:29) > ~[org.cg.services.core/:?] > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:112) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.pac4j.springframework.security.web.SecurityFilter.lambda$doFilter$1(SecurityFilter.java:52) > ~[spring-security-pac4j-2.0.0.jar:?] > at > org.pac4j.core.engine.DefaultSecurityLogic.perform(DefaultSecurityLogic.java:136) > ~[pac4j-core-1.9.1.jar:?] > ... 34 more > Caused by: java.lang.NullPointerException > at > org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:516) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1854) > ~[jasper.jar:8.5.34] > at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:220) > ~[jasper.jar:8.5.34] > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) > ~[jasper.jar:8.5.34] > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:350) > ~[jasper.jar:8.5.34] > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:382) > ~[jasper.jar:8.5.34] > at > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) > ~[jasper.jar:8.5.34] > at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) > ~[jasper.jar:8.5.34] > at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) > ~[servlet-api.jar:?] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > com.centrify.platform.service.analytics.filter.GlobalAttributeFilter.doFilter(GlobalAttributeFilter.java:41) > ~[com.centrify.platform.service.analytics/:?] > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > org.cg.services.core.filter.ExecutionTimeFilter.doFilterInternal(ExecutionTimeFilter.java:29) > ~[org.cg.services.core/:?] > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) > ~[spring-web-5.1.20.RELEASE.jar:5.1.20.RELEASE] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) > ~[catalina.jar:8.5.34] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) > ~[catalina.jar:8.5.34] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:112) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) > ~[spring-security-web-4.1.0.RELEASE.jar:4.1.0.RELEASE] > at > org.pac4j.springframework.security.web.SecurityFilter.lambda$doFilter$1(SecurityFilter.java:52) > ~[spring-security-pac4j-2.0.0.jar:?] > at > org.pac4j.core.engine.DefaultSecurityLogic.perform(DefaultSecurityLogic.java:136) > ~[pac4j-core-1.9.1.jar:?] > ... 34 more On Tue, May 2, 2023 at 5:23 AM Christopher Schultz < ch...@christopherschultz.net> wrote: > Jeremy, > > On 5/1/23 17:46, Jeremy Nguyen wrote: > > I noticed this change was introduced: > > https://bz.apache.org/bugzilla/show_bug.cgi?id=62868 > > > https://github.com/apache/tomcat/blame/8.5.x/java/org/apache/catalina/loader/WebappClassLoaderBase.java#L1122 > > > > I'll try running 8.5.34 and report back. > > Wow that's ancient. What made you pick 8.5.34? That change should have > gone into 8.5.36. Can you try both 8.5.35 and 8.5.36 and let us know > which (if either) works? > > I wonder if the parent ClassLoader is violating the contract for > getResources(). > > Jeremy, can you throw some code into your application that runs early > (like in org.cg.dao.webcontainer.tomcat.TomcatWrapper.startWebApp) that > reports the class name of thew parent ClassLoader for the > WebappClassLoader being used for the webapp? > > If you aren't able to do that -- and since you are running from Eclipse > -- try putting a breakpoint in WebappClassLoaderBase.getResources > and just inspecting the situation at that point -- you should be able > to see what the parent ClassLoader is, and even see what > getParent().getResources() returns. > > -chris > > > On Mon, May 1, 2023 at 2:12 PM Rob Sargent <rsarg...@xmission.com> > wrote: > > > >> > >> > >> On 5/1/23 14:36, Christopher Schultz wrote: > >>> Jeremy, > >>> > >>> On 5/1/23 14:22, Jeremy Nguyen wrote: > >>>> I'm trying to upgrade Tomcat 8 to 8.5 and I'm getting a > >>>> nullpointerexception within > >>>> WebappClassLoaderBase.CombinedEnumeration.inc. > >>>> It seems to occur when it's trying to initialize commons-logging > >>>> LogFactory > >>>> for any class specified in Web.xml, and it's calling > >>>> getResources("commons-logging.properties") which I never had. Is it > >>>> required in 8.5? Even if I put it in conf/, it's not being picked up. > >>>> > >>>> We're running Tomcat using a wrapper and it's erroring out here: > >>>> > >> > https://github.com/CodeGerm/osgi-server/blob/master/plugins/org.cg.dao.webcontainer/src/org/cg/dao/webcontainer/tomcat/TomcatWrapper.java#L185 > >>>> > >>>> > >>>> I posted my web.xml and error trace here as well: > >>>> > >> > https://stackoverflow.com/questions/76139108/web-xml-configuration-is-broken-when-upgrading-to-tomcat-8-5-and-spring-5-1 > >>>> > >>> > >>> I have no idea how this is throwing an NPE. The only pointer being > >>> dereferenced by the inc() method is "sources": > >>> > >>> 2773 private boolean inc() { > >>> 2774 while (index < sources.length) { > >>> 2775 if (sources[index].hasMoreElements()) { > >>> 2776 return true; > >>> 2777 } > >>> 2778 index++; > >>> 2779 } > >>> 2780 return false; > >>> 2781 } > >>> > >>> That member (sources) is instantiated in the one-and-only-one > >>> constructor: > >>> > >>> CombinedEnumeration(Enumeration<URL> enum1, Enumeration<URL> > >>> enum2) { > >>> @SuppressWarnings("unchecked") > >>> Enumeration<URL>[] sources = new Enumeration[] { enum1, > >>> enum2 }; > >>> this.sources = sources; > >>> } > >>> > >>> Also weird is that this throws NPE on line 2775 and not 2774. I can't > >>> explain how line 2775 could throw an NPE if line 2774 did not. > >>> > >>>> :/ > >> > >> Is the null pointer in the index'th position of source, not source > itself? > >> > >>> > >>> I use Tomcat 8.5.x and I have never had a commons-logging.properties > >>> file, and I use some components which are surely causing > >>> commons-logging LogFactory to initialize, and I've never seen this > >>> problem before. > >>> > >>> -chris > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >>> For additional commands, e-mail: users-h...@tomcat.apache.org > >>> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >