我们正在运行旧版本的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,它可以工作.
小智 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)
| 归档时间: |
|
| 查看次数: |
16247 次 |
| 最近记录: |