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 2012/10/17 18:47:57 UTC

svn commit: r1399336 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/utils/ test/java/org/apache/cxf/jaxrs/ test/java/org/apache/cxf/jaxrs/model/wadl/ test/java/org/apache/cxf/jaxrs/utils/

Author: sergeyb
Date: Wed Oct 17 16:47:56 2012
New Revision: 1399336

URL: http://svn.apache.org/viewvc?rev=1399336&view=rev
Log:
[CXF-4580] Getting 'is' boolean getters supported

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1399336&r1=1399335&r2=1399336&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Wed Oct 17 16:47:56 2012
@@ -499,7 +499,8 @@ public final class InjectionUtils {
                         && m.getParameterTypes().length == 1) {
                         setter = m;
                     } else if (m.getName().equalsIgnoreCase("get" + memberKey)
-                        && m.getReturnType() != Void.TYPE) {
+                        || isBooleanType(m.getReturnType()) 
+                           && m.getName().equalsIgnoreCase("is" + memberKey)) {
                         getter = m;
                     }
                     if (setter != null && getter != null) {
@@ -996,12 +997,25 @@ public final class InjectionUtils {
         return values;
     }
     
+    private static boolean isBooleanType(Class<?> cls) {
+        return boolean.class == cls || Boolean.class == cls;
+    }
+    
     public static void fillInValuesFromBean(Object bean, String baseName, 
                                             MultivaluedMap<String, Object> values) {
         for (Method m : bean.getClass().getMethods()) {
-            if (m.getName().startsWith("get") && m.getParameterTypes().length == 0 
-                && m.getName().length() > 3) {
-                String propertyName = m.getName().substring(3);
+            String methodName = m.getName(); 
+            boolean startsFromGet = methodName.startsWith("get");
+            if ((startsFromGet 
+                || isBooleanType(m.getReturnType()) && methodName.startsWith("is")) 
+                && m.getParameterTypes().length == 0) {
+                
+                int minLen = startsFromGet ? 3 : 2; 
+                if (methodName.length() <= minLen) {
+                    continue;
+                }
+                
+                String propertyName =  methodName.substring(minLen);
                 if (propertyName.length() == 1) {
                     propertyName = propertyName.toLowerCase();
                 } else {
@@ -1047,9 +1061,17 @@ public final class InjectionUtils {
                                                                       boolean checkIgnorable) {
         Map<Parameter, Class<?>> params = new LinkedHashMap<Parameter, Class<?>>();
         for (Method m : beanClass.getMethods()) {
-            if (m.getName().startsWith("get") && m.getParameterTypes().length == 0 
-                && m.getName().length() > 3) {
-                String propertyName = m.getName().substring(3).toLowerCase();
+            String methodName = m.getName(); 
+            boolean startsFromGet = methodName.startsWith("get");
+            if ((startsFromGet 
+                || isBooleanType(m.getReturnType()) && methodName.startsWith("is")) 
+                && m.getParameterTypes().length == 0) {
+                
+                int minLen = startsFromGet ? 3 : 2; 
+                if (methodName.length() <= minLen) {
+                    continue;
+                }
+                String propertyName = methodName.substring(minLen).toLowerCase();
                 if (m.getReturnType() == Class.class
                     || checkIgnorable && canPropertyBeIgnored(m, propertyName)) {
                     continue;

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java?rev=1399336&r1=1399335&r2=1399336&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java Wed Oct 17 16:47:56 2012
@@ -77,6 +77,7 @@ public class Customer extends AbstractCu
     public static class CustomerBean implements CustomerBeanInterface {
         private String a;
         private Long b;
+        private boolean cb;
         private List<String> c;
         private CustomerBean d;
         private Map<String, List<String>> g;
@@ -114,6 +115,12 @@ public class Customer extends AbstractCu
         public Map<String, List<String>> getG() {
             return g;
         }
+        public boolean isCb() {
+            return cb;
+        }
+        public void setCb(boolean cb) {
+            this.cb = cb;
+        }
         
     }
     

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java?rev=1399336&r1=1399335&r2=1399336&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java Wed Oct 17 16:47:56 2012
@@ -208,10 +208,10 @@ public class BookStore {
     }
     
     public static class QueryBean3 {
-        private int a;
+        private boolean a;
         private int b;
         
-        public int getA() {
+        public boolean isA() {
             return a;
         }
         

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java?rev=1399336&r1=1399335&r2=1399336&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java Wed Oct 17 16:47:56 2012
@@ -570,7 +570,7 @@ public class WadlGeneratorTest extends A
                          new Param("a", "query", "xs:int"),
                          new Param("c.a", "query", "xs:int"),
                          new Param("c.b", "query", "xs:int"),
-                         new Param("c.d.a", "query", "xs:int"),
+                         new Param("c.d.a", "query", "xs:boolean"),
                          new Param("e", "query", "xs:string", Collections.singleton("A")));
         
         assertEquals(0, DOMUtils.getChildrenWithName(requestEls.get(0), 

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1399336&r1=1399335&r2=1399336&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Wed Oct 17 16:47:56 2012
@@ -1095,6 +1095,30 @@ public class JAXRSUtilsTest extends Asse
     }
     
     @Test
+    public void testFormParametersBeanWithBoolean() throws Exception {
+        Class<?>[] argType = {Customer.CustomerBean.class};
+        Method m = Customer.class.getMethod("testFormBean", argType);
+        MessageImpl messageImpl = new MessageImpl();
+        messageImpl.put(Message.REQUEST_URI, "/bar");
+        MultivaluedMap<String, String> headers = new MetadataMap<String, String>();
+        headers.putSingle("Content-Type", MediaType.APPLICATION_FORM_URLENCODED);
+        messageImpl.put(Message.PROTOCOL_HEADERS, headers);
+        String body = "a=aValue&b=123&cb=true";
+        messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
+        
+        List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+                                                           null, 
+                                                           messageImpl);
+        assertEquals("Bean should be created", 1, params.size());
+        Customer.CustomerBean cb = (Customer.CustomerBean)params.get(0);
+        assertNotNull(cb);
+        
+        assertEquals("aValue", cb.getA());
+        assertEquals(new Long(123), cb.getB());
+        assertTrue(cb.isCb());
+    }
+    
+    @Test
     public void testFormParametersBean() throws Exception {
         Class<?>[] argType = {Customer.CustomerBean.class};
         Method m = Customer.class.getMethod("testFormBean", argType);
@@ -1103,7 +1127,7 @@ public class JAXRSUtilsTest extends Asse
         MultivaluedMap<String, String> headers = new MetadataMap<String, String>();
         headers.putSingle("Content-Type", MediaType.APPLICATION_FORM_URLENCODED);
         messageImpl.put(Message.PROTOCOL_HEADERS, headers);
-        String body = "a=aValue&b=123";
+        String body = "a=aValue&b=123&cb=true";
         messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
 
         MessageImpl complexMessageImpl = new MessageImpl();