[jira] [Commented] (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13424831#comment-13424831 ] marco fago commented on MYFACES-2561: - There is still a case in which this solution won't work. Consider the component test 1 above slightly modified: cc:interface name=test1 cc:attribute name=test required=true / /cc:interface cc:implementation test1 t2:test2 test=#{myLibrary:myFunction(...) or cc.attrs.test} / /cc:implementation In that case the regex expression looking for cc.attrs will exclude the expression because cc.attrs is preceded by a left parenthesis (as stated in CompositeComponentELUtils). Changing to t2:test2 test=#{cc.attrs.test or myLibrary:myFunction(...)} / will work. Tested on Myfaces 2.1.8. StackOverflowError if a composite component implementation uses another composite component --- Key: MYFACES-2561 URL: https://issues.apache.org/jira/browse/MYFACES-2561 Project: MyFaces Core Issue Type: Bug Components: JSR-314 Affects Versions: 2.0.0-beta-3 Reporter: Jakob Korherr Assignee: Jakob Korherr Fix For: 2.0.0-beta-3 Attachments: MYFACES-2561-2.patch, MYFACES-2561.patch, test.xhtml, test1.xhtml, test2.xhtml If you use another composite component in your composite component's implementation you will get a StackOverflowError. javax.faces.FacesException: java.lang.StackOverflowError at org.apache.myfaces.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241) at org.apache.myfaces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:216) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:637) Caused by: java.lang.StackOverflowError at java.util.ArrayList.toArray(ArrayList.java:306) at java.util.logging.Logger.getHandlers(Logger.java:1200) at java.util.logging.LogManager$RootLogger.getHandlers(LogManager.java:1019) at java.util.logging.Logger.log(Logger.java:454) at java.util.logging.Logger.doLog(Logger.java:480) at java.util.logging.Logger.logp(Logger.java:680) at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:167) at org.apache.juli.logging.DirectJDKLog.error(DirectJDKLog.java:135) at org.apache.catalina.connector.Request.setAttribute(Request.java:1448) at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503) at org.apache.myfaces.context.servlet.RequestMap.setAttribute(RequestMap.java:53) at org.apache.myfaces.util.AbstractAttributeMap.put(AbstractAttributeMap.java:113) at org.apache.myfaces.util.AbstractAttributeMap.put(AbstractAttributeMap.java:1) at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setScope(FacesCompositeELResolver.java:191) at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:139) at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61) at org.apache.el.parser.AstValue.getValue(AstValue.java:107) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:84) at org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.get(CompositeComponentELResolver.java:245) at javax.el.MapELResolver.getValue(MapELResolver.java:51) at
[jira] [Commented] (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13424836#comment-13424836 ] Leonardo Uribe commented on MYFACES-2561: - It is another different problem that the one described here ( regex for cc.attrs doesn't take into account start with left parenthesis ). Don't create a clone, because the original issue has been fixed long time ago. Instead, create a new issue and reference 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 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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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)
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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)
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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
[jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
[ https://issues.apache.org/jira/browse/MYFACES-2561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=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