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