如何修复Tomcat 7.0.35中org.apache.catalina.startup.ContextConfig.populatessisforCacheEntry中的StackOverflower错误

如何修复Tomcat 7.0.35中org.apache.catalina.startup.ContextConfig.populatessisforCacheEntry中的StackOverflower错误,tomcat,Tomcat,我们正在运行一个旧版本的Tomcat,一个新的web应用程序产生了这样的堆栈跟踪 Caused by: java.lang.StackOverflowError at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) at org.apache.catalina.startup.ContextConfig.populateSCIsForCache

我们正在运行一个旧版本的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)
这一点已经在中提到过,更高版本(如Tomcat8)似乎没有受到影响


如何解决这个问题?

因为升级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
文件中,如下所示:

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


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

我最近在一个遗留项目中遇到了同样的问题。我在这里找到了更好的解决方案:

事实证明,我在类路径上还有两个bcprov jdk。就我而言,这些是:

bcprov-jdk15on
bcprov-jdk16
因为它是一个多模块Maven项目,所以我使用

mvn依赖项:tree-Dverbose-Dincludes=org.bouncycastle


找到他们的来源。然后我删除了jdk16,因为最新的是jdk15on,它可以工作。

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

见:

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

e、 g


谢谢我已经尝试了很长一段时间来修复这个问题,在我尝试过的所有修复中,这是唯一一个真正有效的。我也将bcp*jdk15on.jar添加到DefaultJarScanner.jarsToSkip中-参见检查这篇文章这是正确的答案,对删除多个版本的bcprov有很大帮助。
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
annotations-api.jar,\
ant-junit*.jar,\
ant-launcher.jar,\
ant.jar,\
...
xmlParserAPIs.jar,\
xom-*.jar,\
bcprov*.jar