BV2: constraint/validator updates

Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/40fc20f6
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/40fc20f6
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/40fc20f6

Branch: refs/heads/bv2
Commit: 40fc20f6fb1b6585e101ceec66dc44e459d898ae
Parents: a602e41
Author: Matt Benson <[email protected]>
Authored: Wed Feb 21 14:38:00 2018 -0600
Committer: Matt Benson <[email protected]>
Committed: Wed Feb 21 14:59:56 2018 -0600

----------------------------------------------------------------------
 .../constraints/checkdigit/ABANumber.java       |   4 +-
 .../extras/constraints/checkdigit/CUSIP.java    |   4 +-
 .../extras/constraints/checkdigit/EAN13.java    |   4 +-
 .../extras/constraints/checkdigit/IBAN.java     |   4 +-
 .../constraints/checkdigit/IBANValidator.java   |   8 +-
 .../extras/constraints/checkdigit/ISBN10.java   |   4 +-
 .../extras/constraints/checkdigit/Luhn.java     |   4 +-
 .../checkdigit/ModulusValidator.java            |   4 +-
 .../extras/constraints/checkdigit/Sedol.java    |   4 +-
 .../extras/constraints/checkdigit/Verhoeff.java |   4 +-
 .../checkdigit/VerhoeffValidator.java           |   4 +-
 .../constraints/creditcard/AmericanExpress.java |   4 +-
 .../extras/constraints/creditcard/Diners.java   |   4 +-
 .../extras/constraints/creditcard/Discover.java |   4 +-
 .../constraints/creditcard/Mastercard.java      |   4 +-
 .../constraints/file/DirectoryValidator.java    |   2 +-
 .../constraints/file/SymlinkValidator.java      |   2 +-
 .../extras/constraints/net/DomainValidator.java |  33 +++--
 .../constraints/net/InetAddressValidator.java   |   4 +-
 .../checkdigit/ABANumberValidatorTest.java      |   2 +-
 .../checkdigit/AbstractCheckDigitTest.java      |   4 +-
 .../checkdigit/CUSIPValidatorTest.java          |   2 +-
 .../checkdigit/EAN13CheckDigitTest.java         |   2 +-
 .../checkdigit/IBANCheckDigitTest.java          |   2 +-
 .../checkdigit/ISBN10CheckDigitTest.java        |   2 +-
 .../checkdigit/LuhnCheckDigitTest.java          |   2 +-
 .../checkdigit/SedolCheckDigitTest.java         |   2 +-
 .../checkdigit/VerhoeffCheckDigitTest.java      |   2 +-
 .../net/InetAddressValidatorTest.java           |   2 +-
 .../bval/constraints/AssertFalseValidator.java  |   6 +-
 .../bval/constraints/AssertTrueValidator.java   |   6 +-
 .../DecimalMaxValidatorForNumber.java           |  12 +-
 .../DecimalMaxValidatorForString.java           |   2 +-
 .../DecimalMinValidatorForNumber.java           |  12 +-
 .../DecimalMinValidatorForString.java           |   2 +-
 .../java/org/apache/bval/constraints/Email.java |  15 +-
 .../apache/bval/constraints/EmailValidator.java |   7 +-
 .../constraints/FutureOrPresentValidator.java   | 138 +++++++++++++++++++
 .../bval/constraints/FutureValidator.java       | 138 +++++++++++++++++++
 .../bval/constraints/MaxValidatorForNumber.java |   4 +-
 .../bval/constraints/MaxValidatorForString.java |   2 +-
 .../bval/constraints/MinValidatorForNumber.java |   4 +-
 .../bval/constraints/MinValidatorForString.java |   2 +-
 .../bval/constraints/NotBlankValidator.java     |  34 +++++
 .../org/apache/bval/constraints/NotEmpty.java   |  28 ++--
 .../bval/constraints/NotEmptyValidator.java     |  19 +--
 .../NotEmptyValidatorForCharSequence.java       |  34 +++++
 .../NotEmptyValidatorForCollection.java         |   7 +-
 .../constraints/NotEmptyValidatorForMap.java    |   6 +-
 .../constraints/NotEmptyValidatorForString.java |  37 -----
 .../bval/constraints/NotNullValidator.java      |   4 -
 .../apache/bval/constraints/NullValidator.java  |   5 -
 .../bval/constraints/NumberSignValidator.java   |  68 +++++++++
 .../constraints/PastOrPresentValidator.java     | 138 +++++++++++++++++++
 .../apache/bval/constraints/PastValidator.java  | 138 +++++++++++++++++++
 .../bval/constraints/PatternValidator.java      |   4 +-
 .../apache/bval/constraints/TimeValidator.java  |  44 ++++++
 .../bval/jsr/DefaultConstraints.properties      |  81 ++++++++++-
 58 files changed, 950 insertions(+), 174 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java
