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