Skip to content

Commit dde97b1

Browse files
authored
Merge branch 'master' into default-validator-handler
2 parents 0aa5af3 + fa0b6de commit dde97b1

File tree

11 files changed

+280
-216
lines changed

11 files changed

+280
-216
lines changed

http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import javax.annotation.processing.SupportedOptions;
2020
import javax.lang.model.SourceVersion;
2121
import javax.lang.model.element.Element;
22-
import javax.lang.model.element.ExecutableElement;
2322
import javax.lang.model.element.Modifier;
2423
import javax.lang.model.element.TypeElement;
2524
import javax.lang.model.util.ElementFilter;
@@ -54,11 +53,12 @@ public SourceVersion getSupportedSourceVersion() {
5453
@Override
5554
public Set<String> getSupportedAnnotationTypes() {
5655
return Set.of(
57-
PathPrism.PRISM_TYPE,
58-
ControllerPrism.PRISM_TYPE,
59-
OpenAPIDefinitionPrism.PRISM_TYPE,
60-
MappedParamPrism.PRISM_TYPE,
61-
MapImportPrism.PRISM_TYPE);
56+
PathPrism.PRISM_TYPE,
57+
ControllerPrism.PRISM_TYPE,
58+
OpenAPIDefinitionPrism.PRISM_TYPE,
59+
MappedParamPrism.PRISM_TYPE,
60+
MapImportPrism.PRISM_TYPE,
61+
HttpValidPrism.PRISM_TYPE);
6262
}
6363

6464
@Override
@@ -91,7 +91,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
9191
if (round.errorRaised()) {
9292
return false;
9393
}
94-
94+
getElements(round, HttpValidPrism.PRISM_TYPE).forEach(this::warnValid);
9595
for (final var type : ElementFilter.typesIn(getElements(round, MappedParamPrism.PRISM_TYPE))) {
9696
var prism = MappedParamPrism.getInstanceOn(type);
9797
registerParamMapping(type, prism.factoryMethod());
@@ -148,6 +148,12 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
148148
return false;
149149
}
150150

