Author: markt
Date: Tue Feb 19 16:24:02 2013
New Revision: 1447792
URL: http://svn.apache.org/r1447792
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53871
Add the class hierarchy that triggered the StackOverflowError to the error
message to aid debugging.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1447791
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1447792&r1=1447791&r2=1447792&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
Tue Feb 19 16:24:02 2013
@@ -2103,13 +2103,7 @@ public class ContextConfig implements Li
ClassParser parser = new ClassParser(is, null);
JavaClass clazz = parser.parse();
- try {
- checkHandlesTypes(clazz);
- } catch (StackOverflowError soe) {
- throw new IllegalStateException(sm.getString(
- "contextConfig.annotationsStackOverflow",
- context.getName()), soe);
- }
+ checkHandlesTypes(clazz);
if (handlesTypesOnly) {
return;
@@ -2159,7 +2153,14 @@ public class ContextConfig implements Li
populateJavaClassCache(className, javaClass);
JavaClassCacheEntry entry = javaClassCache.get(className);
if (entry.getSciSet() == null) {
- populateSCIsForCacheEntry(entry);
+ try {
+ populateSCIsForCacheEntry(entry);
+ } catch (StackOverflowError soe) {
+ throw new IllegalStateException(sm.getString(
+ "contextConfig.annotationsStackOverflow",
+ context.getName(),
+ classHierarchyToString(className, entry)));
+ }
}
if (entry.getSciSet().size() > 0) {
// Need to try and load the class
@@ -2211,6 +2212,30 @@ public class ContextConfig implements Li
}
+ private String classHierarchyToString(String className,
+ JavaClassCacheEntry entry) {
+ JavaClassCacheEntry start = entry;
+ StringBuilder msg = new StringBuilder(className);
+ msg.append("->");
+
+ String parentName = entry.getSuperclassName();
+ JavaClassCacheEntry parent = javaClassCache.get(parentName);
+ int count = 0;
+
+ while (count < 100 && parent != null && parent != start) {
+ msg.append(parentName);
+ msg.append("->");
+
+ count ++;
+ parentName = parent.getSuperclassName();
+ parent = javaClassCache.get(parentName);
+ }
+
+ msg.append(parentName);
+
+ return msg.toString();
+ }
+
private void populateJavaClassCache(String className, JavaClass javaClass)
{
if (javaClassCache.containsKey(className)) {
return;
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties?rev=1447792&r1=1447791&r2=1447792&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties
Tue Feb 19 16:24:02 2013
@@ -18,7 +18,7 @@ catalina.noCluster=Cluster RuleSet not f
catalina.shutdownHookFail=The shutdown hook experienced an error while trying
to stop the server
catalina.stopServer=No shutdown port configured. Shut down server through OS
signal. Server not shut down.
contextConfig.altDDNotFound=alt-dd file {0} not found
-contextConfig.annotationsStackOverflow=Unable to complete the scan for
annotations for web application [{0}]. Possible root causes include a too low
setting for -Xss and illegal cyclic inheritance dependencies
+contextConfig.annotationsStackOverflow=Unable to complete the scan for
annotations for web application [{0}] 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 [{1}]
contextConfig.applicationUrl=Unable to determine URL for application web.xml
contextConfig.applicationMissing=Missing application web.xml, using defaults
only
contextConfig.applicationParse=Parse error in application web.xml file at {0}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1447792&r1=1447791&r2=1447792&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Feb 19 16:24:02 2013
@@ -66,6 +66,12 @@
Add one more library from JDK 7 to the value of <code>jarsToSkip</code>
property in the <code>catalina.properties</code> file. (kkolinko)
</update>
+ <add>
+ <bug>53871</bug>: If annotation scanning results in a
+ <code>StackOverflowError</code> due to broken class dependencies, add
+ the class hierarchy that triggered the exception to the error message.
+ (markt)
+ </add>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]