【问题标题】:How do I fix StackOverflowError in org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry in Tomcat 7.0.35如何修复 Tomcat 7.0.35 中 org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry 中的 StackOverflowError
【发布时间】:2015-07-09 10:16:39
【问题描述】:

我们正在运行旧版本的 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


【解决方案1】:

由于升级 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 中的问题。

【讨论】:

  • 谢谢!我已经尝试修复这个问题很长时间了,在我尝试过的所有修复中,这是唯一一个真正有效的。
  • 我也将 bcp*jdk15on.jar 添加到 DefaultJarScanner.jarsToSkip - 请参阅 tomcat.apache.org/tomcat-7.0-doc/config/…
【解决方案2】:

我最近进行的一个遗留项目也遇到了同样的问题。我在这里找到了更好的解决方案:Avoid cyclic reference inheritance in grails

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

bcprov-jdk15on
bcprov-jdk16

由于是多模块的Maven项目,所以我使用了

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

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

【讨论】:

  • 这是正确答案,对删除多个版本的 bcprov 有很大帮助。
【解决方案3】:

我遇到了同样的问题。对于 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 属性并将有问题的 jars 添加到列表底部。

例如

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
annotations-api.jar,\
ant-junit*.jar,\
ant-launcher.jar,\
ant.jar,\
...
xmlParserAPIs.jar,\
xom-*.jar,\
bcprov*.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2011-10-18
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多