If you can create an xwork ticket and attach a patch it will be appreciated :)
musachy On Mon, Feb 16, 2009 at 5:52 AM, Adam Hardy <ahardy.str...@cyberspaceroad.com> wrote: > I figured out how to get my struts-default.xml to be loaded, in case you > were going tell me how after I asked :O > > Consequently discovered that XWorkCollectionPropertyAccessor is actually > compiled into Struts2 / XWork to allow work-arounds for OGNL, so it's not > configurable. > > I'll build my own struts jar with modified source. > > > Adam Hardy on 16/02/09 09:40, wrote: >> >> I use Sets too and they're not the problem here. >> >> The reason why this bug occurs is because the proxy that is returned by my >> entity bean is not recognised as an ArrayList by OGNL. Rather OGNL sees it >> as a Collection. I guess this is just a rare situation and a difficult one >> to follow. In this context on a stand-alone OGNL basis, it's not a problem. >> >> The problem is that struts.xml in the struts jar configures ognl to use >> XWorkCollectionPropertyAccessor for Collections and this class is badly >> mis-named. It is unable to deal with Collections that are Lists, because it >> extends ognl.SetPropertyAccessor which casts the Collection to a Set, >> causing a ClassCastException when acting on a List. >> >> In fact there is no ognl.CollectionPropertyAccessor so I created one and >> for now I'm going to override struts-default.xml to set OGNL to use my own >> XWorkCollectionPropertyAccessor. >> >> I appreciate that this is an edge case, but if you look at struts-default, >> you'll see the bean for type ognl.PropertyAccessor name=java.util.Collection >> and name=java.util.Set are the same and you'll appreciate the problem >> straight away when you look at the base class ognl.SetPropertAccessor. >> >> I'd be happy to enter a Jira, but the question is where: OGNL, XWork or >> Struts? >> >> Actually I'm having problems getting my version of struts-default.xml to >> be read. I thought I had to reference the file in struts.properties and have >> both in my classpath: >> >> struts.configuration.files = atomic-struts-default.xml >> >> but that doesn't work. >> >> >> Musachy Barroso on 16/02/09 00:24, wrote: >>> >>> It could be a bug, but I doubt it, I have used sets before and it >>> works. Just as a test, try returning an empty HashSet from your >>> method, instead of the proxy that it is returning now, and see if that >>> works. >>> >>> musachy >>> >>> On Sun, Feb 15, 2009 at 7:14 PM, Adam Hardy >>> <ahardy.str...@cyberspaceroad.com> wrote: >>>> >>>> Correct me if I'm wrong but this looks like a fundamental class >>>> mismatch. >>>> >>>> I can see in struts-default.xml that both Sets and Collections are >>>> configured to be accessed by the same PropertyAccessor. >>>> >>>> From debugging, I can see OGNL picks the PropertyAccessor for >>>> Collections to >>>> deal with my target property. Logical, since the ArrayList is an >>>> implementation of Collection. >>>> >>>> The problem is that struts has registered >>>> XWorkCollectionPropertyAccessor as >>>> the PropertyAccessor for Collections, but this extends >>>> ognl.SetPropertyAccessor which tries to cast the property to >>>> java.util.Set >>>> with the resulting ClassCastException. >>>> >>>> I noticed in an xwork jira that this seems to have happened before: >>>> >>>> http://jira.opensymphony.com/browse/XW-310 >>>> >>>> but that's fixed - unfortunately not helping me though. >>>> >>>> I can work around this by copying XWorkCollectionPropertyAccessor and >>>> writing a method to deal with Collections rather than Sets, but this is >>>> surely a bug. I'm just wondering why no-one else is suffering with it. >>>> >>>> >>>> >>>> >>>> Adam Hardy on 14/02/09 13:35, wrote: >>>>> >>>>> Yes, it is a JPA entity bean proxied by OpenJPA. >>>>> >>>>> It has a list property - the bean is a parent in a parent-child >>>>> relationship and this property is the list of children. >>>>> >>>>> This is the incoming HTTP parameter: >>>>> >>>>> portfolio.weightings[0]=123 >>>>> >>>>> Despite debugging it I am still not sure what has happened but I do see >>>>> that OgnlRuntime looks up the appropriate PropertyAccessor in a map, >>>>> and >>>>> gets the wrong one back (SetPropertyAccessor instead of >>>>> ListPropertyAccessor). >>>>> >>>>> Is there anything I can do to influence that? >>>>> >>>>> >>>>> Regards >>>>> Adam >>>>> >>>>> Musachy Barroso on 13/02/09 17:10, wrote: >>>>>> >>>>>> It seems like it is not a list but a proxy to it >>>>>> "org.apache.openjpa.util.java$util$ArrayList$proxy" which could be the >>>>>> root of the problem. >>>>>> >>>>>> musachy >>>>>> >>>>>> On Fri, Feb 13, 2009 at 12:00 PM, Adam Hardy >>>>>> <ahardy.str...@cyberspaceroad.com> wrote: >>>>>>> >>>>>>> I have a situation where OGNL seems to be misinterpreting the class >>>>>>> of >>>>>>> the >>>>>>> HTTP parameter property it is setting during the ParameterInterceptor >>>>>>> call. >>>>>>> >>>>>>> As you can see from the exception message, the object is an ArrayList >>>>>>> and >>>>>>> certainly not a Set which OGNL thinks it is. I have double, triple >>>>>>> and >>>>>>> quadruple checked that I am not using a Set at this point. >>>>>>> >>>>>>> How and where is OGNL deciding that this is a Set? And can I >>>>>>> configure >>>>>>> it? >>>>>>> >>>>>>> The HTTP parameter is 'myParameter[0]' and the List is a generic, >>>>>>> assuming >>>>>>> that makes a difference. >>>>>>> >>>>>>> >>>>>>> java.lang.ClassCastException: >>>>>>> org.apache.openjpa.util.java$util$ArrayList$proxy cannot be cast to >>>>>>> java.util.Set >>>>>>> at >>>>>>> ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:46) >>>>>>> at >>>>>>> >>>>>>> >>>>>>> com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty(XWorkCollectionPropertyAccessor.java:80) >>>>>>> at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643) >>>>>>> at ognl.ASTProperty.getValueBody(ASTProperty.java:92) >>>>>>> at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) >>>>>>> at ognl.SimpleNode.getValue(SimpleNode.java:210) > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > -- "Hey you! Would you help me to carry the stone?" Pink Floyd --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org