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

Reply via email to