You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Kristian Marinkovic (JIRA)" <de...@tapestry.apache.org> on 2008/06/23 23:59:45 UTC

[jira] Issue Comment Edited: (TAPESTRY-2460) Nested BeanEditors (where the block parameter for a property to one BeanEditor contains another BeanEditor) results in a StackOverflowException

    [ https://issues.apache.org/jira/browse/TAPESTRY-2460?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12607392#action_12607392 ] 

kristian edited comment on TAPESTRY-2460 at 6/23/08 2:59 PM:
------------------------------------------------------------------------

hi howard,

i tested my beaneditor example with the latest codebase (svn 670759 and 670748) and i still got the same StackOverflowException. 

My test tries to simulate an example where the second BeanEditor receives its data from a PropertyEditContext object. it cannot access the child property directly because the block is defined in another page that contributes the required Blocks. 

i was not able to track down the problem myself, but i guess the problem is that the first BeanEditors' PropertyEditor passes the object to the PropertyEditContext by creating a conduit. Then the second BeanEditor tries to pass in the object as well by creating another conduit. and somehow the first conduit starts pointing to the second conduit (or the other way round). when i then submit the form the BeanEditor will try to read the object parameter by reading the conduit and thus starting the loop. 

As said, its just a guess. I already took a look at the cache inside the PropertyConduitSource but couldn't find anything. below is the stack trace i get

g,
kris

// the beginning of the stack trace is different
# rg.apache.tapestry5.ioc.util.CaseInsensitiveMap.caseInsenitiveHashCode(CaseInsensitiveMap.java:485)
# org.apache.tapestry5.ioc.util.CaseInsensitiveMap.select(CaseInsensitiveMap.java:390)
# org.apache.tapestry5.ioc.util.CaseInsensitiveMap.get(CaseInsensitiveMap.java:367)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.getBinding(InternalComponentResourcesImpl.java:284)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.isBound(InternalComponentResourcesImpl.java:158)
# org.apache.tapestry5.corelib.components.BeanEditor._$read_parameter_object(BeanEditor.java)
# org.apache.tapestry5.corelib.components.BeanEditor.getObject(BeanEditor.java:142)
# org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:237)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:252)
# org.apache.tapestry5.corelib.components.PropertyEditor._$read_parameter_object(PropertyEditor.java)
# org.apache.tapestry5.corelib.components.PropertyEditor.access$2(PropertyEditor.java:86)
# org.apache.tapestry5.corelib.components.PropertyEditor$1.getPropertyValue(PropertyEditor.java:166)
# org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:237)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:252)
# org.apache.tapestry5.corelib.components.BeanEditor._$read_parameter_object(BeanEditor.java)
# org.apache.tapestry5.corelib.components.BeanEditor.getObject(BeanEditor.java:142)
# org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:237)
# org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:252)
# org.apache.tapestry5.corelib.components.PropertyEditor._$read_parameter_object(PropertyEditor.java)
# org.apache.tapestry5.corelib.components.PropertyEditor.access$2(PropertyEditor.java:86)
# org.apache.tapestry5.corelib.components.PropertyEditor$1.getPropertyValue(PropertyEditor.java:166)
# org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)

  
> Nested BeanEditors (where the block parameter for a property to one BeanEditor contains another BeanEditor) results in a StackOverflowException
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TAPESTRY-2460
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2460
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.0.13
>            Reporter: Kristian Marinkovic
>            Assignee: Howard M. Lewis Ship
>             Fix For: 5.0.14
>
>         Attachments: beaneditor.zip
>
>
> the eclipse/maven example project shows how a StackOverflowException is thrown if a Form is submitted that contains a BeanEditor that itself contains another BeanEditor. However the initial display works perfectly.
> somehow i suspect the PropertyConduits to be responsible because two of them produce the infinite loop.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org