[hibernate-commits] Hibernate SVN: r15902 - in validator/trunk: hibernate-validator/src/main/java/org/hibernate/validation/engine and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 5 06:53:49 EST 2009


Author: hardy.ferentschik
Date: 2009-02-05 06:53:49 -0500 (Thu, 05 Feb 2009)
New Revision: 15902

Added:
   validator/trunk/validation-api/src/main/java/javax/validation/AmbiguousConstraintUsageException.java
   validator/trunk/validation-api/src/main/java/javax/validation/UnexpectedTypeForConstraintException.java
Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForArray.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForCollection.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForMap.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/MultipleMinMax.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Bar.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Coordinate.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Suburb.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/ValidatorResolutionTest.java
   validator/trunk/validation-api/src/main/java/javax/validation/Constraint.java
Log:
BVAL-99 Added exceptions

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForArray.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForArray.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForArray.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id: SizeValidatorForString.java 15853 2009-02-02 15:42:10Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForArray.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForCollection.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForCollection.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForCollection.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id: SizeValidatorForString.java 15853 2009-02-02 15:42:10Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForCollection.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForMap.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForMap.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForMap.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id: SizeValidatorForString.java 15853 2009-02-02 15:42:10Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/SizeValidatorForMap.java
___________________________________________________________________
Name: svn:keywords
   + Id

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-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -22,9 +22,11 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import javax.validation.AmbiguousConstraintUsageException;
 import javax.validation.ConstraintDescriptor;
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorFactory;
+import javax.validation.UnexpectedTypeForConstraintException;
 import javax.validation.ValidationException;
 
 import org.slf4j.Logger;
@@ -168,11 +170,19 @@
 
 		Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes = ValidatorTypeHelper
 				.getValidatorsTypes( descriptor.getConstraintValidatorClasses() );
-
 		List<Class> assignableClasses = findAssingableClasses( valueClass, validatorsTypes );
 
 		resolveAssignableClasses( assignableClasses );
-		if ( assignableClasses.size() != 1 ) {
+		verifyResolveWasUnique( valueClass, assignableClasses );
+
+		return validatorsTypes.get( assignableClasses.get( 0 ) );
+	}
+
+	private void verifyResolveWasUnique(Class valueClass, List<Class> assignableClasses) {
+		if ( assignableClasses.size() == 0 ) {
+			throw new UnexpectedTypeForConstraintException( "No validator could be found for type: " + valueClass.getName() );
+		}
+		else if ( assignableClasses.size() > 1 ) {
 			StringBuilder builder = new StringBuilder();
 			builder.append( "There are multiple validators which could validate the type " );
 			builder.append( valueClass );
@@ -182,10 +192,8 @@
 				builder.append( ", " );
 			}
 			builder.delete( builder.length() - 2, builder.length() );
-			throw new ValidationException( builder.toString() );
+			throw new AmbiguousConstraintUsageException( builder.toString() );
 		}
