You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by ro...@apache.org on 2010/05/04 14:16:10 UTC
svn commit: r940822 - in /incubator/bval/trunk/bval-jsr303/src:
main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java
main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java
Author: romanstumm
Date: Tue May 4 12:16:09 2010
New Revision: 940822
URL: http://svn.apache.org/viewvc?rev=940822&view=rev
Log:
BVAL-33 Payload value must also be inherited in compositing constraints - fixes from Carlos Varla
Modified:
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java?rev=940822&r1=940821&r2=940822&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java Tue May 4 12:16:09 2010
@@ -18,6 +18,7 @@ package org.apache.bval.jsr303;
import org.apache.bval.jsr303.xml.AnnotationProxyBuilder;
+import javax.validation.Payload;
import java.lang.annotation.Annotation;
import java.util.Set;
@@ -37,12 +38,18 @@ public class AppendValidationToBuilder i
// Any groups definition on a composing annotation is ignored.
Set<Class<?>> inheritedGroups = builder.getConstraintValidation().getGroups();
validation.setGroups(inheritedGroups);
+
+ // JSR-303 2.3 p:
+ // Payloads are also inherited
+ Set<Class<? extends Payload>> inheritedPayload = builder.getConstraintValidation().getPayload();
+ validation.setPayload(inheritedPayload);
- // Inherited groups value must also be replicated in the annotation, so
- // it has to be substituted with a new proxy.
+ // Inherited groups and payload values must also be replicated in the
+ // annotation, so it has to be substituted with a new proxy.
T originalAnnot = validation.getAnnotation();
AnnotationProxyBuilder<T> apb = new AnnotationProxyBuilder<T>(originalAnnot);
apb.putValue("groups", inheritedGroups.toArray(new Class[inheritedGroups.size()]));
+ apb.putValue("payload", inheritedPayload.toArray(new Class[inheritedPayload.size()]));
T newAnnot = apb.createAnnotation();
validation.setAnnotation(newAnnot);
@@ -57,4 +64,11 @@ public class AppendValidationToBuilder i
return builder.getConstraintValidation().getGroups();
}
+ /**
+ * @return The set of payloads from the parent constraint.
+ */
+ public Set<?> getInheritedPayload() {
+ return builder.getConstraintValidation().getPayload();
+ }
+
}
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=940822&r1=940821&r2=940822&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 Tue May 4 12:16:09 2010
@@ -449,9 +449,13 @@ public class Jsr303MetaBeanFactory imple
}
final AnnotationConstraintBuilder builder = new AnnotationConstraintBuilder(
constraintClasses, validator, annotation, owner, access);
- // If already building a constraint composition tree, ensure that the parent groups are inherited
+ // If already building a constraint composition tree, ensure that:
+ // - the parent groups are inherited
+ // - the parent payload is inherited
if ( appender instanceof AppendValidationToBuilder ) {
- builder.getConstraintValidation().setGroups(((AppendValidationToBuilder) appender).getInheritedGroups());
+ AppendValidationToBuilder avb = (AppendValidationToBuilder) appender;
+ builder.getConstraintValidation().setGroups(avb.getInheritedGroups());
+ builder.getConstraintValidation().setPayload(avb.getInheritedPayload());
}
// process composed constraints:
// here are not other superclasses possible, because annotations do not inherit!
Modified: incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java?rev=940822&r1=940821&r2=940822&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/ConstraintCompositionTest.java Tue May 4 12:16:09 2010
@@ -103,13 +103,37 @@ public class ConstraintCompositionTest e
Assert.assertEquals("There should only be 1 group", 1, personNameDesc.getGroups().size());
Assert.assertTrue("Group1 should be present", notNullDesc.getGroups().contains(Group1.class));
- // Check that the groups() value is right when accesing it from an error
+ // Check that the groups() value is right when accessing it from an error
Set<ConstraintViolation<Man>> violations = validator.validate(new Man(), Group1.class);
Set<Class<?>> notNullGroups = violations.iterator().next().getConstraintDescriptor().getGroups();
Assert.assertEquals("There should only be 1 group", 1, notNullGroups.size());
Assert.assertTrue("Group1 should be the only group", notNullGroups.contains(Group1.class));
}
+ /**
+ * Checks that the payload() value of the constraint annotations are
+ * correctly set to the inherited ones.
+ */
+ public void testAnnotationPayloadsAreInherited() {
+ Validator validator = getValidator();
+
+ // Check that the payload() value is right when querying the metadata
+ ConstraintDescriptor<?> manNameDesc = getValidator().getConstraintsForClass(Man.class).getConstraintsForProperty("name").getConstraintDescriptors().iterator().next();
+ ConstraintDescriptor<?> personNameDesc = manNameDesc.getComposingConstraints().iterator().next();
+ ConstraintDescriptor<?> notNullDesc = personNameDesc.getComposingConstraints().iterator().next();
+ Assert.assertEquals("There should only be 1 payload class", 1, manNameDesc.getPayload().size());
+ Assert.assertTrue("Payload1 should be present", manNameDesc.getPayload().contains(Payload1.class));
+ Assert.assertEquals("There should only be 1 payload class", 1, personNameDesc.getPayload().size());
+ Assert.assertTrue("Payload1 should be present", personNameDesc.getPayload().contains(Payload1.class));
+ Assert.assertEquals("There should only be 1 payload class", 1, personNameDesc.getPayload().size());
+ Assert.assertTrue("Payload1 should be present", notNullDesc.getPayload().contains(Payload1.class));
+
+ // Check that the payload() value is right when accessing it from an error
+ Set<ConstraintViolation<Man>> violations = validator.validate(new Man(), Group1.class);
+ Set<Class<? extends Payload>> notNullPayload = violations.iterator().next().getConstraintDescriptor().getPayload();
+ Assert.assertEquals("There should only be 1 payload class", 1, notNullPayload.size());
+ Assert.assertTrue("Payload1 should be the only payload", notNullPayload.contains(Payload1.class));
+ }
public static class Person {
@@ -118,11 +142,11 @@ public class ConstraintCompositionTest e
}
public static class Man {
- @ManName(groups={Group1.class})
+ @ManName(groups={Group1.class},payload={Payload1.class})
String name;
}
- @NotNull(message="A person needs a non null name", groups={Group1.class})
+ @NotNull(message="A person needs a non null name", groups={Group1.class}, payload={})
@Constraint(validatedBy = {})
@Documented
@Target({ METHOD, FIELD, TYPE })
@@ -133,7 +157,7 @@ public class ConstraintCompositionTest e
Class<? extends Payload>[] payload() default {};
}
- @PersonName(groups={Group2.class})
+ @PersonName(groups={Group2.class},payload={Payload1.class,Payload2.class})
@Constraint(validatedBy = {})
@Documented
@Target({ METHOD, FIELD, TYPE })
@@ -150,4 +174,10 @@ public class ConstraintCompositionTest e
public static interface Group2 {
}
+ public static class Payload1 implements Payload {
+ }
+
+ public static class Payload2 implements Payload {
+ }
+
}