Skip to content

Commit 211ae37

Browse files
authored
Merge pull request quarkusio#42292 from marko-bekhta/dep/hibernate-validator-9-upgrade
Upgrade to Hibernate Validator 9.0
2 parents 3c85a47 + 37cf4cc commit 211ae37

File tree

18 files changed

+248
-9
lines changed

18 files changed

+248
-9
lines changed

bom/application/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
<jakarta.annotation-api.version>3.0.0</jakarta.annotation-api.version>
6565
<jakarta.authentication-api>3.0.0</jakarta.authentication-api>
6666
<jakarta.authorization-api.version>2.1.0</jakarta.authorization-api.version>
67-
<jakarta.el-api.version>5.0.1</jakarta.el-api.version>
67+
<jakarta.el-api.version>6.0.1</jakarta.el-api.version>
6868
<jakarta.enterprise.cdi-api.version>4.1.0</jakarta.enterprise.cdi-api.version>
6969
<jakarta.inject-api.version>2.0.1</jakarta.inject-api.version>
7070
<jakarta.interceptor-api.version>2.2.0</jakarta.interceptor-api.version>
@@ -76,7 +76,7 @@
7676
<jakarta.resource-api.version>2.1.0</jakarta.resource-api.version>
7777
<jakarta.servlet-api.version>6.0.0</jakarta.servlet-api.version>
7878
<jakarta.transaction-api.version>2.0.1</jakarta.transaction-api.version>
79-
<jakarta.validation-api.version>3.0.2</jakarta.validation-api.version>
79+
<jakarta.validation-api.version>3.1.0</jakarta.validation-api.version>
8080
<jakarta.websocket-api.version>2.1.1</jakarta.websocket-api.version>
8181
<jakarta.ws.rs-api.version>3.1.0</jakarta.ws.rs-api.version>
8282
<jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>

docs/src/main/asciidoc/validation.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,8 @@ so that we could register the appropriate classes for reflection.
585585

586586
To configure the `ValidatorFactory`, use the exposed configuration properties and the CDI integration.
587587

588-
Consequently, the only way to define constraints in Quarkus is by annotating your classes.
588+
While configuration of the validator factory is not possible through XML, constraint declaration is.
589+
Quarkus accepts constraints defined by annotations in your classes or in the `validation.xml`.
589590

590591
=== ValidatorFactory and native executables
591592

extensions/hibernate-validator/runtime/src/main/java/io/quarkus/hibernate/validator/runtime/ArcConstraintValidatorFactoryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import jakarta.validation.ConstraintValidator;
88
import jakarta.validation.ConstraintValidatorFactory;
99

10-
import org.hibernate.validator.internal.util.privilegedactions.NewInstance;
10+
import org.hibernate.validator.internal.util.actions.NewInstance;
1111

1212
import io.quarkus.arc.Arc;
1313
import io.quarkus.arc.InstanceHandle;
@@ -32,7 +32,7 @@ public class ArcConstraintValidatorFactoryImpl implements ConstraintValidatorFac
3232
}
3333
return instance;
3434
}
35-
return NewInstance.action(key, "ConstraintValidator").run();
35+
return NewInstance.action(key, "ConstraintValidator");
3636
}
3737

3838
@Override

extensions/hibernate-validator/runtime/src/main/java/io/quarkus/hibernate/validator/runtime/HibernateBeanValidationConfigValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import org.hibernate.validator.PredefinedScopeHibernateValidator;
1010
import org.hibernate.validator.PredefinedScopeHibernateValidatorConfiguration;
11-
import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl;
11+
import org.hibernate.validator.constraintvalidation.spi.DefaultConstraintValidatorFactory;
1212

1313
import io.smallrye.config.validator.BeanValidationConfigValidator;
1414

