如何在Tomcat 7.0.35中的org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry中修复StackOverflowError

Phy*_*yxx 10 tomcat

我们正在运行旧版本的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)
Run Code Online (Sandbox Code Playgroud)

这已在https://bz.apache.org/bugzilla/show_bug.cgi?id=53871中提及,后来的版本(如Tomcat 8)似乎没有受到影响.

我怎样才能解决这个问题?

Phy*_*yxx 20

由于升级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]
Run Code Online (Sandbox Code Playgroud)

一旦我找到了违规的jar文件,我就把它添加到catalina.properties文件中,如下所示:

org.apache.catalina.startup.ContextConfig.jarsToSkip=bcprov*.jar

这似乎解决了旧版Tomcat中的问题.


Ond*_*ert 13

我最近遇到的遗留项目遇到了同样的问题.我在这里找到了更好的解决方案:避免在grails中循环引用继承

事实证明我在classpath上也有两个bcprov-jdk.在我的情况下,这些是:

bcprov-jdk15on
bcprov-jdk16
Run Code Online (Sandbox Code Playgroud)

由于它是一个多模块Maven项目,我用过

mvn dependency:tree -Dverbose -Dincludes=org.bouncycastle

找到他们来自哪里.然后我删除了jdk16,因为最新的一个是jdk15on,它可以工作.

  • 这是正确的答案,对删除多个版本的 bcprov 有很大帮助。 (2认同)

小智 5

我有同样的问题。对于 Tomcat 8.* 及更高版本,属性名称已更改为tomcat.util.scan.StandardJarScanFilter.jarsToSkip.

请参阅:https ://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html#JAR_Scanning

在 Tomcat 目录中,编辑conf/catalina.properties文件,查找tomcat.util.scan.StandardJarScanFilter.jarsToSkip属性并将有问题的 jar 添加到列表底部。

例如

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
annotations-api.jar,\
ant-junit*.jar,\
ant-launcher.jar,\
ant.jar,\
...
xmlParserAPIs.jar,\
xom-*.jar,\
bcprov*.jar
Run Code Online (Sandbox Code Playgroud)