Skip to content

Commit d981e75

Browse files
author
pith
committed
Use standard validation exception
1 parent 8a2666b commit d981e75

24 files changed

+381
-435
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Version 2.2.0 (2016-01-28)
22

3-
* [new] An ExceptionMapper for ValidationException is provided by default.
3+
* [new] An `ExceptionMapper` for `ConstraintViolationException` is provided by default.
4+
* [new] The `ValidatorFactory` is now injectable.
5+
* [brk] The `ValidationService` is deprecated.
6+
* [brk] The `org.seedstack.validation.ValidationException` is replaced by the standard `ConstraintViolationException`.
47

src/it/java/org/seedstack/validation/internal/FieldValidationKoIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
import org.junit.runner.RunWith;
1212
import org.seedstack.seed.it.Expect;
1313
import org.seedstack.seed.it.SeedITRunner;
14-
import org.seedstack.validation.ValidationException;
1514
import org.seedstack.validation.internal.pojo.FieldValidationKO;
1615

1716
import javax.inject.Inject;
17+
import javax.validation.ConstraintViolationException;
1818

1919
import static org.assertj.core.api.Assertions.assertThat;
2020

2121
@RunWith(SeedITRunner.class)
22-
@Expect(value = ValidationException.class, step = Expect.TestingStep.INSTANTIATION)
22+
@Expect(value = ConstraintViolationException.class, step = Expect.TestingStep.INSTANTIATION)
2323
public class FieldValidationKoIT {
2424

2525
@Inject
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Copyright (c) 2013-2015, The SeedStack authors <http://seedstack.org>
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7+
*/
8+
package org.seedstack.validation.internal;
9+
10+
import org.assertj.core.api.Assertions;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.seedstack.seed.it.SeedITRunner;
14+
15+
import javax.inject.Inject;
16+
import javax.validation.Validator;
17+
import javax.validation.ValidatorFactory;
18+
19+
@RunWith(SeedITRunner.class)
20+
public class InjectionsIT {
21+
22+
@Inject
23+
private ValidatorFactory validatorFactory;
24+
25+
@Inject
26+
private Validator validator;
27+
28+
@Test
29+
public void isValidatorFactoryInjectable() {
30+
Assertions.assertThat(validatorFactory).isNotNull();
31+
}
32+
33+
@Test
34+
public void isValidatorInjectable() {
35+
Assertions.assertThat(validator).isNotNull();
36+
}
37+
}

src/it/java/org/seedstack/validation/internal/ValidationPluginIT.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
*/
88
package org.seedstack.validation.internal;
99

10-
import org.seedstack.validation.ValidationException;
1110
import org.assertj.core.api.Assertions;
1211
import org.junit.Test;
1312
import org.junit.runner.RunWith;
1413
import org.seedstack.seed.it.SeedITRunner;
1514
import org.seedstack.validation.internal.pojo.*;
1615

1716
import javax.inject.Inject;
17+
import javax.validation.ConstraintViolationException;
1818

1919
@RunWith(SeedITRunner.class)
2020
public class ValidationPluginIT {
@@ -44,7 +44,7 @@ public void param_not_null_validations_ok() {
4444
serviceParam.validateNotNullParam("");
4545
}
4646

47-
@Test(expected = ValidationException.class)
47+
@Test(expected = ConstraintViolationException.class)
4848
public void param_not_null_validations_are_well_intercepted() {
4949
serviceParam.validateNotNullParam(null);
5050
}
@@ -55,7 +55,7 @@ public void param_valid_validations_ok() {
5555
}
5656

5757

58-
@Test(expected = ValidationException.class)
58+
@Test(expected = ConstraintViolationException.class)
5959
public void param_valid_validations_are_well_intercepted() {
6060
serviceParam.validateValidParam(new Pojo(Pojo.State.INVALID));
6161
}
@@ -65,7 +65,7 @@ public void not_null_return_validations_ok() {
6565
serviceReturnType.validateNotNullReturn("");
6666
}
6767

68-
@Test(expected = ValidationException.class)
68+
@Test(expected = ConstraintViolationException.class)
6969
public void not_null_return_validations_are_well_intercepted() {
7070
serviceReturnType.validateNotNullReturn(null);
7171
}
@@ -75,7 +75,7 @@ public void valid_return_validations_ok() {
7575
serviceReturnType.validateValidReturn(Pojo.State.VALID);
7676
}
7777

78-
@Test(expected = ValidationException.class)
78+
@Test(expected = ConstraintViolationException.class)
7979
public void valid_return_validations_are_well_intercepted() {
8080
serviceReturnType.validateValidReturn(Pojo.State.INVALID);
8181
}

src/it/java/org/seedstack/validation/internal/ValidationServiceIT.java

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@
1111
import org.junit.Test;
1212
import org.junit.runner.RunWith;
1313
import org.seedstack.seed.it.SeedITRunner;
14-
import org.seedstack.validation.ValidationException;
15-
import org.seedstack.validation.ValidationService;
1614
import org.seedstack.validation.internal.pojo.Bean;
1715
import org.seedstack.validation.internal.pojo.MyImpl;
1816
import org.seedstack.validation.internal.pojo.Pojo;
1917
import org.seedstack.validation.internal.pojo.PojoWithDeepValidation;
2018

2119
import javax.inject.Inject;
22-
import javax.validation.ConstraintViolation;
23-
import java.util.Set;
20+
import javax.validation.ConstraintViolationException;
2421

2522
import static org.assertj.core.api.Assertions.assertThat;
2623

@@ -39,18 +36,12 @@ public void validationServiceIsInjected() {
3936
public void throwsExceptionOnInvalidPojo() {
4037
try {
4138
validationService.staticallyHandle(new Pojo(Pojo.State.INVALID));
42-
Assertions.failBecauseExceptionWasNotThrown(ValidationException.class);
43-
} catch (ValidationException validationException) {
44-
expectViolations(validationException, 3);
39+
Assertions.failBecauseExceptionWasNotThrown(ConstraintViolationException.class);
40+
} catch (ConstraintViolationException exception) {
41+
assertThat(exception.getConstraintViolations()).hasSize(3);
4542
}
4643
}
4744

48-
private void expectViolations(ValidationException validationException, int expected) {
49-
Set<ConstraintViolation<?>> constraintViolations = validationException
50-
.get(ValidationService.JAVAX_VALIDATION_CONSTRAINT_VIOLATIONS);
51-
assertThat(constraintViolations).hasSize(expected);
52-
}
53-
5445
@Test
5546
public void doNothingOnValidPojo() {
5647
validationService.staticallyHandle(new Pojo(Pojo.State.VALID));
@@ -60,19 +51,19 @@ public void doNothingOnValidPojo() {
6051
public void throwsExceptionOnDeepValidation() {
6152
try {
6253
validationService.staticallyHandle(new PojoWithDeepValidation());
63-
Assertions.failBecauseExceptionWasNotThrown(ValidationException.class);
64-
} catch (ValidationException validationException) {
65-
expectViolations(validationException, 4);
54+
Assertions.failBecauseExceptionWasNotThrown(ConstraintViolationException.class);
55+
} catch (ConstraintViolationException exception) {
56+
assertThat(exception.getConstraintViolations()).hasSize(4);
6657
}
6758
}
6859

6960
@Test
7061
public void validationShouldWorkOnInterface() {
7162
try {
7263
validationService.staticallyHandle(new MyImpl());
73-
Assertions.failBecauseExceptionWasNotThrown(ValidationException.class);
74-
} catch (ValidationException validationException) {
75-
expectViolations(validationException, 1);
64+
Assertions.failBecauseExceptionWasNotThrown(ConstraintViolationException.class);
65+
} catch (ConstraintViolationException exception) {
66+
assertThat(exception.getConstraintViolations()).hasSize(1);
7667
}
7768
}
7869

@@ -82,9 +73,9 @@ public void validationShouldWorkOnGetter() {
8273
Bean candidate = new Bean();
8374
candidate.setHour(25);
8475
validationService.staticallyHandle(candidate);
85-
Assertions.failBecauseExceptionWasNotThrown(ValidationException.class);
86-
} catch (ValidationException validationException) {
87-
expectViolations(validationException, 1);
76+
Assertions.failBecauseExceptionWasNotThrown(ConstraintViolationException.class);
77+
} catch (ConstraintViolationException exception) {
78+
assertThat(exception.getConstraintViolations()).hasSize(1);
8879
}
8980
}
9081
}

src/main/java/org/seedstack/validation/ValidationException.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
* Exception class for validation errors.
1616
*
1717
18+
* @deprecated This exception is no longer used and will be removed in the next version.
19+
* Use the standard {@link javax.validation.ConstraintViolationException} instead.
1820
*/
21+
@Deprecated
1922
public class ValidationException extends SeedException {
20-
private static final long serialVersionUID = 1L;
2123

22-
public ValidationException(ErrorCode errorCode) {
23-
super(errorCode);
24-
}
24+
public ValidationException(ErrorCode errorCode) {
25+
super(errorCode);
26+
}
2527
}

src/main/java/org/seedstack/validation/ValidationService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
* Interface for validation service.
1616
*
1717
18+
* @deprecated ValidationService will be removed in the next version. Use {@link javax.validation.Validator} instead.
19+
* It can be directly injected or retrieved through the {@link javax.validation.ValidatorFactory}.
1820
*/
21+
@Deprecated
1922
public interface ValidationService {
2023

2124
String JAVAX_VALIDATION_CONSTRAINT_VIOLATIONS = "Set<javax.validation.ConstraintViolation>";

src/main/java/org/seedstack/validation/internal/ValidationMethodInterceptor.java renamed to src/main/java/org/seedstack/validation/internal/MethodValidationInterceptor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99

1010
import org.aopalliance.intercept.MethodInterceptor;
1111
import org.aopalliance.intercept.MethodInvocation;
12-
import org.seedstack.validation.ValidationService;
1312

14-
class ValidationMethodInterceptor implements MethodInterceptor {
13+
class MethodValidationInterceptor implements MethodInterceptor {
1514
private final ValidationService validationService;
1615

17-
ValidationMethodInterceptor(ValidationService validationService) {
16+
MethodValidationInterceptor(ValidationService validationService) {
1817
this.validationService = validationService;
1918
}
2019

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Copyright (c) 2013-2015, The SeedStack authors <http://seedstack.org>
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7+
*/
8+
package org.seedstack.validation.internal;
9+
10+
import com.google.inject.spi.ProvisionListener;
11+
12+
/**
13+
* Validates provisioned instances eligible for static validation.
14+
*/
15+
class StaticValidationProvisionListener implements ProvisionListener {
16+
17+
private ValidationService validationService;
18+
19+
public StaticValidationProvisionListener(ValidationService validationService) {
20+
this.validationService = validationService;
21+
}
22+
23+
@Override
24+
public <A> void onProvision(ProvisionInvocation<A> provision) {
25+
A injectee = provision.provision();
26+
validationService.staticallyHandle(injectee);
27+
}
28+
}

src/main/java/org/seedstack/validation/internal/ValidationErrorCode.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@
1010
import org.seedstack.seed.ErrorCode;
1111

1212
enum ValidationErrorCode implements ErrorCode {
13-
VALIDATION_ISSUE,
1413
DYNAMIC_VALIDATION_IS_NOT_SUPPORTED
1514
}

0 commit comments

Comments
 (0)