@@ -24,7 +24,7 @@ public HibernateBeanValidationConfigValidator(Set<String> constraints, Set<Class
2424
.ignoreXmlConfiguration()
2525
.builtinConstraints(constraints)
2626
.initializeBeanMetaData(classesToBeValidated)
27-
.constraintValidatorFactory(new ConstraintValidatorFactoryImpl())
27+
.constraintValidatorFactory(new DefaultConstraintValidatorFactory())
2828
.traversableResolver(new TraverseAllTraversableResolver());
2929

3030
ConfigValidatorHolder.initialize(configuration.buildValidatorFactory());

integration-tests/hibernate-validator-resteasy-reactive/pom.xml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
<groupId>io.quarkus</groupId>
2323
<artifactId>quarkus-rest-jaxb</artifactId>
2424
</dependency>
25+
<dependency>
26+
<groupId>io.quarkus</groupId>
27+
<artifactId>quarkus-rest-client</artifactId>
28+
</dependency>
29+
<dependency>
30+
<groupId>io.quarkus</groupId>
31+
<artifactId>quarkus-rest-client-jsonb</artifactId>
32+
</dependency>
2533
<dependency>
2634
<groupId>io.quarkus</groupId>
2735
<artifactId>quarkus-hibernate-validator</artifactId>
@@ -146,6 +154,32 @@
146154
</exclusion>
147155
</exclusions>
148156
</dependency>
157+
<dependency>
158+
<groupId>io.quarkus</groupId>
159+
<artifactId>quarkus-rest-client-deployment</artifactId>
160+
<version>${project.version}</version>
161+
<type>pom</type>
162+
<scope>test</scope>
163+
<exclusions>
164+
<exclusion>
165+
<groupId>*</groupId>
166+
<artifactId>*</artifactId>
167+
</exclusion>
168+
</exclusions>
169+
</dependency>
170+
<dependency>
171+
<groupId>io.quarkus</groupId>
172+
<artifactId>quarkus-rest-client-jsonb-deployment</artifactId>
173+
<version>${project.version}</version>
174+
<type>pom</type>
175+
<scope>test</scope>
176+
<exclusions>
177+
<exclusion>
178+
<groupId>*</groupId>
179+
<artifactId>*</artifactId>
180+
</exclusion>
181+
</exclusions>
182+
</dependency>
149183
</dependencies>
150184

151185
<build>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.quarkus.it.hibernate.validator.restclient;
2+
3+
import jakarta.validation.constraints.Max;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
public class RestClientEntity {
7+
@Max(value = 5, groups = ErrorGroup.class)
8+
public int number;
9+
@NotNull
10+
public String string;
11+
12+
public RestClientEntity() {
13+
}
14+
15+
public RestClientEntity(int number, String string) {
16+
this.number = number;
17+
this.string = string;
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return "RestClientEntity{" +
23+
"number=" + number +
24+
", string='" + string + '\'' +
25+
'}';
26+
}
27+
28+
public interface ErrorGroup {
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.quarkus.it.hibernate.validator.restclient;
2+
3+
import jakarta.validation.Valid;
4+
import jakarta.validation.constraints.NotNull;
5+
import jakarta.validation.groups.ConvertGroup;
6+
import jakarta.ws.rs.Consumes;
7+
import jakarta.ws.rs.POST;
8+
import jakarta.ws.rs.Path;
9+
import jakarta.ws.rs.Produces;
10+
import jakarta.ws.rs.core.MediaType;
11+
12+
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
13+
14+
@RegisterRestClient
15+
@Path("/rest-client")
16+
public interface RestClientInterface {
17+
@POST
18+
@Consumes(MediaType.APPLICATION_JSON)
19+
@Produces(MediaType.APPLICATION_JSON)
20+
RestClientEntity doSomething(
21+
@Valid @ConvertGroup(to = RestClientEntity.ErrorGroup.class) @NotNull RestClientEntity parameter);
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.quarkus.it.hibernate.validator.restclient;
2+
3+
import jakarta.inject.Inject;
4+
import jakarta.validation.ConstraintViolationException;
5+
import jakarta.ws.rs.GET;
6+
import jakarta.ws.rs.Path;
7+
import jakarta.ws.rs.Produces;
8+
import jakarta.ws.rs.core.MediaType;
9+
10+
import org.eclipse.microprofile.rest.client.inject.RestClient;
11+
12+
@Path("/hibernate-validator/test-rest-client")
13+
public class RestClientTestResource {
14+
15+
@Inject
16+
@RestClient
17+
RestClientInterface restClient;
18+
19+
@GET
20+
@Produces(MediaType.APPLICATION_JSON)
21+
public RestClientEntity doSomething() {
22+
RestClientEntity entity = new RestClientEntity(9, "aaa");
23+
try {
24+
entity = restClient.doSomething(entity);
25+
throw new IllegalStateException(
26+
"This point should not be reached. Validation should fail on the rest client call.");
27+
} catch (ConstraintViolationException e) {
28+
return entity;
29+
}
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.it.hibernate.validator.restclient.server;
2+
3+
import jakarta.ws.rs.Consumes;
4+
import jakarta.ws.rs.GET;
5+
import jakarta.ws.rs.POST;
6+
import jakarta.ws.rs.Path;
7+
import jakarta.ws.rs.Produces;
8+
import jakarta.ws.rs.core.MediaType;
9+
10+
import io.quarkus.it.hibernate.validator.restclient.RestClientEntity;
11+
12+
@Path("/rest-client")
13+
public class ServerResource {
14+
15+
@POST
16+
@Consumes(MediaType.APPLICATION_JSON)
17+
@Produces(MediaType.APPLICATION_JSON)
18+
public String doSomething(String parameter) {
19+
return parameter;
20+
}
21+
22+
@GET
23+
@Produces(MediaType.APPLICATION_JSON)
24+
public RestClientEntity doSomething() {
25+
return new RestClientEntity(1, "aa");
26+
}
27+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
quarkus.locales=en,de
2-
quarkus.default-locale=en
2+
quarkus.default-locale=en
3+
quarkus.rest-client."io.quarkus.it.hibernate.validator.restclient.RestClientInterface".url=${test.url}

0 commit comments

Comments
 (0)