You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by dw...@apache.org on 2010/05/17 20:31:47 UTC
svn commit: r945286 - in
/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303:
Jsr303MetaBeanFactory.java extensions/MethodValidatorImpl.java
Author: dwoods
Date: Mon May 17 18:31:47 2010
New Revision: 945286
URL: http://svn.apache.org/viewvc?rev=945286&view=rev
Log:
BVAL-45 ValidationException must be thrown when validating a bean with an annotated method which isn't a valid getter. Contributed by Carlos Vara.
Modified:
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java?rev=945286&r1=945285&r2=945286&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java Mon May 17 18:31:47 2010
@@ -225,11 +225,53 @@ public class Jsr303MetaBeanFactory imple
new AppendValidationToMeta(metaProperty));
}
}
- } // TODO: If propName == null AND it's annotated, throw Ex
+ }
+ else if ( hasValidationConstraintsDefined(method) ) {
+ throw new ValidationException("Property " + method.getName() + " does not follow javabean conventions.");
+ }
}
}
addXmlConstraints(beanClass, metabean);
}
+
+ private boolean hasValidationConstraintsDefined(Method method) {
+ boolean ret = false;
+ for ( Annotation annot : method.getDeclaredAnnotations() ) {
+ if ( true == (ret = hasValidationConstraintsDefined(annot)) ) {
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+ private boolean hasValidationConstraintsDefined(Annotation annot) {
+ // If it is annotated with @Constraint
+ if ( annot.annotationType().getAnnotation(Constraint.class) != null ) {
+ return true;
+ }
+ boolean ret = false;
+
+ // Check in case it is a multivalued constraint
+ Object value = null;
+ try {
+ value = SecureActions.getAnnotationValue(annot, ANNOTATION_VALUE);
+ } catch (IllegalAccessException e) {
+ // Swallow it
+ } catch (InvocationTargetException e) {
+ // Swallow it
+ }
+
+ if ( value instanceof Annotation[] ) {
+ for (Annotation annot2 : (Annotation[])value ) {
+ if ( true == (ret = hasValidationConstraintsDefined(annot2)) ) {
+ break;
+ }
+ }
+ }
+
+ return ret;
+ }
/** add cascade validation and constraints from xml mappings */
private void addXmlConstraints(Class<?> beanClass, MetaBean metabean)
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java?rev=945286&r1=945285&r2=945286&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java Mon May 17 18:31:47 2010
@@ -17,6 +17,8 @@
package org.apache.bval.jsr303.extensions;
import javax.validation.ConstraintViolation;
+import javax.validation.ValidationException;
+import javax.validation.metadata.BeanDescriptor;
import javax.validation.metadata.ConstraintDescriptor;
import org.apache.bval.jsr303.ApacheFactoryContext;
@@ -25,6 +27,7 @@ import org.apache.bval.jsr303.ClassValid
import org.apache.bval.jsr303.ConstraintValidation;
import org.apache.bval.jsr303.ConstraintValidationListener;
import org.apache.bval.jsr303.GroupValidationContext;
+import org.apache.bval.jsr303.Jsr303Features;
import org.apache.bval.jsr303.groups.Group;
import org.apache.bval.jsr303.groups.Groups;
import org.apache.bval.model.MetaBean;
@@ -44,6 +47,17 @@ class MethodValidatorImpl extends ClassV
super(factoryContext);
}
+
+ @Override
+ public BeanDescriptor getConstraintsForClass(Class<?> clazz) {
+ // TODO: Cache this MetaBean
+ MetaBean uncachedStubmetaBean = new MetaBean();
+ uncachedStubmetaBean.setBeanClass(clazz);
+ BeanDescriptorImpl edesc = createBeanDescriptor(uncachedStubmetaBean);
+ return edesc;
+ }
+
+
@Override
protected BeanDescriptorImpl createBeanDescriptor(MetaBean metaBean) {
MethodBeanDescriptorImpl descriptor = new MethodBeanDescriptorImpl(factoryContext,