I was able to retrieve some logs that might shed some insight on the
parent classloader when running 8.5.87. I'll be frank that I don't quite
understand the mechanics of classloaders in Java.

LogFactory from
> org.eclipse.osgi.internal.loader.EquinoxClassLoader@1628551735] [LOOKUP]
> LogFactory implementation requested for the first time for context
> classloader org.apache.catalina.loader.ParallelWebappClassLoader@1204822967
>
> [LogFactory from
> org.eclipse.osgi.internal.loader.EquinoxClassLoader@1628551735] [LOOKUP]
> org.apache.catalina.loader.ParallelWebappClassLoader@1204822967 ==
> 'ParallelWebappClassLoader
>
> context: cg
>
> delegate: false
>
> ----------> Parent Classloader:
>
> org.cg.dao.webcontainer.tomcat.WebAppClassLoader@b887730
>
> '
>
> [LogFactory from
> org.eclipse.osgi.internal.loader.EquinoxClassLoader@1628551735] [LOOKUP]
> ClassLoader
> tree:org.apache.catalina.loader.ParallelWebappClassLoader@1204822967 -->
> org.cg.dao.webcontainer.tomcat.WebAppClassLoader@193492784 -->
> jdk.internal.loader.ClassLoaders$AppClassLoader@2085857771 (SYSTEM) -->
> jdk.internal.loader.ClassLoaders$PlatformClassLoader@105966264 --> BOOT
>
> May 02, 2023 7:23:21 PM org.apache.catalina.core.StandardContext
> listenerStart
>
> SEVERE: Exception sending context initialized event to listener instance
> of class [org.springframework.web.context.ContextLoaderListener]
>
> java.lang.NullPointerException
>
> at
> org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.inc(
> WebappClassLoaderBase.java:2775)
>
> at
> org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.hasMoreElements(
> WebappClassLoaderBase.java:2760)
>
> at org.apache.commons.logging.LogFactory.getConfigurationFile(
> LogFactory.java:1366)
>
> at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:453)
>
> at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
>
> at org.springframework.web.context.ContextLoader.initWebApplicationContext(
> ContextLoader.java:269)
>
> at
> org.springframework.web.context.ContextLoaderListener.contextInitialized(
> ContextLoaderListener.java:103)
>
> at org.apache.catalina.core.StandardContext.listenerStart(
> StandardContext.java:4492)
>
> at org.apache.catalina.core.StandardContext.startInternal(
> StandardContext.java:4950)
>
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>
> at org.apache.catalina.core.ContainerBase.addChildInternal(
> ContainerBase.java:711)
>
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:688)
>
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)
>
> at org.cg.dao.webcontainer.tomcat.TomcatWrapper.startWebApp(
> TomcatWrapper.java:185)
>
> at org.cg.dao.webcontainer.tomcat.TomcatWrapper.prepareAllWebApps(
> TomcatWrapper.java:140)
>
> at org.cg.dao.webcontainer.tomcat.TomcatWrapper.startServer(
> TomcatWrapper.java:206)
>
> at org.cg.dao.webcontainer.tomcat.Application.start(Application.java:30)
>
> at org.eclipse.equinox.internal.app.EclipseAppHandle.run(
> EclipseAppHandle.java:203)
>
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(
> EclipseAppLauncher.java:136)
>
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(
> EclipseAppLauncher.java:104)
>
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
> EclipseStarter.java:402)
>
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
> EclipseStarter.java:255)
>
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
>
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62)
>
> at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
>
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
>
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
>
> at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
>
> at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
>

On Tue, May 2, 2023 at 6:18 PM Jeremy Nguyen <jeremyn...@gmail.com> wrote:

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

Reply via email to