Wow, Mark, good guess! That's it. Added a get… method around each part of the path's accessed methods, and it works. Didn't occur to me at all, because those methods are not getters in the strict sense. But I could have discovered this before, by looking at the BeanAcccessor implementation. Dang.
I suppose there is no way in Cayenne to inject a different behaviour for this, through DI or something? It doesn't look like it from the code (BeanAccessor, PropertyUtils, and the readSimpleProperty() method in CayennDataObject is even marked final). Because I know I will run into this again and again, given the existing large code base. Maik > Am 15.04.2017 um 23:18 schrieb Mark Wardle <m...@wardle.org>: > > Can't try it as only have phone at the moment but have you tried adding "get" > as a prefix to your method declaration? > > I still find it difficult to not name getters without the get. > > -- > Dr. Mark Wardle > Consultant Neurologist, Cardiff, UK > (Sent from my mobile) > > >> On 13 Apr 2017, at 10:44, Musall, Maik <m...@selbstdenker.ag> wrote: >> >> Hi John, >> >> can you elaborate that on this example? >> >> Previously, I did this to filter: >> >> result = ExpressionFactory.matchExp( filterPath, filterValue >> ).filterObjects( result ); >> >> Now I tried: >> >> result = result.stream() >> .filter( obj -> PropertyUtils.getProperty( obj, filterPath ).equals( >> filterValue ) ) >> .collect( Collectors.toList() ); >> >> Both times, I get: >> >> java.lang.IllegalArgumentException: Property 'responsibleUser' is not >> readable >> >> where "result" is like a List<Foo> with Foo being a DataObject that has a >> method called "responsibleUser", returning another DataObject subclass. >> >> Maik >> >> >>> Am 12.04.2017 um 19:11 schrieb John Huss <johnth...@gmail.com>: >>> >>> Ok, you can use property utils in conjunction to call a method using >>> reflection (with a string name) >>>> On Wed, Apr 12, 2017 at 6:07 PM Musall, Maik <m...@selbstdenker.ag> wrote: >>>> >>>> Hi John, >>>> >>>> how do you mean that? Those filter paths come from the UI, passed on by >>>> the user assembling filter criteria. I wouldn't use string filter paths if >>>> the criteria would be constant. >>>> >>>> Maik >>>> >>>>> Am 12.04.2017 um 19:03 schrieb John Huss <johnth...@gmail.com>: >>>>> >>>>> Just use a java 8 stream and lambda in addition or instead of. >>>>> On Wed, Apr 12, 2017 at 4:48 PM Musall, Maik <m...@selbstdenker.ag> >>>> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> when filtering a list of objects by expression.filterObjects( list ), is >>>>>> there a way for the expression to access regular methods instead of >>>> Cayenne >>>>>> db properties? >>>>>> >>>>>> Use Case: I have a class A that has several relationships to class B, >>>> and >>>>>> it depends on a number of factors which is relevant in this case. So >>>> there >>>>>> is a method that returns either this or that relation to class B. I >>>> would >>>>>> like to include the method name in the expression path. (This was >>>> possible >>>>>> in EOF, and I just found that it doesn't work in Cayenne.) >>>>>> >>>>>> Thanks >>>>>> Maik >>>>>> >>>>>> >>>> >>>> >>