-
-		return validatorsTypes.get( assignableClasses.get( 0 ) );
 	}
 
 	private List<Class> findAssingableClasses(Class valueClass, Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes) {
@@ -213,7 +221,7 @@
 	 * which are handled by at least one of the  validators for the specified constraint.
 	 */
 	private void resolveAssignableClasses(List<Class> assignableClasses) {
-		if ( assignableClasses.size() == 1 ) {
+		if ( assignableClasses.size() == 0 || assignableClasses.size() == 1 ) {
 			return;
 		}
 

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id: ValidatorImpl.java 15837 2009-01-30 15:49:57Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/MultipleMinMax.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/MultipleMinMax.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/MultipleMinMax.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/MultipleMinMax.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Bar.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Bar.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Bar.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -17,9 +17,21 @@
 */
 package org.hibernate.validation.engine.validatorresolution;
 
+import javax.validation.constraints.Size;
+
 /**
  * @author Hardy Ferentschik
  */
 public class Bar {
+	// validating Bar actually raises an UnexpectedTypeForConstraintException - @Size is not defined for Integer
+	@Size
+	private Integer value = 0;
 
+	public Integer getValue() {
+		return value;
+	}
+
+	public void setValue(Integer value) {
+		this.value = value;
+	}
 }
\ No newline at end of file

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Coordinate.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Coordinate.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Coordinate.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Coordinate.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Suburb.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Suburb.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Suburb.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/Suburb.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/ValidatorResolutionTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/ValidatorResolutionTest.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/validatorresolution/ValidatorResolutionTest.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -18,11 +18,13 @@
 package org.hibernate.validation.engine.validatorresolution;
 
 import java.util.Set;
+import javax.validation.AmbiguousConstraintUsageException;
 import javax.validation.ConstraintViolation;
-import javax.validation.ValidationException;
 import javax.validation.Validator;
+import javax.validation.UnexpectedTypeForConstraintException;
 
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 import org.junit.Test;
 
@@ -56,12 +58,26 @@
 			validator.validate( foo );
 			fail();
 		}
-		catch ( ValidationException e ) {
+		catch ( AmbiguousConstraintUsageException e ) {
 			assertTrue( e.getMessage().startsWith( "There are multiple validators" ) );
 		}
 	}
 
 	@Test
+	public void testUnexpectedType() {
+		Validator validator = getValidator();
+
+		Bar bar = new Bar();
+		try {
+			validator.validate( bar );
+			fail();
+		}
+		catch ( UnexpectedTypeForConstraintException e ) {
+			assertEquals( "No validator could be found for type: java.lang.Integer", e.getMessage() );
+		}
+	}
+
+	@Test
 	public void testMultipleSizeValidators() {
 		Validator validator = getValidator();
 

Added: validator/trunk/validation-api/src/main/java/javax/validation/AmbiguousConstraintUsageException.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/AmbiguousConstraintUsageException.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/AmbiguousConstraintUsageException.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -0,0 +1,44 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package javax.validation;
+
+import javax.validation.ValidationException;
+
+/**
+ * Exception raised in the case that the constraint validator resolution returns more than one possible validators for
+ * a given type.
+ *
+ * @author Hardy Ferentschik
+ */
+public class AmbiguousConstraintUsageException extends ValidationException {
+	public AmbiguousConstraintUsageException(String message) {
+		super( message );
+	}
+
+	public AmbiguousConstraintUsageException() {
+		super();
+	}
+
+	public AmbiguousConstraintUsageException(String message, Throwable cause) {
+		super( message, cause );
+	}
+
+	public AmbiguousConstraintUsageException(Throwable cause) {
+		super( cause );
+	}
+}


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/AmbiguousConstraintUsageException.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/validation-api/src/main/java/javax/validation/Constraint.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/Constraint.java	2009-02-05 11:24:23 UTC (rev 15901)
+++ validator/trunk/validation-api/src/main/java/javax/validation/Constraint.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -1,4 +1,4 @@
-// $Id: Constraint.java 15817 2009-01-25 22:35:36Z epbernard $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/Constraint.java
___________________________________________________________________
Name: svn:keywords
   + Id

Added: validator/trunk/validation-api/src/main/java/javax/validation/UnexpectedTypeForConstraintException.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/UnexpectedTypeForConstraintException.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/UnexpectedTypeForConstraintException.java	2009-02-05 11:53:49 UTC (rev 15902)
@@ -0,0 +1,44 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package javax.validation;
+
+import javax.validation.ValidationException;
+
+/**
+ * Exception raised in the case that the constraint validator resolution returns more than one possible validators for
+ * a given type.
+ *
+ * @author Hardy Ferentschik
+ */
+public class UnexpectedTypeForConstraintException extends ValidationException {
+	public UnexpectedTypeForConstraintException(String message) {
+		super( message );
+	}
+
+	public UnexpectedTypeForConstraintException() {
+		super();
+	}
+
+	public UnexpectedTypeForConstraintException(String message, Throwable cause) {
+		super( message, cause );
+	}
+
+	public UnexpectedTypeForConstraintException(Throwable cause) {
+		super( cause );
+	}
+}
\ No newline at end of file


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/UnexpectedTypeForConstraintException.java
___________________________________________________________________
Name: svn:keywords
   + Id




More information about the hibernate-commits mailing list