From the stack, some code somewhere passes 'getCustomerNameForSorting' instead of 'customerNameForSorting' to Cayenne. Can it be a typo in the property name?
Andrus > On Jul 18, 2017, at 1:26 PM, Musall, Maik <m...@selbstdenker.ag> wrote: > > Yep. > >> Am 17.07.2017 um 17:50 schrieb Lon Varscsak <lon.varsc...@gmail.com>: >> >> Is your key “customerNameForSorting”? >> >> On Mon, Jul 17, 2017 at 7:40 AM, Musall, Maik <m...@selbstdenker.ag> wrote: >> >>> Hi John, >>> >>>> Am 17.07.2017 um 16:08 schrieb John Huss <johnth...@gmail.com>: >>>> >>>> Expressions will work with non-modeled properties as long as the methods >>>> look like getters - have the "get" prefix and no arguments. >>> >>> Unfortunately not: >>> >>> Caused by: java.lang.IllegalArgumentException: Property >>> 'getCustomerNameForSorting' is not readable >>> at org.apache.cayenne.reflect.BeanAccessor.<init>( >>> BeanAccessor.java:92) >>> at org.apache.cayenne.reflect.PropertyUtils.createSegmentAccessor( >>> PropertyUtils.java:115) >>> at org.apache.cayenne.reflect.PropertyUtils. >>> getOrCreateSegmentAccessor(PropertyUtils.java:102) >>> at org.apache.cayenne.reflect.PropertyUtils$PathAccessor. >>> getValue(PropertyUtils.java:232) >>> at org.apache.cayenne.reflect.PropertyUtils.getProperty( >>> PropertyUtils.java:124) >>> at org.apache.cayenne.CayenneDataObject.readSimpleProperty( >>> CayenneDataObject.java:161) >>> at org.apache.cayenne.CayenneDataObject.readNestedProperty( >>> CayenneDataObject.java:127) >>> at org.apache.cayenne.CayenneDataObject.readNestedProperty( >>> CayenneDataObject.java:147) >>> at org.apache.cayenne.exp.parser.ASTObjPath.evaluateNode( >>> ASTObjPath.java:60) >>> at org.apache.cayenne.exp.parser.SimpleNode.evaluate( >>> SimpleNode.java:417) >>> >>> Signature is: public String getCustomerNameForSorting() >>> >>> >>>> But I would use this: >>>> >>>> Collections.sort(list, (a,b) -> a.getSomeProp().compareTo(b. >>> getSomeProp())); >>> >>> Thought of that, but it would require me to re-implement the path segment >>> tokenization and everything. >>> >>> Maik >>> >>> >>>> On Mon, Jul 17, 2017 at 8:08 AM Musall, Maik <m...@selbstdenker.ag> >>> wrote: >>>> >>>>> Hi all, >>>>> >>>>> I have a UI with a list of objects and user-configurable filters and >>>>> sorting criteria. Most of the sorting criteria are plain db path >>>>> expressions, so I can just feed them into Ordering.orderedList(objects). >>>>> >>>>> A couple of them however are path expressions with the last segment >>> being >>>>> not a Property, but a method name that is supposed to be invoked, which >>>>> would then return a String, after which the list is to be ordered. This >>>>> worked fine in the past using EOF and EOSortOrdering, but Cayenne's >>>>> ordering throws an ExpressionException on evaluate(). >>>>> >>>>> What is the usual way in Cayenne to deal with this? >>>>> >>>>> Thanks >>>>> Maik >>>>> >>>>> >>> >>> >