[hibernate-commits] Hibernate SVN: r16833 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jun 18 12:25:06 EDT 2009


Author: hardy.ferentschik
Date: 2009-06-18 12:25:06 -0400 (Thu, 18 Jun 2009)
New Revision: 16833

Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
Log:
Made sure an unexpected RuntimeException in ConstraintValidator.isValid is wrapped into a ValidationException

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java	2009-06-18 16:22:31 UTC (rev 16832)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java	2009-06-18 16:25:06 UTC (rev 16833)
@@ -24,20 +24,18 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import javax.validation.metadata.ConstraintDescriptor;
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorFactory;
 import javax.validation.ConstraintViolation;
 import javax.validation.UnexpectedTypeException;
 import javax.validation.ValidationException;
+import javax.validation.metadata.ConstraintDescriptor;
 
 import com.googlecode.jtype.TypeUtils;
 import org.slf4j.Logger;
 
 import org.hibernate.validation.util.LoggerFactory;
 import org.hibernate.validation.util.ValidatorTypeHelper;
-import org.hibernate.validation.engine.ExecutionContext;
-import org.hibernate.validation.engine.ConstraintValidatorContextImpl;
 
 /**
  * Due to constraint conposition a single constraint annotation can lead to a whole constraint tree beeing validated.
@@ -127,13 +125,9 @@
 					value, type, executionContext.getConstraintValidatorFactory()
 			);
 
-			if ( !validator.isValid( value, constraintValidatorContext ) ) {
-				constraintViolations.addAll(
-						executionContext.createConstraintViolations(
-								value, constraintValidatorContext
-						)
-				);
-			}
+			validateSingleConstraint(
+					value, executionContext, constraintViolations, constraintValidatorContext, validator
+			);
 		}
 
 		if ( reportAsSingleViolation() && constraintViolations.size() > 0 ) {
@@ -147,6 +141,23 @@
 		}
 	}
 
+	private <T, V> void validateSingleConstraint(V value, ExecutionContext<T> executionContext, List<ConstraintViolation<T>> constraintViolations, ConstraintValidatorContextImpl constraintValidatorContext, ConstraintValidator<A, V> validator) {
+		boolean isValid;
+		try {
+			isValid = validator.isValid( value, constraintValidatorContext );
+		}
+		catch ( RuntimeException e ) {
+			throw new ValidationException( "Unexpected exception during isValid call", e );
+		}
+		if ( !isValid ) {
+			constraintViolations.addAll(
+					executionContext.createConstraintViolations(
+							value, constraintValidatorContext
+					)
+			);
+		}
+	}
+
 	private boolean reportAsSingleViolation() {
 		return getParent() != null
 				&& getParent().getDescriptor().isReportAsSingleViolation();




More information about the hibernate-commits mailing list