You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2012/09/17 18:09:28 UTC
svn commit: r1386687 -
/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
Author: mbenson
Date: Mon Sep 17 16:09:28 2012
New Revision: 1386687
URL: http://svn.apache.org/viewvc?rev=1386687&view=rev
Log:
code audit: data integrity; removed a useless/misleading protected method (pre 1.0); DRY; unnecessary else; etc.
Modified:
bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
Modified: bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java?rev=1386687&r1=1386686&r2=1386687&view=diff
==============================================================================
--- bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java (original)
+++ bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java Mon Sep 17 16:09:28 2012
@@ -41,6 +41,7 @@ import org.apache.bval.jsr303.xml.Annota
import org.apache.bval.jsr303.xml.MetaConstraint;
import org.apache.bval.jsr303.xml.ValidationMappingParser;
import org.apache.bval.util.AccessStrategy;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
/**
@@ -132,16 +133,6 @@ public class ApacheValidatorFactory impl
}
/**
- * Get the default {@link MessageInterpolator} used by this
- * {@link ApacheValidatorFactory}.
- *
- * @return {@link MessageInterpolator}
- */
- protected MessageInterpolator getDefaultMessageInterpolator() {
- return messageResolver;
- }
-
- /**
* Shortcut method to create a new Validator instance with factory's
* settings
*
@@ -185,8 +176,7 @@ public class ApacheValidatorFactory impl
* {@inheritDoc}
*/
public MessageInterpolator getMessageInterpolator() {
- return ((messageResolver != null) ? messageResolver
- : getDefaultMessageInterpolator());
+ return messageResolver;
}
/**
@@ -233,31 +223,32 @@ public class ApacheValidatorFactory impl
* @throws ValidationException if the provider does not support the call.
*/
public <T> T unwrap(final Class<T> type) {
- // FIXME 2011-03-27 jw:
- // This code is unsecure.
- // It should allow only a fixed set of classes.
- // Can't fix this because don't know which classes this method should support.
-
if (type.isInstance(this)) {
@SuppressWarnings("unchecked")
T result = (T) this;
return result;
- } else if (!(type.isInterface() || Modifier.isAbstract(type
+ }
+
+ // FIXME 2011-03-27 jw:
+ // This code is unsecure.
+ // It should allow only a fixed set of classes.
+ // Can't fix this because don't know which classes this method should support.
+
+ if (!(type.isInterface() || Modifier.isAbstract(type
.getModifiers()))) {
return newInstance(type);
- } else {
- try {
- Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
- if (type.isAssignableFrom(cls)) {
- @SuppressWarnings("unchecked")
- T result = (T) newInstance(cls);
- return result;
- }
- } catch (ClassNotFoundException e) {
- // do nothing
+ }
+ try {
+ Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
+ if (type.isAssignableFrom(cls)) {
+ @SuppressWarnings("unchecked")
+ T result = (T) newInstance(cls);
+ return result;
}
- throw new ValidationException("Type " + type + " not supported");
+ } catch (ClassNotFoundException e) {
+ // do nothing
}
+ throw new ValidationException("Type " + type + " not supported");
}
private <T> T newInstance(final Class<T> cls) {
@@ -308,16 +299,15 @@ public class ApacheValidatorFactory impl
*/
public void addMetaConstraint(Class<?> beanClass,
MetaConstraint<?, ?> metaConstraint) {
- List<MetaConstraint<?, ? extends Annotation>> slot =
- constraintMap.get(beanClass);
- if (slot != null) {
- slot.add(metaConstraint);
- } else {
- List<MetaConstraint<?, ? extends Annotation>> constraintList =
- new ArrayList<MetaConstraint<?, ? extends Annotation>>();
- constraintList.add(metaConstraint);
- constraintMap.put(beanClass, constraintList);
+ List<MetaConstraint<?, ? extends Annotation>> slot;
+ synchronized (constraintMap) {
+ slot = constraintMap.get(beanClass);
+ if (slot == null) {
+ slot = new ArrayList<MetaConstraint<?, ? extends Annotation>>();
+ constraintMap.put(beanClass, slot);
+ }
}
+ slot.add(metaConstraint);
}
/**
@@ -328,14 +318,15 @@ public class ApacheValidatorFactory impl
* defining the property to validate
*/
public void addValid(Class<?> beanClass, AccessStrategy accessStrategy) {
- List<AccessStrategy> slot = validAccesses.get(beanClass);
- if (slot != null) {
- slot.add(accessStrategy);
- } else {
- List<AccessStrategy> tmpList = new ArrayList<AccessStrategy>();
- tmpList.add(accessStrategy);
- validAccesses.put(beanClass, tmpList);
+ List<AccessStrategy> slot;
+ synchronized (validAccesses) {
+ slot = validAccesses.get(beanClass);
+ if (slot == null) {
+ slot = new ArrayList<AccessStrategy>();
+ validAccesses.put(beanClass, slot);
+ }
}
+ slot.add(accessStrategy);
}
/**
@@ -344,8 +335,8 @@ public class ApacheValidatorFactory impl
* @param beanClass
* @param groupSequence
*/
- public void addDefaultSequence(Class<?> beanClass, Class<?>[] groupSequence) {
- defaultSequences.put(beanClass, groupSequence);
+ public void addDefaultSequence(Class<?> beanClass, Class<?>... groupSequence) {
+ defaultSequences.put(beanClass, safeArray(groupSequence));
}
/**
@@ -356,17 +347,16 @@ public class ApacheValidatorFactory impl
* @return List of {@link MetaConstraint}s applicable to
* <code>beanClass</code>
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
public <T> List<MetaConstraint<T, ? extends Annotation>> getMetaConstraints(
Class<T> beanClass) {
- List<MetaConstraint<?, ? extends Annotation>> slot =
- constraintMap.get(beanClass);
- if (slot != null) {
- // noinspection RedundantCast
- return (List) slot;
- } else {
- return Collections.EMPTY_LIST;
+ final List<MetaConstraint<?, ? extends Annotation>> slot = constraintMap.get(beanClass);
+ if (slot == null) {
+ return Collections.emptyList();
}
+ // noinspection RedundantCast
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ final List<MetaConstraint<T, ? extends Annotation>> result = (List) slot;
+ return Collections.unmodifiableList(result);
}
/**
@@ -378,12 +368,8 @@ public class ApacheValidatorFactory impl
* @return {@link List} of {@link AccessStrategy}
*/
public List<AccessStrategy> getValidAccesses(Class<?> beanClass) {
- List<AccessStrategy> slot = validAccesses.get(beanClass);
- if (slot != null) {
- return slot;
- } else {
- return Collections.<AccessStrategy>emptyList();
- }
+ final List<AccessStrategy> slot = validAccesses.get(beanClass);
+ return slot == null ? Collections.<AccessStrategy> emptyList() : Collections.unmodifiableList(slot);
}
/**
@@ -393,7 +379,10 @@ public class ApacheValidatorFactory impl
* @return group Class array
*/
public Class<?>[] getDefaultSequence(Class<?> beanClass) {
- return defaultSequences.get(beanClass);
+ return safeArray(defaultSequences.get(beanClass));
}
+ private static Class<?>[] safeArray(Class<?>... array) {
+ return ArrayUtils.isEmpty(array) ? ArrayUtils.EMPTY_CLASS_ARRAY : ArrayUtils.clone(array);
+ }
}