我们正在运行旧版本的Tomcat,并且新的Web应用程序导致了这样的堆栈跟踪
Caused by: java.lang.StackOverflowError at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269)
这已在https://bz.apache.org/bugzilla/show_bug.cgi?id=53871中提及,并且更高版本(例如Tomcat 8)似乎没有受到影响。
我怎样才能解决这个问题?
由于无法升级Tomcat,因此我需要一种解决此问题的方法。
事实证明, Tomcat 7.0.47 具有相同的问题,但报告效果更好。在本地运行时,报告向我显示了以下内容:
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/api] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1Boolean->org.bouncycastle.asn1.DERBoolean- >org.bouncycastle.asn1.ASN1Boolean]
找到有害的jar文件后,将其添加到catalina.properties文件中,如下所示:
catalina.properties
org.apache.catalina.startup.ContextConfig.jarsToSkip=bcprov*.jar
在旧版本的Tomcat中,这似乎已解决了该问题。