I am receiving a StackOverflowError
while rendering a JSF page. It happens after loading a particular set of data (which happens successfully) and then doing anything else on the page. Note that the page will load properly if it is refreshed after the error occurs. The page works perfectly otherwise and is able to load more records than are loaded in the error condition.
Depending on the steps taken, the error message can vary slightly but the error will always appear.
I am using MyFaces 1.2 (cannot be upgraded at this point).
Is this a common issue with a solution?
Example 1:
java.lang.StackOverflowError
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:947)
at java.lang.ClassLoader.loadClass(ClassLoader.java:291)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.FilteringClassLoader.findClass(FilteringClassLoader.java:101)
at weblogic.utils.classloaders.FilteringClassLoader.loadClass(FilteringClassLoader.java:86)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:45)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
at com.sun.el.parser.AstIdentifier.getValue(Unknown Source)
at com.sun.el.parser.AstDeferredExpression.getValue(Unknown Source)
at com.sun.el.parser.AstCompositeExpression.getValue(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
...
Example2:
java.lang.StackOverflowError
at javax.el.ELContext.(ELContext.java:222)
at com.sun.el.lang.EvaluationContext.(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
at com.sun.el.parser.AstIdentifier.getValue(Unknown Source)
at com.sun.el.parser.AstDeferredExpression.getValue(Unknown Source)
at com.sun.el.parser.AstCompositeExpression.getValue(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
...
Update: I have fixed the problem. There was a problem in the standard header code - it didn't like all of the parameters. I didn't write the failing code below but I'll have to fix it.
Checking the stack in Eclipse (when the StackOverflowError breakpoint was hit), it cycled between the (a) line and (b) line (which both hit TagValueExpression.getValue(..)
).
<c:forEach var="attr" items="#{request.parameterMap}">
<c:if test="#{empty flag}">
(a) <c:set var="parameters" value="#{parameters}&"/>
</c:if>
<c:set var="flag" value=""/>
(b)<c:set var="parameters" value="#{parameters}#{attr.key}=#{attr.value[0]}"/>
</c:forEach>