index 921ffbc..821b6aa 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = ABANumberValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface ABANumber {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java
index 85e84fd..139ab50 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = CUSIPValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface CUSIP {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java
index 4f835f6..667c786 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = EAN13Validator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface EAN13 {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java
index f0685c0..c48173f 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = IBANValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface IBAN {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java
index 38eace6..1f392c7 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java
@@ -26,7 +26,7 @@ import static java.lang.Character.getNumericValue;
 /**
  * <b>IBAN</b> (International Bank Account Number) Check Digit 
calculation/validation.
  * <p>
- * This rountine is based on the ISO 7064 Mod 97,10 check digit caluclation 
routine.
+ * This routine is based on the ISO 7064 Mod 97,10 check digit caluclation 
routine.
  * <p>
  * The two check digit characters in a IBAN number are the third and fourth 
characters
  * in the code. For <i>check digit</i> calculation/validation the first four 
characters are moved
@@ -40,7 +40,7 @@ import static java.lang.Character.getNumericValue;
  *  <a 
href="http://en.wikipedia.org/wiki/International_Bank_Account_Number";>Wikipedia 
-
  *  IBAN number</a>.
  */
-public final class IBANValidator implements ConstraintValidator<IBAN, String> {
+public final class IBANValidator implements ConstraintValidator<IBAN, 
CharSequence> {
 
     private static final long MAX = 999999999;
 
@@ -50,12 +50,12 @@ public final class IBANValidator implements 
ConstraintValidator<IBAN, String> {
      * {@inheritDoc}
      */
     @Override
-    public boolean isValid(String code, ConstraintValidatorContext context) {
+    public boolean isValid(CharSequence code, ConstraintValidatorContext 
context) {
         if (code.length() < 5) {
             return false;
         }
 
-        String reformattedCode = code.substring(4) + code.substring(0, 4);
+        String reformattedCode = code.subSequence(4, code.length()).toString() 
+ code.subSequence(0, 4).toString();
         long total = 0;
         for (int i = 0; i < reformattedCode.length(); i++) {
             int charValue = getNumericValue(reformattedCode.charAt(i));

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java
index a3a1bc3..9ce9b19 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = ISBN10Validator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface ISBN10 {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java
index 3bc186e..4e7ede5 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = LuhnValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Luhn {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java
index f25bea4..57d463d 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java
@@ -38,7 +38,7 @@ import static java.lang.Character.isDigit;
  *
  * @param <A>
  */
-abstract class ModulusValidator<A extends Annotation> implements 
ConstraintValidator<A, String> {
+abstract class ModulusValidator<A extends Annotation> implements 
ConstraintValidator<A, CharSequence> {
 
     private final int modulus;
 
@@ -58,7 +58,7 @@ abstract class ModulusValidator<A extends Annotation> 
implements ConstraintValid
      * {@inheritDoc}
      */
     @Override
-    public boolean isValid(String code, ConstraintValidatorContext context) {
+    public boolean isValid(CharSequence code, ConstraintValidatorContext 
context) {
         if (code.length() == 0) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java
index e69947c..67a2c01 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = SedolValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Sedol {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java
index e051a39..d3afc67 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java
@@ -25,7 +25,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  */
 @Documented
 @Constraint(validatedBy = VerhoeffValidator.class)
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Verhoeff {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java
index 5a7d76b..b6c6249 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java
@@ -33,7 +33,7 @@ import static java.lang.Character.getNumericValue;
  * See <a href="http://en.wikipedia.org/wiki/Verhoeff_algorithm";>Wikipedia
  *  - Verhoeff algorithm</a> for more details.
  */
-public final class VerhoeffValidator implements ConstraintValidator<Verhoeff, 
String> {
+public final class VerhoeffValidator implements ConstraintValidator<Verhoeff, 
CharSequence> {
 
     //@formatter:off
     /** D - multiplication table */
@@ -65,7 +65,7 @@ public final class VerhoeffValidator implements 
ConstraintValidator<Verhoeff, St
      * {@inheritDoc}
      */
     @Override
-    public boolean isValid(String code, ConstraintValidatorContext context) {
+    public boolean isValid(CharSequence code, ConstraintValidatorContext 
context) {
         if (code.length() == 0) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java
index 3d08d19..051d210 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java
@@ -28,7 +28,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 @Luhn
 @Pattern(regexp = "^(3[47]\\d{13})$")
 @Constraint(validatedBy = {})
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface AmericanExpress {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java
index de6fd35..efb0772 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java
@@ -28,7 +28,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 @Luhn
 @Pattern(regexp = "^(30[0-5]\\d{11}|3095\\d{10}|36\\d{12}|3[8-9]\\d{12})$")
 @Constraint(validatedBy = {})
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Diners {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java
index c445837..4e5ddd5 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java
@@ -28,7 +28,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 @Luhn
 @Pattern(regexp = "^((6011\\d{12})|(64[4-9]\\d{13})|(65\\d{14}))$")
 @Constraint(validatedBy = {})
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Discover {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java
index f30482e..1a9b6a5 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java
@@ -28,7 +28,9 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 @Luhn
 @Pattern(regexp = "^(5[1-5]\\d{14})$")
 @Constraint(validatedBy = {})
-@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
 @Retention(RUNTIME)
 public @interface Mastercard {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java
index a95ebde..6bca3b7 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java
@@ -32,7 +32,7 @@ public class DirectoryValidator implements 
ConstraintValidator<Directory, File>
      */
     @Override
     public boolean isValid(File value, ConstraintValidatorContext context) {
-        return value.exists() && value.isDirectory();
+        return value.isDirectory();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java
index 6ed85fd..ef85896 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java
@@ -49,7 +49,7 @@ public class SymlinkValidator implements 
ConstraintValidator<Symlink, File> {
         }
 
         try {
-            File fileInCanonicalDir = null;
+            File fileInCanonicalDir;
             if (value.getParent() == null) {
                 fileInCanonicalDir = value;
             } else {

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java
index b989531..c7668d5 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java
@@ -20,11 +20,12 @@ package org.apache.bval.extras.constraints.net;
 
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
-import java.util.List;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static java.util.Arrays.asList;
+import java.util.Arrays;
+import java.util.HashSet;
 
 /**
  * <p><b>Domain name</b> validation routines.</p>
@@ -63,7 +64,7 @@ import static java.util.Arrays.asList;
  * {@link java.net.InetAddress} for that functionality.)
  * </p>
  */
-public class DomainValidator implements ConstraintValidator<Domain, String> {
+public class DomainValidator implements ConstraintValidator<Domain, 
CharSequence> {
 
     private boolean allowLocal;
 
@@ -77,15 +78,13 @@ public class DomainValidator implements 
ConstraintValidator<Domain, String> {
      * {@inheritDoc}
      */
     @Override
-    public boolean isValid(String domain, ConstraintValidatorContext context) {
+    public boolean isValid(CharSequence domain, ConstraintValidatorContext 
context) {
         Matcher matcher = DOMAIN_NAME_REGEX.matcher(domain);
         if (matcher.matches()) {
             domain = matcher.group(1);
-            return isValidTld(domain);
-        } else if (allowLocal && DOMAIN_LABEL.matcher(domain).matches()) {
-            return true;
+            return isValidTld(domain.toString());
         }
-        return false;
+        return allowLocal && DOMAIN_LABEL.matcher(domain).matches();
     }
 
     /**
@@ -154,7 +153,7 @@ public class DomainValidator implements 
ConstraintValidator<Domain, String> {
     }
 
     private static String chompLeadingDot(String str) {
-        if (str.startsWith(".")) {
+        if (str.charAt(0) == '.') {
             return str.substring(1);
         }
         return str;
@@ -165,11 +164,11 @@ public class DomainValidator implements 
ConstraintValidator<Domain, String> {
     // ----- Authoritative and comprehensive list at:
     // ----- http://data.iana.org/TLD/tlds-alpha-by-domain.txt
 
-    private static final List<String> INFRASTRUCTURE_TLDS = asList("arpa", // 
internet infrastructure
+    private static final Set<String> INFRASTRUCTURE_TLDS = new 
HashSet<>(Arrays.asList("arpa", // internet infrastructure
         "root" // diagnostic marker for non-truncated root zone
-    );
+    ));
 
-    private static final List<String> GENERIC_TLDS = asList("aero", // air 
transport industry
+    private static final Set<String> GENERIC_TLDS = new 
HashSet<>(Arrays.asList("aero", // air transport industry
         "asia", // Pan-Asia/Asia Pacific
         "biz", // businesses
         "cat", // Catalan linguistic/cultural community
@@ -189,9 +188,9 @@ public class DomainValidator implements 
ConstraintValidator<Domain, String> {
         "edu", // accredited postsecondary US education entities
         "mil", // United States Military
         "int" // organizations established by international treaty
-    );
+    ));
 
-    private static final List<String> COUNTRY_CODE_TLDS = asList("ac", // 
Ascension Island
+    private static final Set<String> COUNTRY_CODE_TLDS = new 
HashSet<>(Arrays.asList("ac", // Ascension Island
         "ad", // Andorra
         "ae", // United Arab Emirates
         "af", // Afghanistan
@@ -440,11 +439,11 @@ public class DomainValidator implements 
ConstraintValidator<Domain, String> {
         "za", // South Africa
         "zm", // Zambia
         "zw" // Zimbabwe
-    );
+    ));
 
-    private static final List<String> LOCAL_TLDS = asList("localhost", // 
RFC2606 defined
+    private static final Set<String> LOCAL_TLDS = new 
HashSet<>(Arrays.asList("localhost", // RFC2606 defined
         "localdomain" // Also widely used as localhost.localdomain
-    );
+    ));
 
     /**
      * {@inheritDoc}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java
 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java
index 461562c..d482e01 100644
--- 
a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java
+++ 
b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
  *
  * <p>This class provides methods to validate a candidate IP address.
  */
-public class InetAddressValidator implements ConstraintValidator<InetAddress, 
String> {
+public class InetAddressValidator implements ConstraintValidator<InetAddress, 
CharSequence> {
 
     private static final Pattern IPV4_PATTERN =
         Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
@@ -37,7 +37,7 @@ public class InetAddressValidator implements 
ConstraintValidator<InetAddress, St
      * {@inheritDoc}
      */
     @Override
-    public boolean isValid(String value, ConstraintValidatorContext context) {
+    public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
         if (!IPV4_PATTERN.matcher(value).matches()) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java
index d186dcb..8cd2399 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 public class ABANumberValidatorTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new ABANumberValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java
index c25278f..190bd5b 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java
@@ -37,7 +37,7 @@ public abstract class AbstractCheckDigitTest {
     private int checkDigitLth;
 
     /** Check digit routine being tested */
-    private ConstraintValidator<? extends Annotation, String> routine;
+    private ConstraintValidator<? extends Annotation, ? super String> routine;
 
     /** Array of valid code values */
     private String[] valid;
@@ -55,7 +55,7 @@ public abstract class AbstractCheckDigitTest {
         return 1;
     }
 
-    protected abstract ConstraintValidator<? extends Annotation, String> 
getConstraint();
+    protected abstract ConstraintValidator<? extends Annotation, ? super 
String> getConstraint();
 
     protected abstract String[] getValid();
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java
index 5bc57c3..fe13c4b 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 public class CUSIPValidatorTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new CUSIPValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
index 83cbf63..052a1c9 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 public class EAN13CheckDigitTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new EAN13Validator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
index c0ea8e6..04cfd73 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
@@ -35,7 +35,7 @@ public class IBANCheckDigitTest extends 
AbstractCheckDigitTest {
     }
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new IBANValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
index f03e7a1..4940c8b 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 public class ISBN10CheckDigitTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new ISBN10Validator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
index 06263e7..2b09d50 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
@@ -37,7 +37,7 @@ public class LuhnCheckDigitTest extends 
AbstractCheckDigitTest {
     private static final String VALID_DINERS     = "30569309025904";
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new LuhnValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
index 73ea523..55d1f51 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 public class SedolCheckDigitTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new SedolValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
index 2c6e982..fbd3c7f 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
@@ -28,7 +28,7 @@ import java.lang.annotation.Annotation;
 public class VerhoeffCheckDigitTest extends AbstractCheckDigitTest {
 
     @Override
-    protected ConstraintValidator<? extends Annotation, String> 
getConstraint() {
+    protected ConstraintValidator<? extends Annotation, ? super String> 
getConstraint() {
         return new VerhoeffValidator();
     }
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
index 9eba6ec..a79430d 100644
--- 
a/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
+++ 
b/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertTrue;
 /**
  * Test cases for InetAddressValidator.
  *
- * @version $Revision$
+ * @version $Revision: 1766546 $
  */
 public class InetAddressValidatorTest {
 

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
index 9eb4a14..143b76a 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
@@ -28,12 +28,8 @@ import javax.validation.constraints.AssertFalse;
 public class AssertFalseValidator implements ConstraintValidator<AssertFalse, 
Boolean> {
 
     @Override
-    public void initialize(AssertFalse annotation) {
-    }
-
-    @Override
     public boolean isValid(Boolean value, ConstraintValidatorContext context) {
-        return value == null || Boolean.FALSE.equals(value);
+        return !Boolean.TRUE.equals(value);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
index 47ee7f6..93ae933 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
@@ -28,12 +28,8 @@ import javax.validation.constraints.AssertTrue;
 public class AssertTrueValidator implements ConstraintValidator<AssertTrue, 
Boolean> {
 
     @Override
-    public void initialize(AssertTrue annotation) {
-    }
-
-    @Override
     public boolean isValid(Boolean value, ConstraintValidatorContext context) {
-        return value == null || Boolean.TRUE.equals(value);
+        return !Boolean.FALSE.equals(value);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
index dd0c210..725613c 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
@@ -43,12 +43,14 @@ public class DecimalMaxValidatorForNumber implements 
ConstraintValidator<Decimal
         if (value == null) {
             return true;
         }
+        BigDecimal bigValue;
         if (value instanceof BigDecimal) {
-            return ((BigDecimal) value).compareTo(maxValue) != 1;
+            bigValue = (BigDecimal) value;
+        } else if (value instanceof BigInteger) {
+            bigValue = new BigDecimal((BigInteger) value);
+        } else {
+            bigValue = new BigDecimal(value.doubleValue());
         }
-        if (value instanceof BigInteger) {
-            return (new BigDecimal((BigInteger) value)).compareTo(maxValue) != 
1;
-        }
-        return (new BigDecimal(value.doubleValue()).compareTo(maxValue)) != 1;
+        return bigValue.compareTo(maxValue) < 1;
     }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
index a247297..cb0e232 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
@@ -46,7 +46,7 @@ public class DecimalMaxValidatorForString implements 
ConstraintValidator<Decimal
             return true;
         }
         try {
-            return new BigDecimal(value).compareTo(maxValue) != 1;
+            return new BigDecimal(value).compareTo(maxValue) < 1;
         } catch (NumberFormatException nfe) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
index 74ed17a..17c6c38 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
@@ -43,12 +43,14 @@ public class DecimalMinValidatorForNumber implements 
ConstraintValidator<Decimal
         if (value == null) {
             return true;
         }
+        BigDecimal bigValue;
         if (value instanceof BigDecimal) {
-            return ((BigDecimal) value).compareTo(minValue) != -1;
+            bigValue = (BigDecimal) value;
+        } else if (value instanceof BigInteger) {
+            bigValue = new BigDecimal((BigInteger) value);
+        } else {
+            bigValue = new BigDecimal(value.doubleValue());
         }
-        if (value instanceof BigInteger) {
-            return (new BigDecimal((BigInteger) value)).compareTo(minValue) != 
-1;
-        }
-        return (new BigDecimal(value.doubleValue()).compareTo(minValue)) != -1;
+        return bigValue.compareTo(minValue) >= 0;
     }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
index 8110f8e..ef62387 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
@@ -48,7 +48,7 @@ public class DecimalMinValidatorForString implements 
ConstraintValidator<Decimal
             return true;
         }
         try {
-            return new BigDecimal(value).compareTo(minValue) != -1;
+            return new BigDecimal(value).compareTo(minValue) >= 0;
         } catch (NumberFormatException nfe) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
index 2d66d28..f1f9435 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
@@ -19,34 +19,41 @@
 package org.apache.bval.constraints;
 
 import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
 import javax.validation.Payload;
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 /**
  * <p>
  * --
- * TODO - This class is NOT part of the bean_validation spec and might 
disappear
- * as soon as a final version of the specification contains a similar 
functionality.
+ * NOTE - This constraint predates the equivalent version from the 
bean_validation spec.
  * --
  * </p>
  * Description: annotation to validate an email address (by pattern)<br/>
  */
+@Deprecated
 @Documented
-@Constraint(validatedBy = EmailValidator.class)
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
+@Constraint(validatedBy = {})
[email protected]
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
 @Retention(RUNTIME)
 public @interface Email {
+    @OverridesAttribute(constraint = javax.validation.constraints.Email.class, 
name = "groups")
     Class<?>[] groups() default {};
 
+    @OverridesAttribute(constraint = javax.validation.constraints.Email.class, 
name = "message")
     String message() default "{org.apache.bval.constraints.Email.message}";
 
+    @OverridesAttribute(constraint = javax.validation.constraints.Email.class, 
name = "payload")
     Class<? extends Payload>[] payload() default {};
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
index bcdf0fe..b20806b 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
@@ -26,15 +26,10 @@ import javax.validation.ConstraintValidatorContext;
 /**
  * Description: <br/>
  */
-public class EmailValidator implements ConstraintValidator<Email, 
CharSequence> {
+public class EmailValidator implements 
ConstraintValidator<javax.validation.constraints.Email, CharSequence> {
 
     @Override
     public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
         return EMailValidationUtils.isValid(value);
     }
-
-    @Override
-    public void initialize(Email parameters) {
-        // do nothing (as long as Email has no properties)
-    }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
new file mode 100644
index 0000000..4cc85b1
--- /dev/null
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.FutureOrPresent;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link 
FutureOrPresent}.
+ *
+ * @param <T>
+ *            validated type
+ */
+public abstract class FutureOrPresentValidator<T extends Comparable<T>> 
extends TimeValidator<FutureOrPresent, T> {
+
+    public static class ForDate extends FutureOrPresentValidator<Date> {
+
+        public ForDate() {
+            super(clock -> Date.from(clock.instant()));
+        }
+    }
+
+    public static class ForCalendar extends FutureOrPresentValidator<Calendar> 
{
+
+        public ForCalendar() {
+            super(clock -> 
GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+        }
+    }
+
+    public static class ForInstant extends FutureOrPresentValidator<Instant> {
+
+        public ForInstant() {
+            super(Instant::now);
+        }
+    }
+
+    public static class ForChronoLocalDate extends 
FutureOrPresentValidator<ChronoLocalDate> {
+
+        public ForChronoLocalDate() {
+            super(LocalDate::now);
+        }
+    }
+
+    public static class ForChronoLocalDateTime extends 
FutureOrPresentValidator<ChronoLocalDateTime<?>> {
+
+        public ForChronoLocalDateTime() {
+            super(LocalDateTime::now);
+        }
+    }
+
+    public static class ForLocalTime extends 
FutureOrPresentValidator<LocalTime> {
+
+        public ForLocalTime() {
+            super(LocalTime::now);
+        }
+    }
+
+    public static class ForOffsetDateTime extends 
FutureOrPresentValidator<OffsetDateTime> {
+
+        public ForOffsetDateTime() {
+            super(OffsetDateTime::now);
+        }
+    }
+
+    public static class ForOffsetTime extends 
FutureOrPresentValidator<OffsetTime> {
+
+        public ForOffsetTime() {
+            super(OffsetTime::now);
+        }
+    }
+
+    public static class ForChronoZonedDateTime extends 
FutureOrPresentValidator<ChronoZonedDateTime<?>> {
+
+        public ForChronoZonedDateTime() {
+            super(ZonedDateTime::now);
+        }
+    }
+
+    public static class ForMonthDay extends FutureOrPresentValidator<MonthDay> 
{
+
+        public ForMonthDay() {
+            super(MonthDay::now);
+        }
+    }
+
+    public static class ForYear extends FutureOrPresentValidator<Year> {
+
+        public ForYear() {
+            super(Year::now);
+        }
+    }
+
+    public static class ForYearMonth extends 
FutureOrPresentValidator<YearMonth> {
+
+        public ForYearMonth() {
+            super(YearMonth::now);
+        }
+    }
+
+    protected FutureOrPresentValidator(Function<Clock, T> now) {
+        super(now, n -> n >= 0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
new file mode 100644
index 0000000..dd6116b
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.Future;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link 
Future}.
+ *
+ * @param <T>
+ *            validated type
+ */
+public abstract class FutureValidator<T extends Comparable<T>> extends 
TimeValidator<Future, T> {
+
+    public static class ForDate extends FutureValidator<Date> {
+
+        public ForDate() {
+            super(clock -> Date.from(clock.instant()));
+        }
+    }
+
+    public static class ForCalendar extends FutureValidator<Calendar> {
+
+        public ForCalendar() {
+            super(clock -> 
GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+        }
+    }
+
+    public static class ForInstant extends FutureValidator<Instant> {
+
+        public ForInstant() {
+            super(Instant::now);
+        }
+    }
+
+    public static class ForChronoLocalDate extends 
FutureValidator<ChronoLocalDate> {
+
+        public ForChronoLocalDate() {
+            super(LocalDate::now);
+        }
+    }
+
+    public static class ForChronoLocalDateTime extends 
FutureValidator<ChronoLocalDateTime<?>> {
+
+        public ForChronoLocalDateTime() {
+            super(LocalDateTime::now);
+        }
+    }
+
+    public static class ForLocalTime extends FutureValidator<LocalTime> {
+
+        public ForLocalTime() {
+            super(LocalTime::now);
+        }
+    }
+
+    public static class ForOffsetDateTime extends 
FutureValidator<OffsetDateTime> {
+
+        public ForOffsetDateTime() {
+            super(OffsetDateTime::now);
+        }
+    }
+
+    public static class ForOffsetTime extends FutureValidator<OffsetTime> {
+
+        public ForOffsetTime() {
+            super(OffsetTime::now);
+        }
+    }
+
+    public static class ForChronoZonedDateTime extends 
FutureValidator<ChronoZonedDateTime<?>> {
+
+        public ForChronoZonedDateTime() {
+            super(ZonedDateTime::now);
+        }
+    }
+
+    public static class ForMonthDay extends FutureValidator<MonthDay> {
+
+        public ForMonthDay() {
+            super(MonthDay::now);
+        }
+    }
+
+    public static class ForYear extends FutureValidator<Year> {
+
+        public ForYear() {
+            super(Year::now);
+        }
+    }
+
+    public static class ForYearMonth extends FutureValidator<YearMonth> {
+
+        public ForYearMonth() {
+            super(YearMonth::now);
+        }
+    }
+
+    protected FutureValidator(Function<Clock, T> now) {
+        super(now, n -> n > 0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
index 78524f9..0ad81a8 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
@@ -43,10 +43,10 @@ public class MaxValidatorForNumber implements 
ConstraintValidator<Max, Number> {
             return true;
         }
         if (value instanceof BigDecimal) {
-            return ((BigDecimal) value).compareTo(BigDecimal.valueOf(max)) != 
1;
+            return ((BigDecimal) value).compareTo(BigDecimal.valueOf(max)) < 1;
         }
         if (value instanceof BigInteger) {
-            return ((BigInteger) value).compareTo(BigInteger.valueOf(max)) != 
1;
+            return ((BigInteger) value).compareTo(BigInteger.valueOf(max)) < 1;
         }
         return value.longValue() <= max;
     }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
index 4170a5c..f14f8e7 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
@@ -42,7 +42,7 @@ public class MaxValidatorForString implements 
ConstraintValidator<Max, String> {
             return true;
         }
         try {
-            return new BigDecimal(value).compareTo(BigDecimal.valueOf(max)) != 
1;
+            return new BigDecimal(value).compareTo(BigDecimal.valueOf(max)) < 
1;
         } catch (NumberFormatException nfe) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
index b5aeaad..c467de2 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
@@ -42,10 +42,10 @@ public class MinValidatorForNumber implements 
ConstraintValidator<Min, Number> {
             return true;
         }
         if (value instanceof BigDecimal) {
-            return ((BigDecimal) 
value).compareTo(BigDecimal.valueOf(minValue)) != -1;
+            return ((BigDecimal) 
value).compareTo(BigDecimal.valueOf(minValue)) >= 0;
         }
         if (value instanceof BigInteger) {
-            return ((BigInteger) 
value).compareTo(BigInteger.valueOf(minValue)) != -1;
+            return ((BigInteger) 
value).compareTo(BigInteger.valueOf(minValue)) >= 0;
         }
         return value.longValue() >= minValue;
     }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
index bd3a4dd..5d45fc2 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
@@ -42,7 +42,7 @@ public class MinValidatorForString implements 
ConstraintValidator<Min, String> {
             return true;
         }
         try {
-            return new 
BigDecimal(value).compareTo(BigDecimal.valueOf(minValue)) != -1;
+            return new 
BigDecimal(value).compareTo(BigDecimal.valueOf(minValue)) >= 0;
         } catch (NumberFormatException nfe) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
new file mode 100644
index 0000000..e201c0d
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.bval.constraints;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Validate {@link NotBlank} for {@link CharSequence}.
+ */
+public class NotBlankValidator implements ConstraintValidator<NotBlank, 
CharSequence> {
+
+    @Override
+    public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
+        return value == null || value.length() > 0 && 
!value.chars().allMatch(Character::isWhitespace);
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
index ffa8cf8..00497ea 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
@@ -18,18 +18,22 @@
  */
 package org.apache.bval.constraints;
 
-import javax.validation.Constraint;
-import javax.validation.Payload;
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
 import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+
 /**
  * <pre>
  * This class is NOT part of the bean_validation spec and might disappear
@@ -37,14 +41,20 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
  * </pre>
  */
 @Documented
-@Constraint(validatedBy = { NotEmptyValidatorForCollection.class, 
NotEmptyValidatorForMap.class,
-    NotEmptyValidatorForString.class, NotEmptyValidator.class })
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
+@Constraint(validatedBy = {})
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
 @Retention(RUNTIME)
[email protected]
+@Deprecated
 public @interface NotEmpty {
     Class<?>[] groups() default {};
 
+    @OverridesAttribute(constraint = 
javax.validation.constraints.NotEmpty.class, name = "message")
     String message() default "{org.apache.bval.constraints.NotEmpty.message}";
 
     Class<? extends Payload>[] payload() default {};
+
+    public @interface List {
+        NotEmpty[] value();
+    }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
index 4316b39..92c8739 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
@@ -25,14 +25,10 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
 /**
- * Description:  Check the non emptyness of an
+ * Description:  Check the non emptiness of an
  * any object that has a public isEmpty():boolean or a valid toString() method
  */
-public class NotEmptyValidator implements ConstraintValidator<NotEmpty, 
Object> {
-    @Override
-    public void initialize(NotEmpty constraintAnnotation) {
-        // do nothing
-    }
+public class NotEmptyValidator implements 
ConstraintValidator<javax.validation.constraints.NotEmpty, Object> {
 
     @Override
     public boolean isValid(Object value, ConstraintValidatorContext context) {
@@ -45,15 +41,12 @@ public class NotEmptyValidator implements 
ConstraintValidator<NotEmpty, Object>
         try {
             final Method isEmptyMethod = value.getClass().getMethod("isEmpty");
             if (isEmptyMethod != null) {
-                return !((Boolean) isEmptyMethod.invoke(value)).booleanValue();
+                return !Boolean.TRUE.equals(isEmptyMethod.invoke(value));
             }
-        } catch (IllegalAccessException iae) {
-            // do nothing
-        } catch (NoSuchMethodException nsme) {
-            // do nothing
-        } catch (InvocationTargetException ite) {
+        } catch (IllegalAccessException | NoSuchMethodException | 
InvocationTargetException iae) {
             // do nothing
         }
-        return !value.toString().isEmpty();
+        final String s = value.toString();
+        return s != null && !s.isEmpty();
     }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
new file mode 100644
index 0000000..320c105
--- /dev/null
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.bval.constraints;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Description: <br/>
+ */
+public class NotEmptyValidatorForCharSequence
+    implements ConstraintValidator<javax.validation.constraints.NotEmpty, 
CharSequence> {
+
+    @Override
+    public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
+        return value == null || value.length() > 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
index 5faab13..da0c438 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
@@ -25,11 +25,8 @@ import java.util.Collection;
 /**
  * Description: <br/>
  */
-public class NotEmptyValidatorForCollection implements 
ConstraintValidator<NotEmpty, Collection<?>> {
-    @Override
-    public void initialize(NotEmpty constraintAnnotation) {
-        // do nothing
-    }
+public class NotEmptyValidatorForCollection
+    implements ConstraintValidator<javax.validation.constraints.NotEmpty, 
Collection<?>> {
 
     @Override
     public boolean isValid(Collection<?> value, ConstraintValidatorContext 
context) {

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
index b5a4f49..6a5221e 100644
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
@@ -25,11 +25,7 @@ import java.util.Map;
 /**
  * Description: <br/>
  */
-public class NotEmptyValidatorForMap implements ConstraintValidator<NotEmpty, 
Map<?, ?>> {
-    @Override
-    public void initialize(NotEmpty constraintAnnotation) {
-        // do nothing
-    }
+public class NotEmptyValidatorForMap implements 
ConstraintValidator<javax.validation.constraints.NotEmpty, Map<?, ?>> {
 
     @Override
     public boolean isValid(Map<?, ?> value, ConstraintValidatorContext 
context) {

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
deleted file mode 100644
index 9fc3023..0000000
--- 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-
-/**
- * Description: <br/>
- */
-public class NotEmptyValidatorForString implements 
ConstraintValidator<NotEmpty, String> {
-    @Override
-    public void initialize(NotEmpty constraintAnnotation) {
-        // do nothing
-    }
-
-    @Override
-    public boolean isValid(String value, ConstraintValidatorContext context) {
-        return value == null || !value.isEmpty();
-    }
-}

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
index b39d493..c14cff2 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
@@ -24,10 +24,6 @@ import javax.validation.constraints.NotNull;
 
 /** valid when object is NOT null */
 public class NotNullValidator implements ConstraintValidator<NotNull, Object> {
-    @Override
-    public void initialize(NotNull constraintAnnotation) {
-        // do nothing
-    }
 
     @Override
     public boolean isValid(Object value, ConstraintValidatorContext context) {

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
index 7c16296..523ef75 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
@@ -28,11 +28,6 @@ import javax.validation.constraints.Null;
 public class NullValidator implements ConstraintValidator<Null, Object> {
 
     @Override
-    public void initialize(Null annotation) {
-        // do nothing
-    }
-
-    @Override
     public boolean isValid(Object object, ConstraintValidatorContext context) {
         return object == null;
     }

http://git-wip-us.apache.org/repos/asf/bval/blob/40fc20f6/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
new file mode 100644
index 0000000..fe8f59c
--- /dev/null
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.bval.constraints;
+
+import java.util.function.IntPredicate;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Negative;
+
+import org.apache.bval.util.Validate;
+
+/**
+ * Description: validate positive/negative number values.
+ */
+public abstract class NumberSignValidator implements 
ConstraintValidator<Negative, Number> {
+    public static class ForPositive extends NumberSignValidator {
+        public static class OrZero extends NumberSignValidator {
+            public OrZero() {
+                super(n -> n >= 0);
+            }
+        }
+
+        public ForPositive() {
+            super(n -> n > 0);
+        }
+    }
+
+    public static class ForNegative extends NumberSignValidator {
+        public static class OrZero extends NumberSignValidator {
+            public OrZero() {
+                super(n -> n <= 0);
+            }
+        }
+
+        public ForNegative() {
+            super(n -> n < 0);
+        }
+    }
+    
+    private final IntPredicate comparisonTest;
+    
+    protected NumberSignValidator(IntPredicate comparisonTest) {
+        super();
+        this.comparisonTest = Validate.notNull(comparisonTest);
+    }
+
+    @Override
+    public boolean isValid(Number value, ConstraintValidatorContext context) {
+        return value == null || 
comparisonTest.test(Double.compare(value.doubleValue(), 0.0));
+    }
+}

Reply via email to