[
https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835257#action_12835257
]
Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------
I look ri code to find if they changed the evaluation algorithm to solve #{cc}
(if there is a change we can do some hack on our code too). In fact as
supposed, they have its own hack there, so we can change the behavior of the
class
org.apache.myfaces.el.unified.resolver.implicitobject.CompositeComponentImplicitObject.
Use javax.faces.view.Location object is a good idea. I never think about it,
because in theory this object is used to log errors. It is not possible to have
one composite component that has some reference to itself inside
cc:implementation and nest cc:insertChildren or cc:insertFacet (or not?), so
it should be safe to use it as reference.
I remember the problem with FaceletVDL.retargetMethodExpressions. In
TagAttributeImpl.getMethodExpression there is a wrapper that does the
indirection from ValueExpression to MethodExpression. I suppose do something
like:
new TagValueExpressionMethodExpression(this, new
LocationValueExpression(..valueExpr..));
should solve the problem.
> StackOverflowError if a composite component implementation uses another
> composite component
> -------------------------------------------------------------------------------------------
>
> Key: MYFACES-2561
> URL: https://issues.apache.org/jira/browse/MYFACES-2561
> Project: MyFaces Core
> Issue Type: Bug
> Components: JSR-314
> Affects Versions: 2.0.0-beta-3
> Reporter: Jakob Korherr
> Assignee: Jakob Korherr
> Attachments: MYFACES-2561.patch, test.xhtml, test1.xhtml, test2.xhtml
>
>
> If you use another composite component in your composite component's
> implementation you will get a StackOverflowError.
> javax.faces.FacesException: java.lang.StackOverflowError
> at
> org.apache.myfaces.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
> at
> org.apache.myfaces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:216)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
> at java.lang.Thread.run(Thread.java:637)
> Caused by: java.lang.StackOverflowError
> at java.util.ArrayList.toArray(ArrayList.java:306)
> at java.util.logging.Logger.getHandlers(Logger.java:1200)
> at
> java.util.logging.LogManager$RootLogger.getHandlers(LogManager.java:1019)
> at java.util.logging.Logger.log(Logger.java:454)
> at java.util.logging.Logger.doLog(Logger.java:480)
> at java.util.logging.Logger.logp(Logger.java:680)
> at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:167)
> at org.apache.juli.logging.DirectJDKLog.error(DirectJDKLog.java:135)
> at org.apache.catalina.connector.Request.setAttribute(Request.java:1448)
> at
> org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503)
> at
> org.apache.myfaces.context.servlet.RequestMap.setAttribute(RequestMap.java:53)
> at
> org.apache.myfaces.util.AbstractAttributeMap.put(AbstractAttributeMap.java:113)
> at
> org.apache.myfaces.util.AbstractAttributeMap.put(AbstractAttributeMap.java:1)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setScope(FacesCompositeELResolver.java:191)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:139)
> at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
> at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
> at
> org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:84)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.get(CompositeComponentELResolver.java:245)
> at javax.el.MapELResolver.getValue(MapELResolver.java:51)
> at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
> at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
> at
> org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:84)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.get(CompositeComponentELResolver.java:245)
> at javax.el.MapELResolver.getValue(MapELResolver.java:51)
> at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
> at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
> at
> org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:84)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.get(CompositeComponentELResolver.java:245)
> at javax.el.MapELResolver.getValue(MapELResolver.java:51)
> at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
> at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
> at
> org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:84)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.get(CompositeComponentELResolver.java:245)
> at javax.el.MapELResolver.getValue(MapELResolver.java:51)
> at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
> at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
> ......
> ......
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.