[ 
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.

Reply via email to