You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/07/23 15:20:00 UTC
svn commit: r1364624 -
/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java
Author: lukaszlenart
Date: Mon Jul 23 13:20:00 2012
New Revision: 1364624
URL: http://svn.apache.org/viewvc?rev=1364624&view=rev
Log:
WW-3822 adds check if setter was defined as this can be read-only property
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java?rev=1364624&r1=1364623&r2=1364624&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java Mon Jul 23 13:20:00 2012
@@ -47,12 +47,10 @@ import java.util.Map;
* and will be removed eventually.
*
* <!-- END SNIPPET: javadoc -->
- *
*
* @author Gabriel Zimmerman
*/
public class DefaultObjectTypeDeterminer implements ObjectTypeDeterminer {
-
protected static final Logger LOG = LoggerFactory.getLogger(DefaultObjectTypeDeterminer.class);
@@ -61,17 +59,16 @@ public class DefaultObjectTypeDeterminer
public static final String KEY_PROPERTY_PREFIX = "KeyProperty_";
public static final String CREATE_IF_NULL_PREFIX = "CreateIfNull_";
public static final String DEPRECATED_ELEMENT_PREFIX = "Collection_";
-
+
private ReflectionProvider reflectionProvider;
private XWorkConverter xworkConverter;
-
+
@Inject
public DefaultObjectTypeDeterminer(@Inject XWorkConverter conv, @Inject ReflectionProvider prov) {
this.reflectionProvider = prov;
this.xworkConverter = conv;
-
}
-
+
/**
* Determines the key class by looking for the value of @Key annotation for the given class.
* If no annotation is found, the key class is determined by using the generic parametrics.
@@ -85,21 +82,16 @@ public class DefaultObjectTypeDeterminer
*/
public Class getKeyClass(Class parentClass, String property) {
Key annotation = getAnnotation(parentClass, property, Key.class);
-
if (annotation != null) {
return annotation.value();
}
-
Class clazz = getClass(parentClass, property, false);
-
if (clazz != null) {
return clazz;
}
-
return (Class) xworkConverter.getConverter(parentClass, KEY_PREFIX + property);
}
-
/**
* Determines the element class by looking for the value of @Element annotation for the given
* class.
@@ -114,32 +106,23 @@ public class DefaultObjectTypeDeterminer
*/
public Class getElementClass(Class parentClass, String property, Object key) {
Element annotation = getAnnotation(parentClass, property, Element.class);
-
if (annotation != null) {
return annotation.value();
}
-
Class clazz = getClass(parentClass, property, true);
-
if (clazz != null) {
return clazz;
}
-
clazz = (Class) xworkConverter.getConverter(parentClass, ELEMENT_PREFIX + property);
-
if (clazz == null) {
- clazz = (Class) xworkConverter
- .getConverter(parentClass, DEPRECATED_ELEMENT_PREFIX + property);
-
+ clazz = (Class) xworkConverter.getConverter(parentClass, DEPRECATED_ELEMENT_PREFIX + property);
if (LOG.isInfoEnabled() && clazz != null) {
LOG.info("The Collection_xxx pattern for collection type conversion is deprecated. Please use Element_xxx!");
}
}
return clazz;
-
}
-
/**
* Determines the key property for a Collection by getting it from the @KeyProperty annotation.
*
@@ -152,15 +135,12 @@ public class DefaultObjectTypeDeterminer
*/
public String getKeyProperty(Class parentClass, String property) {
KeyProperty annotation = getAnnotation(parentClass, property, KeyProperty.class);
-
if (annotation != null) {
return annotation.value();
}
-
return (String) xworkConverter.getConverter(parentClass, KEY_PROPERTY_PREFIX + property);
}
-
/**
* Determines the createIfNull property for a Collection or Map by getting it from the @CreateIfNull annotation.
*
@@ -175,21 +155,14 @@ public class DefaultObjectTypeDeterminer
* @return <tt>true</tt>, if the Collection or Map should be created, <tt>false</tt> otherwise.
* @see ObjectTypeDeterminer#getKeyProperty(Class, String)
*/
- public boolean shouldCreateIfNew(Class parentClass,
- String property,
- Object target,
- String keyProperty,
- boolean isIndexAccessed) {
-
+ public boolean shouldCreateIfNew(Class parentClass, String property, Object target, String keyProperty, boolean isIndexAccessed) {
CreateIfNull annotation = getAnnotation(parentClass, property, CreateIfNull.class);
-
if (annotation != null) {
return annotation.value();
}
-
String configValue = (String) xworkConverter.getConverter(parentClass, CREATE_IF_NULL_PREFIX + property);
//check if a value is in the config
- if (configValue!=null) {
+ if (configValue != null) {
if ("true".equalsIgnoreCase(configValue)) {
return true;
}
@@ -201,12 +174,7 @@ public class DefaultObjectTypeDeterminer
//default values depend on target type
//and whether this is accessed by an index
//in the case of List
- if ((target instanceof Map) || isIndexAccessed) {
- return true;
- } else {
- return false;
- }
-
+ return (target instanceof Map) || isIndexAccessed;
}
/**
@@ -243,19 +211,17 @@ public class DefaultObjectTypeDeterminer
* @param annotationClass The annotation
* @return concrete Annotation instance or <tt>null</tt> if none could be retrieved.
*/
- private <T extends Annotation>T getAnnotationFromGetter(Class parentClass, String property, Class<T> annotationClass) {
+ private <T extends Annotation> T getAnnotationFromGetter(Class parentClass, String property, Class<T> annotationClass) {
try {
Method getter = reflectionProvider.getGetMethod(parentClass, property);
if (getter != null) {
return getter.getAnnotation(annotationClass);
}
- }
- catch (ReflectionException ognle) {
- ; // ignore
- }
- catch (IntrospectionException ie) {
- ; // ignore
+ } catch (ReflectionException ognle) {
+ // ignore
+ } catch (IntrospectionException ie) {
+ // ignore
}
return null;
}
@@ -268,19 +234,17 @@ public class DefaultObjectTypeDeterminer
* @param annotationClass The annotation
* @return concrete Annotation instance or <tt>null</tt> if none could be retrieved.
*/
- private <T extends Annotation>T getAnnotationFromSetter(Class parentClass, String property, Class<T> annotationClass) {
+ private <T extends Annotation> T getAnnotationFromSetter(Class parentClass, String property, Class<T> annotationClass) {
try {
Method setter = reflectionProvider.getSetMethod(parentClass, property);
if (setter != null) {
return setter.getAnnotation(annotationClass);
}
- }
- catch (ReflectionException ognle) {
- ; // ignore
- }
- catch (IntrospectionException ie) {
- ; // ignore
+ } catch (ReflectionException ognle) {
+ // ignore
+ } catch (IntrospectionException ie) {
+ // ignore
}
return null;
}
@@ -294,30 +258,22 @@ public class DefaultObjectTypeDeterminer
* @return Class of the specified field.
*/
private Class getClass(Class parentClass, String property, boolean element) {
-
-
try {
-
Field field = reflectionProvider.getField(parentClass, property);
-
Type genericType = null;
-
// Check fields first
if (field != null) {
genericType = field.getGenericType();
}
-
// Try to get ParameterType from setter method
if (genericType == null || !(genericType instanceof ParameterizedType)) {
try {
Method setter = reflectionProvider.getSetMethod(parentClass, property);
- genericType = setter.getGenericParameterTypes()[0];
- }
- catch (ReflectionException ognle) {
- ; // ignore
- }
- catch (IntrospectionException ie) {
- ; // ignore
+ genericType = setter != null ? setter.getGenericParameterTypes()[0] : null;
+ } catch (ReflectionException ognle) {
+ // ignore
+ } catch (IntrospectionException ie) {
+ // ignore
}
}
@@ -326,32 +282,24 @@ public class DefaultObjectTypeDeterminer
try {
Method getter = reflectionProvider.getGetMethod(parentClass, property);
genericType = getter.getGenericReturnType();
- }
- catch (ReflectionException ognle) {
- ; // ignore
- }
- catch (IntrospectionException ie) {
- ; // ignore
+ } catch (ReflectionException ognle) {
+ // ignore
+ } catch (IntrospectionException ie) {
+ // ignore
}
}
if (genericType instanceof ParameterizedType) {
-
-
ParameterizedType type = (ParameterizedType) genericType;
-
int index = (element && type.getRawType().toString().contains(Map.class.getName())) ? 1 : 0;
-
Type resultType = type.getActualTypeArguments()[index];
-
- if ( resultType instanceof ParameterizedType) {
+ if (resultType instanceof ParameterizedType) {
return (Class) ((ParameterizedType) resultType).getRawType();
}
return (Class) resultType;
-
}
} catch (Exception e) {
- if ( LOG.isDebugEnabled()) {
+ if (LOG.isDebugEnabled()) {
LOG.debug("Error while retrieving generic property class for property=" + property, e);
}
}