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 2017/03/06 14:44:37 UTC
cxf git commit: [CXF-7267] Support for the case where BeanParam field
names do not match the setter names
Repository: cxf
Updated Branches:
refs/heads/master b1c6125f5 -> ad18f5aef
[CXF-7267] Support for the case where BeanParam field names do not match the setter names
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/ad18f5ae
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/ad18f5ae
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/ad18f5ae
Branch: refs/heads/master
Commit: ad18f5aef28eb82d613b3f4226b2ddae19b6415f
Parents: b1c6125
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Mon Mar 6 14:44:21 2017 +0000
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Mon Mar 6 14:44:21 2017 +0000
----------------------------------------------------------------------
.../cxf/jaxrs/client/ClientProxyImpl.java | 48 +++++++++++++++-----
.../org/apache/cxf/systest/jaxrs/BookStore.java | 6 +--
2 files changed, 39 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/ad18f5ae/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
----------------------------------------------------------------------
diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
index 04a112d..7362b71 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
@@ -523,18 +523,19 @@ public class ClientProxyImpl extends AbstractClient implements
private Map<String, BeanPair> getValuesFromBeanParam(Object bean,
Class<? extends Annotation> annClass,
Map<String, BeanPair> values) {
+ boolean completeFieldIntrospectionNeeded = false;
for (Method m : bean.getClass().getMethods()) {
if (m.getName().startsWith("set")) {
try {
String propertyName = m.getName().substring(3);
- Annotation annotation = m.getAnnotation(annClass);
+ Annotation methodAnnotation = m.getAnnotation(annClass);
boolean beanParam = m.getAnnotation(BeanParam.class) != null;
- if (annotation != null || beanParam) {
+ if (methodAnnotation != null || beanParam) {
Method getter = bean.getClass().getMethod("get" + propertyName, new Class[]{});
Object value = getter.invoke(bean, new Object[]{});
if (value != null) {
- if (annotation != null) {
- String annotationValue = AnnotationUtils.getAnnotationValue(annotation);
+ if (methodAnnotation != null) {
+ String annotationValue = AnnotationUtils.getAnnotationValue(methodAnnotation);
values.put(annotationValue, new BeanPair(value, m.getParameterAnnotations()[0]));
} else {
getValuesFromBeanParam(value, annClass, values);
@@ -544,16 +545,11 @@ public class ClientProxyImpl extends AbstractClient implements
String fieldName = StringUtils.uncapitalize(propertyName);
Field f = InjectionUtils.getDeclaredField(bean.getClass(), fieldName);
if (f == null) {
+ completeFieldIntrospectionNeeded = true;
continue;
}
- annotation = f.getAnnotation(annClass);
- if (annotation != null) {
- Object value = ReflectionUtil.accessDeclaredField(f, bean, Object.class);
- if (value != null) {
- String annotationValue = AnnotationUtils.getAnnotationValue(annotation);
- values.put(annotationValue, new BeanPair(value, f.getAnnotations()));
- }
- } else if (f.getAnnotation(BeanParam.class) != null) {
+ boolean jaxrsParamAnnAvailable = getValuesFromBeanParamField(bean, f, annClass, values);
+ if (!jaxrsParamAnnAvailable && f.getAnnotation(BeanParam.class) != null) {
Object value = ReflectionUtil.accessDeclaredField(f, bean, Object.class);
if (value != null) {
getValuesFromBeanParam(value, annClass, values);
@@ -564,10 +560,38 @@ public class ClientProxyImpl extends AbstractClient implements
// ignore
}
}
+ if (completeFieldIntrospectionNeeded) {
+ for (Field f : bean.getClass().getDeclaredFields()) {
+ boolean jaxrsParamAnnAvailable = getValuesFromBeanParamField(bean, f, annClass, values);
+ if (!jaxrsParamAnnAvailable && f.getAnnotation(BeanParam.class) != null) {
+ Object value = ReflectionUtil.accessDeclaredField(f, bean, Object.class);
+ if (value != null) {
+ getValuesFromBeanParam(value, annClass, values);
+ }
+ }
+ }
+ }
}
return values;
}
+ private boolean getValuesFromBeanParamField(Object bean,
+ Field f,
+ Class<? extends Annotation> annClass,
+ Map<String, BeanPair> values) {
+ boolean jaxrsParamAnnAvailable = false;
+ Annotation fieldAnnotation = f.getAnnotation(annClass);
+ if (fieldAnnotation != null) {
+ jaxrsParamAnnAvailable = true;
+ Object value = ReflectionUtil.accessDeclaredField(f, bean, Object.class);
+ if (value != null) {
+ String annotationValue = AnnotationUtils.getAnnotationValue(fieldAnnotation);
+ values.put(annotationValue, new BeanPair(value, f.getAnnotations()));
+ }
+ }
+ return jaxrsParamAnnAvailable;
+ }
+
private void handleMatrixes(Method m,
Object[] params,
MultivaluedMap<ParameterType, Parameter> map,
http://git-wip-us.apache.org/repos/asf/cxf/blob/ad18f5ae/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
index 2424d40..dde2889 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
@@ -1873,7 +1873,7 @@ public class BookStore {
public static class BookBean2 {
private long id;
@QueryParam("id_2")
- private long id2;
+ private long mId2;
private long id3;
public long getId() {
return id;
@@ -1885,11 +1885,11 @@ public class BookStore {
}
public long getId2() {
- return id2;
+ return mId2;
}
public void setId2(long id2) {
- this.id2 = id2;
+ this.mId2 = id2;
}
@Context