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/12 15:16:57 UTC
svn commit: r943478 - in /incubator/bval/trunk/bval-jsr303/src:
main/java/org/apache/bval/jsr303/ClassValidator.java
test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java
test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java
Author: dwoods
Date: Wed May 12 13:16:56 2010
New Revision: 943478
URL: http://svn.apache.org/viewvc?rev=943478&view=rev
Log:
BVAL-42 Stop group sequence validation when at least 1 violation is already reported. Contributed by Carlos Vara.
Modified:
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java
incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java?rev=943478&r1=943477&r2=943478&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java Wed May 12 13:16:56 2010
@@ -101,12 +101,16 @@ public class ClassValidator extends Bean
public void validateBeanNet(ValidationContext vcontext) {
GroupValidationContext context = (GroupValidationContext) vcontext;
List<Group> defaultGroups = expandDefaultGroup(context);
+ final ConstraintValidationListener result = (ConstraintValidationListener) vcontext.getListener();
if (defaultGroups != null) {
Group currentGroup = context.getCurrentGroup();
for (Group each : defaultGroups) {
context.setCurrentGroup(each);
super.validateBeanNet(context);
- // continue validation, even if errors already found: if (!result.isEmpty())
+ // Spec 3.4.3 - Stop validation if errors already found
+ if ( !result.isEmpty() ) {
+ break;
+ }
}
context.setCurrentGroup(currentGroup); // restore (finally{} not required)
} else {
Modified: incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java?rev=943478&r1=943477&r2=943478&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/CollectionValidationTest.java Wed May 12 13:16:56 2010
@@ -141,15 +141,16 @@ public class CollectionValidationTest ex
/*
This, by the way, tests redefined default group sequence behavior
on non-root-beans (Library.Book)!!
+ So only 1 constraint violation expected
*/
violations = validator.validate(lib);
assertEquals(
- "redefined default group of Book not correctly validated from Library", 3,
+ "redefined default group of Book not correctly validated from Library", 1,
violations.size());
assertNotNull(TestUtils.getViolation(violations, "taggedBooks[politics].title"));
- assertNotNull(
+ assertNull(
TestUtils.getViolation(violations, "taggedBooks[humor].author.firstName"));
- assertNotNull(TestUtils.getViolation(violations,
+ assertNull(TestUtils.getViolation(violations,
"taggedBooks[science].author.addresses[0].city"));
}
Modified: incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java?rev=943478&r1=943477&r2=943478&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/test/java/org/apache/bval/jsr303/groups/GroupSequenceTest.java Wed May 12 13:16:56 2010
@@ -28,9 +28,11 @@ import org.apache.bval.jsr303.util.TestU
import org.apache.bval.model.MetaBean;
import javax.validation.ConstraintViolation;
+import javax.validation.GroupSequence;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
+import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -181,4 +183,33 @@ public class GroupSequenceTest extends T
assertEquals(1, constraintViolations.size());
}
+
+ /**
+ * Check that when there is one constraint failure in one of the groups in
+ * a sequence, validation stops.
+ * JSR-303: 3.4.3
+ */
+ public void testValidationStopsWhenFailuresOnGroup() {
+ Validator validator = getValidator();
+
+ // Validate Dummy with its redefined Default group
+ Set<ConstraintViolation<Dummy>> violations = validator.validate(new Dummy());
+ assertEquals("Only 1 violation expected", 1, violations.size());
+ ConstraintViolation<Dummy> violation = violations.iterator().next();
+ assertEquals("Group1 should be evaluated first", "field1", violation.getPropertyPath().toString());
+ }
+
+ @GroupSequence({Dummy.Group1.class, Dummy.class})
+ public static class Dummy {
+
+ @NotNull(groups=Group1.class)
+ public String field1;
+
+ @NotNull
+ public String field2;
+
+ interface Group1 {
+ }
+ }
+
}