You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/12/19 18:17:05 UTC

svn commit: r1552359 - in /cxf/trunk/rt/rs/extensions/search/src: main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java

Author: sergeyb
Date: Thu Dec 19 17:17:05 2013
New Revision: 1552359

URL: http://svn.apache.org/r1552359
Log:
[CXF-5449] Updating FiqlParser to better deal with the deeply nested queries

Modified:
    cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
    cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java

Modified: cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java?rev=1552359&r1=1552358&r2=1552359&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java Thu Dec 19 17:17:05 2013
@@ -383,7 +383,7 @@ public class FiqlParser<T> implements Se
                 boolean lastTry = names.length == 2 
                     && (isPrimitive || returnType == Date.class || returnCollection);
                 
-                Object valueObject = lastTry && ownerBean != null ? ownerBean 
+                Object valueObject = ownerBean != null ? ownerBean 
                     : actualType.isInterface() 
                     ? Proxy.newProxyInstance(this.getClass().getClassLoader(), 
                                              new Class[]{actualType}, 
@@ -411,18 +411,25 @@ public class FiqlParser<T> implements Se
                 Method setterM = actualType.getMethod("set" + nextPart, new Class[]{returnType});
                 setterM.invoke(valueObject, new Object[]{nextObject});
                 
-                lastCastedValue = lastCastedValue == null ? valueObject : lastCastedValue;
                 if (lastTry) {
+                    lastCastedValue = lastCastedValue == null ? valueObject : lastCastedValue;
                     return isCollection ? getCollectionSingleton(valueType, lastCastedValue) : lastCastedValue;
-                } 
+                } else {
+                    lastCastedValue = valueObject;
+                }
                 
                 TypeInfo nextTypeInfo = new TypeInfo(nextObject.getClass(), getterM.getGenericReturnType()); 
-                return parseType(originalPropName,
+                Object response = parseType(originalPropName,
                                  nextObject, 
                                  lastCastedValue, 
                                  setter.substring(index + 1), 
                                  nextTypeInfo, 
                                  value);
+                if (ownerBean == null) {
+                    return isCollection ? getCollectionSingleton(valueType, lastCastedValue) : lastCastedValue;
+                } else {
+                    return response;
+                }
             } catch (Throwable e) {
                 throw new SearchParseException("Cannot convert String value \"" + value
                                                + "\" to a value of class " + valueType.getName(), e);

Modified: cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java?rev=1552359&r1=1552358&r2=1552359&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java (original)
+++ cxf/trunk/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java Thu Dec 19 17:17:05 2013
@@ -199,6 +199,20 @@ public class JPATypedQueryVisitorTest ex
     }
     
     @Test
+    public void testQueryCollection2() throws Exception {
+        List<Book> books = 
+            queryBooks("reviews.book.id==10");
+        assertEquals(1, books.size());
+    }
+    
+    @Test
+    public void testQueryCollection3() throws Exception {
+        List<Book> books = 
+            queryBooks("reviews.book.ownerInfo.name==Barry");
+        assertEquals(1, books.size());
+    }
+    
+    @Test
     public void testQueryElementCollection() throws Exception {
         List<Book> books = 
             queryBooks("authors==John");