myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <...@myfaces.apache.org>
Subject [jira] Commented: (MYFACES-2561) StackOverflowError if a composite component implementation uses another composite component
Date Thu, 18 Feb 2010 16:04:28 GMT

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


Mime
View raw message