[ 
https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13424831#comment-13424831
 ] 

marco fago commented on MYFACES-2561:
-------------------------------------

There is still a case in which this solution won't work.
Consider the component test 1 above slightly modified:

<cc:interface name="test1">
    <cc:attribute name="test" required="true" />
</cc:interface>
<cc:implementation>
    test1
    <t2:test2 test="#{myLibrary:myFunction(...) or cc.attrs.test}" />
</cc:implementation> 

In that case the regex expression looking for cc.attrs will exclude the 
expression because cc.attrs is preceded by a left parenthesis (as stated in 
CompositeComponentELUtils).

Changing to
 <t2:test2 test="#{cc.attrs.test or myLibrary:myFunction(...)}" />
will work.

Tested on Myfaces 2.1.8.
                
> 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
>             Fix For: 2.0.0-beta-3
>
>         Attachments: MYFACES-2561-2.patch, 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.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to