Hi
On 07/05/13 14:52, Diether wrote:
Hi,

I think I found a problem when using a beanPropertiesMap for the
searchcontext and when using such a map with a JPATypedQueryVisitor
Let's say we have to following (simplified) Domain objects:

public class Order(){
        private String orderName;
        private List<PartInfo>  partInfos
        //Getters and setters omitted
}

public class PartInfo(){
        private String partDescription;
        //Getters and setters omitted           
}


And defined a map with the properties as follows:
Map<String, String>  backendBeanPropertiesMap<String, String>();
backendBeanPropertiesMap.put("ordername", "orderName");                         
                    //value same
as property on Order Object
backendBeanPropertiesMap.put("partdescription",
"partInfos.partDescription");         //value same as property on Order and
OrderInfo object


If we then call eg http://localhost:8080/current?_s=partdescription==X
The incomingFilter is retrieved and passed to our backend to find the
matching records in the database:

public List<Order>  findOrders(AndSearchCondition<Order>  filter) {
        SearchConditionVisitor<Order, TypedQuery&lt;Order>>  visitor = new
JPATypedQueryVisitor<Order>(getEntityManager(), Order.class,
backendBeanPropertiesMap);
        if (filter != null) {
                List<SearchCondition&lt;Order>>  conditions = 
filter.getSearchConditions();
                if (conditions != null) {
                        filter.accept(visitor);
                        TypedQuery<Order>  query = visitor.getQuery();
                        return query.getResultList();
                }
        }
        return null;
}

In our REST interface we do the following to retrieve the filter:
SearchCondition<Order>  incomingFilter =
searchContext.getCondition(Order.class, beanPropertiesMap);
And this filter is passed to the backend.
But I noticed that I cannot use the same beanPropertiesMap for this.
There is a difference in the required casing. This is what is required to
allow this to work:
Map<String, String>  beanPropertiesMap<String, String>();
beanPropertiesMap.put("ordername", "ordername");                                
            //Value lowercase
ordername, even thoug the property is called orderName
beanPropertiesMap.put("partdescription", "partInfos.partDescription");
//Value same as property name on objects for some reason...


So it seems that the problem is withing the
searchContext.getCondition(Order.class, beanPropertiesMap);
Which handles the casing differently.
If I would use the backendPropertiesMap for this the incomingFilter is
always null.

It would be a lot easier if I could just use the same map.

Please note that I am very new to FIQL and CFX, and I inherited this project
from an ex-collegue.


I believe I've got this issue fixed for CXF 2.6.8-SNAPSHOT. Can you try the SNAPSHOT please ? Or CXF 2.7.6-SNAPSHOT (2.7.5 is being voted upon now)...

Thanks, Sergey




--
View this message in context: 
http://cxf.547215.n5.nabble.com/Problem-with-bean-properties-Map-for-searchContext-and-JPATypedQueryVisitor-tp5727354.html
Sent from the cxf-user mailing list archive at Nabble.com.


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to