You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org> on 2010/02/16 15:13:27 UTC

[jira] Created: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

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


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.


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834248#action_12834248 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

It is a know problem about the semantic of #{cc}. In this case it resolves to the closest composite component and in that case is the same one. See this two topics on jsr-314-open mailing list (specially the first one):

[jsr-314-open] #{cc} semantics
[jsr-314-open] cc.parent mystery

In http://wiki.jcp.org/wiki/index.php?page=JSF+2.0+Rev+A+Change+Log it appears like:

C034 	 Change 	 Modify table 5-10 to state that implicit object cc returns the current composite component, relative to the composite component markup page in which the expression appears 

I'm keeping an eye on this change (there is other related to cc.parent resolution). It could be good to know what ri does in this case.

It could be good to have a patch for this one.



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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834291#action_12834291 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

OK, good to know.

I opened this issue, because on mojarra the code works. I will try find out which spec-change was applied here and provide a patch. After a review we can then commit it.

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834227#action_12834227 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

To run into the StackOverflowError both composite components need to have the same attribute name and use this attribute in their implementation.

Example:
component test1:

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

component test2:

<cc:interface name="test2">
    <cc:attribute name="test" required="true" />
</cc:interface>
<cc:implementation>
    test2
    #{cc.attrs.test}
</cc:implementation>

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834993#action_12834993 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

Thinking more about it, is clear org.apache.myfaces.el.unified.resolver.implicitobject.CompositeComponentImplicitObject must be changed and some hack should be implemented there. That's why the change on JSF 2.0 Rev A Change Log says something about Modify table 5-10. Really the complete reference is:

- JSF 2.0 spec section 5.6.2.1 Implicit Object ELResolver for Facelets and Programmatic Access section TABLE 5-10 ImplicitObjectELResolver for Programmatic Access

One idea to resolve #{cc} is the following:

1. When TagAttributeImpl.getValueExpression(FaceletContext ctx, Class type) is called (from ComponentRule.ValueExpressionMetadata or other place) check if the constructed expression requires resolve a reference to "cc". If so, save the data required to find the real composite component reference, wrapping the value expression like we did on MYFACES-2553.
2. When a method like ValueExpression.getValue(ELContext) or something similar is called, put somewhere (facesContext attribute map?) the information required, so when the original value expression is called and "cc" is resolved, we can extract that information and resolve the component value correctly. One idea could be use ComponentSupport.MARK_CREATED attribute to identify the component we need and iterate through hierarchy using UIComponent.getCurrentComponent(FacesContext) and UIComponent.getCompositeComponentParent(UIComponent). This two methods uses Resource.COMPONENT_RESOURCE_KEY implicit to recognize a composite component. ComponentSupport.MARK_CREATED key is used by ComponentTagHandlerDelegate to mark a component to a specific tag instance.

Suggestions are welcome. 

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834930#action_12834930 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

The problem with this fix is how to "resolve" #{cc} object. We need a way to lookup it based on the document markup, but the problem is that the evaluation of the expression happens after the tree is build. So, we need to find a way to "preserve" or find this information on that time. 

We can't use the component clientId, because it is not safe to call getClientId while the tree is build. Note to identify a target component used by cc:insertChildren or cc:insertFacet we can use it because the code that call it are on the listener activated when PostAddToView is called, that means after the tree is build.

One idea could be use the fact that cc:implementation put all component under UIComponent.COMPOSITE_FACET_NAME key, trying to find the closest one in the hierarchy, but this fact fails under the presence of cc:insertChildren or cc:insertFacet. Note cc:insertChildren or cc:insertFacet relocate components but the parent composite component is still on the hierarchy.

In theory, the only thing we have to identify or know the structure or a composite component is UIComponent.BEANINFO_KEY or Resource.COMPONENT_RESOURCE_KEY, so maybe we could take advantage of this fact to identify which composite component in the hierarchy is the one we are referring to #{cc}, but still I'm not have clear how we can do that. The spec says the EL resolver that try to get #{cc} (in myfaces it is org.apache.myfaces.el.unified.resolver.implicitobject.CompositeComponentImplicitObject) should return the value of UIComponent.getCurrentCompositeComponent(facesContext). But probably this behavior could change to make this fix work, breaking the spec. Again, as in MYFACES-2553, we need to do something from TagAttributeImpl.