151+
private void warnValid(Element e) {
152+
if (!ControllerPrism.isPresent(e) && !ControllerPrism.isPresent(e.getEnclosingElement())) {
153+
logWarn(e, "%s should only be used in Controller Classes", HttpValidPrism.PRISM_TYPE);
154+
}
155+
}
156+
151157
private Set<? extends Element> getElements(RoundEnvironment round, String name) {
152158
return Optional.ofNullable(typeElement(name))
153159
.map(round::getElementsAnnotatedWith)

http-generator-core/src/main/java/io/avaje/http/generator/core/MethodParam.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ public void buildParamName(Append writer) {
3232
}
3333

3434
public void buildApiDocumentation(MethodDocBuilder methodDoc) {
35-
if (elementParam.paramType() != ParamType.BEANPARAM) {
35+
if (elementParam.paramType() != ParamType.BEANPARAM && elementParam.paramType() != ParamType.FORM) {
3636
elementParam.buildApiDocumentation(methodDoc);
3737
} else {
3838
asElement(elementParam.element().asType()).getEnclosedElements().stream()
3939
.filter(e -> e.getKind() == ElementKind.FIELD)
4040
.map(VariableElement.class::cast)
41-
.forEach(e -> buildDoc(methodDoc, e));
41+
.forEach(e -> buildDoc(methodDoc, e, elementParam.paramType() == ParamType.FORM));
4242
}
4343
}
4444

45-
private static void buildDoc(MethodDocBuilder methodDoc, VariableElement e) {
45+
private static void buildDoc(MethodDocBuilder methodDoc, VariableElement e, boolean form) {
4646
final var typeMirror = e.asType();
47-
new ElementReader(e, Util.parse(typeMirror.toString()), Util.typeDef(typeMirror), ParamType.QUERYPARAM, false)
47+
new ElementReader(e, Util.parse(typeMirror.toString()), Util.typeDef(typeMirror), form ? ParamType.FORMPARAM : ParamType.QUERYPARAM, form)
4848
.buildApiDocumentation(methodDoc);
4949
}
5050

http-hibernate-validator/pom.xml

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
5-
6-
<groupId>io.avaje</groupId>
7-
<artifactId>avaje-http-hibernate-validator</artifactId>
8-
<version>3.5</version>
9-
105
<parent>
11-
<groupId>org.avaje</groupId>
12-
<artifactId>java11-oss</artifactId>
13-
<version>4.3</version>
14-
<relativePath/>
6+
<groupId>io.avaje</groupId>
7+
<artifactId>avaje-http-parent</artifactId>
8+
<version>3.6-RC1</version>
159
</parent>
10+
11+
<artifactId>avaje-http-hibernate-validator</artifactId>
1612

1713
<scm>
1814
<developerConnection>scm:git:git@github.com:avaje/avaje-http.git</developerConnection>
@@ -36,14 +32,14 @@
3632
<dependency>
3733
<groupId>io.avaje</groupId>
3834
<artifactId>avaje-http-api</artifactId>
39-
<version>2.6</version>
35+
<version>3.6-RC1</version>
4036
<scope>provided</scope>
4137
</dependency>
4238

4339
<dependency>
4440
<groupId>io.avaje</groupId>
45-
<artifactId>avaje-inject</artifactId>
46-
<version>11.0</version>
41+
<artifactId>avaje-inject-generator</artifactId>
42+
<version>12.1-RC3</version>
4743
<scope>provided</scope>
4844
</dependency>
4945

http-hibernate-validator/src/main/java/io/avaje/http/hibernate/validator/BeanValidator.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
package io.avaje.http.hibernate.validator;
22

3-
import java.util.*;
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Set;
46

57
import io.avaje.http.api.ValidationException;
68
import io.avaje.http.api.ValidationException.Violation;
79
import io.avaje.http.api.Validator;
810
import jakarta.validation.ConstraintViolation;
911
import jakarta.validation.ConstraintViolationException;
10-
import jakarta.validation.Validation;
11-
import jakarta.validation.ValidatorFactory;
1212

1313
public class BeanValidator implements Validator {
1414

15-
private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
15+
private jakarta.validation.Validator validator;
16+
17+
void postConstruct(jakarta.validation.Validator validator) {
18+
this.validator = validator;
19+
}
1620

1721
@Override
18-
public void validate(Object bean, String acceptLanguage, Class<?>... groups) throws ValidationException {
19-
final Set<ConstraintViolation<Object>> violations = factory.getValidator().validate(bean, groups);
22+
public void validate(Object bean, String acceptLanguage, Class<?>... groups)
23+
throws ValidationException {
24+
final Set<ConstraintViolation<Object>> violations = validator.validate(bean, groups);
2025
if (!violations.isEmpty()) {
2126
throwExceptionWith(violations);
2227
}

http-hibernate-validator/src/main/java/io/avaje/http/hibernate/validator/ValidatorProvider.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,26 @@
22

33
import io.avaje.http.api.Validator;
44
import io.avaje.inject.BeanScopeBuilder;
5+
import io.avaje.inject.spi.PluginProvides;
6+
import jakarta.validation.Validation;
57

6-
/**
7-
* Plugin for avaje inject that provides a default BeanValidator instance.
8-
*/
8+
/** Plugin for avaje inject that provides a default BeanValidator instance. */
9+
@PluginProvides(Validator.class)
910
public final class ValidatorProvider implements io.avaje.inject.spi.InjectPlugin {
1011

11-
@Override
12-
public Class<?>[] provides() {
13-
return new Class<?>[]{Validator.class};
14-
}
15-
1612
@Override
1713
public void apply(BeanScopeBuilder builder) {
18-
builder.provideDefault(null, Validator.class, BeanValidator::new);
14+
builder.provideDefault(
15+
Validator.class,
16+
() -> {
17+
var validator = new BeanValidator();
18+
builder.addPostConstruct(
19+
b ->
20+
validator.postConstruct(
21+
b.getOptional(jakarta.validation.Validator.class)
22+
.orElseGet(
23+
() -> Validation.buildDefaultValidatorFactory().getValidator())));
24+
return validator;
25+
});
1926
}
20-
}
27+
}

http-hibernate-validator/src/main/java/module-info.java

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

33
module io.avaje.http.hibernate.validator {
44

5-
exports io.avaje.http.hibernate.validator;
6-
7-
requires io.avaje.http.api;
8-
requires io.avaje.inject;
9-
requires jakarta.validation;
5+
requires transitive io.avaje.http.api;
6+
requires transitive io.avaje.inject;
7+
requires transitive jakarta.validation;
108

119
provides io.avaje.inject.spi.InjectExtension with ValidatorProvider;
1210
}

http-hibernate-validator/src/main/resources/META-INF/services/io.avaje.inject.spi.InjectExtension

Lines changed: 0 additions & 1 deletion
This file was deleted.

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<module>http-generator-javalin</module>
4949
<module>http-generator-sigma</module>
5050
<module>http-generator-client</module>
51+
<module>http-hibernate-validator</module>
5152
</modules>
5253

5354
<profiles>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.example.myapp.web.test;
22

3+
import io.avaje.http.api.Header;
4+
35
public class MyForm {
46

57
public String name;
68
public String email;
79
public String url;
10+
@Header
11+
public String headString;
812
}

tests/test-javalin-jsonb/src/main/java/org/example/myapp/web/test/OpenAPIController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import io.avaje.http.api.Controller;
66
import io.avaje.http.api.Delete;
7+
import io.avaje.http.api.Form;
78
import io.avaje.http.api.Get;
89
import io.avaje.http.api.Header;
910
import io.avaje.http.api.MediaType;
@@ -107,4 +108,10 @@ String testDefaultStatus(Context ctx) {
107108
String testPathParam(String type, @QueryParam String lastName, @QueryParam("q-2") String param2, @Header String contentLength, @Header("x-oh") String otherHeader) {
108109
return "only partial info";
109110
}
111+
112+
@Form
113+
@Post("/form")
114+
String testForm(MyForm form) {
115+
return "only partial info";
116+
}
110117
}

0 commit comments

Comments
 (0)