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();