From 4d94ad5a495f9ef03ed9ebf2d3e13ce313dc2208 Mon Sep 17 00:00:00 2001 From: Hardy Ferentschik Date: Thu, 2 Feb 2012 14:40:11 +0100 Subject: [PATCH 1/3] HV-472 plugin version updates --- pom.xml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 6b71582d2b..a62a0ad7a7 100644 --- a/pom.xml +++ b/pom.xml @@ -185,7 +185,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 1.0-beta-1 + 1.0.1 enforce-java @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-release-plugin - 2.0 + 2.2.2 deploy @@ -217,7 +217,7 @@ org.apache.maven.plugins maven-jar-plugin - 2.3.2 + 2.4 @@ -242,7 +242,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.11 + 2.12 once true @@ -254,7 +254,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 2.11 + 2.12 generate-test-report @@ -272,12 +272,12 @@ org.apache.maven.plugins maven-failsafe-plugin - 2.11 + 2.12 org.apache.maven.plugins maven-source-plugin - 2.1.1 + 2.1.2 attach-sources @@ -290,17 +290,17 @@ org.apache.maven.plugins maven-dependency-plugin - 2.2 + 2.4 org.apache.maven.plugins maven-assembly-plugin - 2.2 + 2.3 org.apache.maven.plugins maven-release-plugin - 2.0 + 2.2.2 clean install true @@ -310,12 +310,12 @@ org.apache.maven.plugins maven-deploy-plugin - 2.5 + 2.7 org.codehaus.mojo exec-maven-plugin - 1.1.1 + 1.2.1 org.codehaus.mojo @@ -344,12 +344,12 @@ org.apache.felix maven-bundle-plugin - 2.0.1 + 2.3.6 org.apache.maven.plugins maven-archetype-plugin - 2.0-alpha-5 + 2.2 generate-archetype-install @@ -378,7 +378,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.7 + 2.8.1 true ${project.basedir}/../src/main/javadoc From 345e81bb43c7917f5d3641df511fd57fa237c920 Mon Sep 17 00:00:00 2001 From: Hardy Ferentschik Date: Thu, 2 Feb 2012 14:40:50 +0100 Subject: [PATCH 2/3] HV-472 using java.net.IDN to support internationalized domain names in emails --- .../constraints/impl/EmailValidator.java | 4 +- .../constraints/impl/EmailValidatorTest.java | 84 +++++++++++-------- 2 files changed, 53 insertions(+), 35 deletions(-) diff --git a/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java b/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java index 5c4a4db28f..f4e138e2ad 100644 --- a/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java +++ b/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java @@ -1,5 +1,6 @@ package org.hibernate.validator.constraints.impl; +import java.net.IDN; import java.util.regex.Matcher; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; @@ -42,7 +43,8 @@ public boolean isValid(CharSequence value, ConstraintValidatorContext context) { if ( value == null || value.length() == 0 ) { return true; } - Matcher m = pattern.matcher( value ); + String asciiString = IDN.toASCII( value.toString() ); + Matcher m = pattern.matcher( asciiString ); return m.matches(); } } diff --git a/hibernate-validator/src/test/java/org/hibernate/validator/test/constraints/impl/EmailValidatorTest.java b/hibernate-validator/src/test/java/org/hibernate/validator/test/constraints/impl/EmailValidatorTest.java index 5f9a6f717a..1438c9c4b4 100644 --- a/hibernate-validator/src/test/java/org/hibernate/validator/test/constraints/impl/EmailValidatorTest.java +++ b/hibernate-validator/src/test/java/org/hibernate/validator/test/constraints/impl/EmailValidatorTest.java @@ -39,61 +39,77 @@ public static void init() { @Test public void testNullAndEmptyString() throws Exception { - isRightEmail( "" ); - isRightEmail( null ); + isValidEmail( "" ); + isValidEmail( null ); } @Test public void testValidEmail() throws Exception { - isRightEmail( "emmanuel@hibernate.org" ); - isRightEmail( "emmanuel@hibernate" ); - isRightEmail( "emma-n_uel@hibernate" ); - isRightEmail( "emma+nuel@hibernate.org" ); - isRightEmail( "emma=nuel@hibernate.org" ); - isRightEmail( "emmanuel@[123.12.2.11]" ); - isRightEmail( "*@example.net" ); - isRightEmail( "fred&barny@example.com" ); - isRightEmail( "---@example.com" ); - isRightEmail( "foo-bar@example.net" ); - isRightEmail( "mailbox.sub1.sub2@this-domain" ); + isValidEmail( "emmanuel@hibernate.org" ); + isValidEmail( "emmanuel@hibernate" ); + isValidEmail( "emma-n_uel@hibernate" ); + isValidEmail( "emma+nuel@hibernate.org" ); + isValidEmail( "emma=nuel@hibernate.org" ); + isValidEmail( "emmanuel@[123.12.2.11]" ); + isValidEmail( "*@example.net" ); + isValidEmail( "fred&barny@example.com" ); + isValidEmail( "---@example.com" ); + isValidEmail( "foo-bar@example.net" ); + isValidEmail( "mailbox.sub1.sub2@this-domain" ); } @Test public void testInValidEmail() throws Exception { - isWrongEmail( "emmanuel.hibernate.org" ); - isWrongEmail( "emma nuel@hibernate.org" ); - isWrongEmail( "emma(nuel@hibernate.org" ); - isWrongEmail( "emmanuel@" ); - isWrongEmail( "emma\nnuel@hibernate.org" ); - isWrongEmail( "emma@nuel@hibernate.org" ); - isWrongEmail( "Just a string" ); - isWrongEmail( "string" ); - isWrongEmail( "me@" ); - isWrongEmail( "@example.com" ); - isWrongEmail( "me.@example.com" ); - isWrongEmail( ".me@example.com" ); - isWrongEmail( "me@example..com" ); - isWrongEmail( "me\\@example.com" ); + isInvalidEmail( "emmanuel.hibernate.org" ); + isInvalidEmail( "emma nuel@hibernate.org" ); + isInvalidEmail( "emma(nuel@hibernate.org" ); + isInvalidEmail( "emmanuel@" ); + isInvalidEmail( "emma\nnuel@hibernate.org" ); + isInvalidEmail( "emma@nuel@hibernate.org" ); + isInvalidEmail( "Just a string" ); + isInvalidEmail( "string" ); + isInvalidEmail( "me@" ); + isInvalidEmail( "@example.com" ); + isInvalidEmail( "me.@example.com" ); + isInvalidEmail( ".me@example.com" ); + isInvalidEmail( "me@example..com" ); + isInvalidEmail( "me\\@example.com" ); } @Test @TestForIssue(jiraKey = "HV-339") public void testAccent() { - isRightEmail( "Test^Email@example.com" ); + isValidEmail( "Test^Email@example.com" ); } @Test @TestForIssue(jiraKey = "HV-502") public void testValidEmailCharSequence() throws Exception { - isRightEmail( new MyCustomStringImpl( "emmanuel@hibernate.org" ) ); - isWrongEmail( new MyCustomStringImpl( "@example.com" ) ); + isValidEmail( new MyCustomStringImpl( "emmanuel@hibernate.org" ) ); + isInvalidEmail( new MyCustomStringImpl( "@example.com" ) ); } - private void isRightEmail(CharSequence email) { - assertTrue( validator.isValid( email, null ), "Expected a valid email." ); + @Test + @TestForIssue(jiraKey = "HV-472") + public void testMailWithInternationalDomainName() throws Exception { + isValidEmail( "myname@östereich.at", "A valid email address with umlaut" ); + isValidEmail( "θσερ@εχαμπλε.ψομ", "A valid greek email address" ); + isInvalidEmail( "θσερ.εχαμπλε.ψομ", "Email does not contain an @ character and should be invalid" ); + } + + private void isValidEmail(CharSequence email, String message) { + assertTrue( validator.isValid( email, null ), message ); + } + + private void isValidEmail(CharSequence email) { + isValidEmail( email, "Expected a valid email." ); + } + + private void isInvalidEmail(CharSequence email, String message) { + assertFalse( validator.isValid( email, null ), message ); } - private void isWrongEmail(CharSequence email) { - assertFalse( validator.isValid( email, null ), "Expected a invalid email." ); + private void isInvalidEmail(CharSequence email) { + isInvalidEmail( email, "Expected a invalid email." ); } } From 5159a9e1e3a87d922e6c9b3c7be90c0c8c1626d1 Mon Sep 17 00:00:00 2001 From: Hardy Ferentschik Date: Thu, 2 Feb 2012 16:09:03 +0100 Subject: [PATCH 3/3] HV-472 Adding note about Java 6 requirement --- .../hibernate/validator/constraints/impl/EmailValidator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java b/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java index f4e138e2ad..b7b7fa527e 100644 --- a/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java +++ b/hibernate-validator/src/main/java/org/hibernate/validator/constraints/impl/EmailValidator.java @@ -18,6 +18,9 @@ * implement a 100% compliant email validator. This implementation is a trade-off trying to match most email while ignoring * for example emails with double quotes or comments. *

+ *

+ * Note: This validator required Java 6, because it uses {@code java.lang.IDN} to support internationalized domain names (IDNs). + *

* * @author Emmanuel Bernard * @author Hardy Ferentschik