Suggestions are welcome.

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835430#action_12835430 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

To solve the problem with the MethodExpression I introduced something similar to that. You'll see!

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835286#action_12835286 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

I don't see the problem with #{component} when using a LocationValueExpression, because I only push the component to the stack when I resolve #{cc} and then afterwards remove it immediatly from the stack. In the meantime no #{component} can be resolved, which would be disturbed by my algorithm.

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835296#action_12835296 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

The problem is do something like this is valid and it should work.

#{cc.attr.property1  == component.property2}

it is possible to imagine other expressions like that (but maybe not very common). Suppose every el expression that makes reference to cc does not for component is risky. It is preferred to "push" the component instance somewhere else (UIComponent.pushComponentToEL uses facescontext attribute map, so maybe we can create another stack for this specific case, or maybe use a stack is not necessary).

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835428#action_12835428 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

Thinking more about it maybe we need a stack that keeps track of resolved #{cc} instances. It is possible to have multiple indirections between composite components, and just a variable is not enough.

I would like to have the patch here, just as reference and commit the code. If RI has the fix, we should provide it too.

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835261#action_12835261 ] 

Leonardo Uribe commented on MYFACES-2561:
-----------------------------------------

The reason why it is better to change CompositeComponentImplicitObject is because use the component stack changes the evaluation value of #{component} (see the table 5-10)

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ 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.


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12834733#action_12834733 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

I already have a solution for the #{cc} resolver problem. Unfortunately another problem appeared: passing through MethodExpressions between composite components does not work. This is maybe related to MYFACES-2553. I will try to fix this also!

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


[jira] Resolved: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jakob Korherr resolved MYFACES-2561.
------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.0-beta-3

This one was hard.

> 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.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835159#action_12835159 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

Thanks for all your ideas, Leonardo, but I already have a working solution for that as I ment in "I already have a solution for the #{cc} resolver problem.".

My solution is similar to your last suggestion. I use the Location object to check in which file the Value-/MethodExpression is generated (in TagAttributeImpl). To save it I introduced LocationValueExpression and LocationMethodExpression. These two classes pass through all EL methods but push the related composite component to the stack before invocation and remove it afterwards. Thus the implicit object resolver does not need to be changed. 

To find the related composite component I search the current component stack for the composite component with the same Location as stored in the Value-/MethodExpression. And to get the Location of the composite component I use the InterfaceHandler to store the Location from where the composite component is created in the composite component's attribute map.

However there are still some problems with MethodExpressions as they are not really resolved. That is why I did not already provide a patch for this issue, but I will do this now so that you can take a look at my solution.

The problem with the MethodExpressions is that they are originally created as ValueExpressions and then (later) changed to MethodExpressions in FaceletVDL.retargetMethodExpressions. The problem here is that only the expression string is taken into account. This works perfect on the outer composite component, but the inner composite component gets something like #{cc.attr.method} and thus wants to invoke the method "method" on CompositeComponentAttributesMapWrapper.

One possible solution would be to look for expression strings with cc.attr in FaceletVDL.retargetMethodExpressions and keep extracting them until the expression string does not contain cc.attr, but this is not really a good solution I think. I've been thinking a lot about this and still haven't found something much better. Suggestions are welcome!

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835299#action_12835299 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

Good point, I haven't thought of that. OK I'll change this to set the related composite component to a attribute on the FacesContext and to evaluate this attribute on CompositeComponentImplicitObject.

After that and after the problem with the MethodExpressions we can commit the changes, because RI does the same. Or should be let this open with an available patch and wait for the official spec change?

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


[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component

Posted by "Jakob Korherr (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835391#action_12835391 ] 

Jakob Korherr commented on MYFACES-2561:
----------------------------------------

OK I finally solved the MethodExpression problem. This was really not easy to think through. An explanation and the patch will come later.. ;)

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