Skip to content

Commit bd80e03

Browse files
Constructor validation injection
1 parent 5b4eab5 commit bd80e03

File tree

4 files changed

+74
-37
lines changed

4 files changed

+74
-37
lines changed

validation/methods/src/main/java/org/javaee7/validation/methods/MyBean2.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,27 @@
4040
package org.javaee7.validation.methods;
4141

4242
import javax.enterprise.context.RequestScoped;
43-
import javax.validation.constraints.NotNull;
43+
import javax.inject.Inject;
44+
import javax.validation.Valid;
4445

4546
/**
4647
* @author Arun Gupta
4748
*/
4849
@RequestScoped
4950
public class MyBean2 {
50-
private String value;
51-
52-
public MyBean2(@NotNull String value) {
51+
private MyParameter value;
52+
53+
public MyBean2() {
54+
55+
}
56+
57+
@Inject
58+
public MyBean2(@Valid MyParameter value) {
5359
this.value = value;
5460
}
61+
62+
63+
public MyParameter getValue() {
64+
return value;
65+
}
5566
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.javaee7.validation.methods;
2+
3+
import javax.validation.constraints.NotNull;
4+
5+
public class MyParameter {
6+
7+
@NotNull
8+
public String value;
9+
10+
public String getValue() {
11+
return value;
12+
}
13+
14+
public void setValue(String value) {
15+
this.value = value;
16+
}
17+
}

validation/methods/src/test/java/org/javaee7/validation/methods/ConstructorParametersConstraintsTest.java

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
package org.javaee7.validation.methods;
22

3-
import static org.hamcrest.CoreMatchers.*;
4-
import static org.junit.Assert.*;
5-
6-
import java.lang.reflect.Constructor;
7-
import java.util.Set;
8-
9-
import javax.inject.Inject;
10-
import javax.validation.ConstraintViolation;
11-
import javax.validation.Validator;
12-
import javax.validation.executable.ExecutableValidator;
13-
143
import org.jboss.arquillian.container.test.api.Deployment;
154
import org.jboss.arquillian.junit.Arquillian;
165
import org.jboss.shrinkwrap.api.Archive;
@@ -22,6 +11,16 @@
2211
import org.junit.rules.ExpectedException;
2312
import org.junit.runner.RunWith;
2413

14+
import javax.inject.Inject;
15+
import javax.validation.ConstraintViolation;
16+
import javax.validation.Validator;
17+
import javax.validation.executable.ExecutableValidator;
18+
import java.lang.reflect.Constructor;
19+
import java.util.Set;
20+
21+
import static org.hamcrest.CoreMatchers.*;
22+
import static org.junit.Assert.*;
23+
2524
/**
2625
* @author Jakub Marchwicki
2726
*/
@@ -36,33 +35,39 @@ public class ConstructorParametersConstraintsTest {
3635

3736
@Deployment
3837
public static Archive<?> deployment() {
39-
return ShrinkWrap.create(JavaArchive.class).addClasses(MyBean2.class)
38+
return ShrinkWrap.create(JavaArchive.class)
39+
.addClasses(MyBean2.class, MyParameter.class)
4040
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
4141
}
4242

4343
@Test
4444
public void constructorViolationsWhenNullParameters() throws NoSuchMethodException, SecurityException {
45+
final MyParameter parameter = new MyParameter();
46+
4547
ExecutableValidator methodValidator = validator.forExecutables();
4648
Constructor<MyBean2> constructor = MyBean2.class
47-
.getConstructor(String.class);
49+
.getConstructor(parameter.getClass());
4850

4951
Set<ConstraintViolation<MyBean2>> constraints = methodValidator
50-
.validateConstructorParameters(constructor, new Object[] {null});
52+
.validateConstructorParameters(constructor, new Object[] {parameter});
5153

5254
ConstraintViolation<MyBean2> violarion = constraints.iterator().next();
5355
assertThat(constraints.size(), equalTo(1));
5456
assertThat(violarion.getMessageTemplate(), equalTo("{javax.validation.constraints.NotNull.message}"));
55-
assertThat(violarion.getPropertyPath().toString(), equalTo("MyBean2.arg0"));
57+
assertThat(violarion.getPropertyPath().toString(), equalTo("MyBean2.arg0.value"));
5658
}
5759

5860
@Test
5961
public void constructorViolationsWhenNotNullParameters() throws NoSuchMethodException, SecurityException {
60-
ExecutableValidator methodValidator = validator.forExecutables();
62+
final MyParameter parameter = new MyParameter();
63+
parameter.setValue("foo");
64+
65+
ExecutableValidator methodValidator = validator.forExecutables();
6166
Constructor<MyBean2> constructor = MyBean2.class
62-
.getConstructor(String.class);
67+
.getConstructor(parameter.getClass());
6368

6469
Set<ConstraintViolation<MyBean2>> constraints = methodValidator
65-
.validateConstructorParameters(constructor, new Object[] {"foo"});
70+
.validateConstructorParameters(constructor, new Object[] {parameter});
6671

6772
assertThat(constraints.isEmpty(), equalTo(true));
6873
}
Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.javaee7.validation.methods;
22

3-
import javax.enterprise.inject.Instance;
4-
import javax.inject.Inject;
5-
63
import org.jboss.arquillian.container.test.api.Deployment;
74
import org.jboss.arquillian.junit.Arquillian;
85
import org.jboss.shrinkwrap.api.Archive;
@@ -14,27 +11,34 @@
1411
import org.junit.rules.ExpectedException;
1512
import org.junit.runner.RunWith;
1613

14+
import javax.inject.Inject;
15+
import javax.validation.ConstraintViolationException;
16+
1717
/**
1818
* @author Jakub Marchwicki
1919
*/
2020
@RunWith(Arquillian.class)
2121
public class ConstructorParametersInjectionTest {
2222

23-
@Inject
24-
Instance<MyBean2> bean;
23+
@Inject
24+
MyBean2 bean;
2525

2626
@Rule
2727
public ExpectedException thrown = ExpectedException.none();
2828

29-
@Deployment
30-
public static Archive<?> deployment() {
31-
return ShrinkWrap.create(JavaArchive.class).addClasses(MyBean2.class)
32-
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
33-
}
34-
35-
@Test
36-
public void constructorViolationsWhenNullParameters() throws NoSuchMethodException, SecurityException {
37-
bean.get();
38-
}
29+
@Deployment
30+
public static Archive<?> deployment() {
31+
return ShrinkWrap.create(JavaArchive.class)
32+
.addClasses(MyBean2.class, MyParameter.class)
33+
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
34+
}
35+
36+
@Test
37+
public void constructorViolationsWhenNullParameters() {
38+
thrown.expect(ConstraintViolationException.class);
39+
thrown.expectMessage("javax.validation.constraints.NotNull");
40+
thrown.expectMessage("MyBean2.arg0.value");
41+
bean.getValue();
42+
}
3943

4044
}

0 commit comments

Comments
 (0)