Skip to content

Commit 2100ec0

Browse files
committed
Merge branch 'main' into museum
2 parents 9f322a6 + aae156c commit 2100ec0

File tree

13 files changed

+189
-99
lines changed

13 files changed

+189
-99
lines changed

modules/jooby-avaje-validator/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
<dependency>
8989
<groupId>org.assertj</groupId>
9090
<artifactId>assertj-core</artifactId>
91-
<version>3.27.3</version>
91+
<version>3.27.4</version>
9292
<scope>test</scope>
9393
</dependency>
9494
</dependencies>

modules/jooby-awssdk-v2/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<name>jooby-awssdk-v2</name>
1313

1414
<properties>
15-
<aws.java.sdk.version>2.32.14</aws.java.sdk.version>
15+
<aws.java.sdk.version>2.32.19</aws.java.sdk.version>
1616
</properties>
1717

1818
<dependencyManagement>

modules/jooby-cli/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<properties>
1515
<Module-Name>io.jooby.cli</Module-Name>
16-
<jline.version>3.30.4</jline.version>
16+
<jline.version>3.30.5</jline.version>
1717
<picocli.version>4.7.7</picocli.version>
1818
</properties>
1919

modules/jooby-openapi/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
<dependency>
6868
<groupId>com.puppycrawl.tools</groupId>
6969
<artifactId>checkstyle</artifactId>
70-
<version>10.26.1</version>
70+
<version>11.0.0</version>
7171
</dependency>
7272

7373
<dependency>

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/OpenAPIParser.java

Lines changed: 82 additions & 55 deletions
Large diffs are not rendered by default.

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/OpenApiTemplate.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.net.URL;
1010
import java.nio.file.Files;
1111
import java.nio.file.Path;
12-
import java.util.Optional;
1312

1413
import com.fasterxml.jackson.core.JsonFactory;
1514
import com.fasterxml.jackson.core.JsonParser;
@@ -18,9 +17,8 @@
1817
import com.fasterxml.jackson.databind.module.SimpleModule;
1918
import com.fasterxml.jackson.databind.node.ObjectNode;
2019
import io.jooby.SneakyThrows;
21-
import io.swagger.v3.core.util.Json;
22-
import io.swagger.v3.core.util.ParameterDeserializer;
23-
import io.swagger.v3.core.util.Yaml;
20+
import io.swagger.v3.core.util.*;
21+
import io.swagger.v3.oas.models.SpecVersion;
2422
import io.swagger.v3.oas.models.parameters.Parameter;
2523

2624
public class OpenApiTemplate {
@@ -51,8 +49,23 @@ private Parameter parse(JsonFactory factory, DeserializationContext ctx, String
5149
}
5250
}
5351

54-
public static final ObjectMapper yaml = override(Yaml.mapper());
55-
private static final ObjectMapper json = override(Json.mapper());
52+
private final ObjectMapper json;
53+
private final ObjectMapper yaml;
54+
private final SpecVersion version;
55+
56+
public OpenApiTemplate(SpecVersion version) {
57+
this.json = override(version == SpecVersion.V30 ? Json.mapper() : Json31.mapper());
58+
this.yaml = override(version == SpecVersion.V30 ? Yaml.mapper() : Yaml31.mapper());
59+
this.version = version;
60+
}
61+
62+
public ObjectMapper json() {
63+
return json;
64+
}
65+
66+
public ObjectMapper yaml() {
67+
return yaml;
68+
}
5669

5770
private static ObjectMapper override(ObjectMapper mapper) {
5871
var partial = new PartialParameterDeserializer();
@@ -65,23 +78,29 @@ private static ObjectMapper override(ObjectMapper mapper) {
6578
return mapper;
6679
}
6780

68-
public static Optional<OpenAPIExt> fromTemplate(
69-
Path basedir, ClassLoader classLoader, String templateName) {
81+
public OpenAPIExt fromTemplate(Path basedir, ClassLoader classLoader, String templateName) {
82+
var openapi = createTemplate(basedir, classLoader, templateName);
83+
openapi.setSpecVersion(version);
84+
return openapi;
85+
}
86+
87+
private OpenAPIExt createTemplate(Path basedir, ClassLoader classLoader, String templateName) {
7088
try {
89+
7190
Path path = basedir.resolve("conf").resolve(templateName);
7291
boolean yamlExt = templateName.endsWith(".yaml") || templateName.endsWith(".yml");
7392
if (Files.exists(path)) {
7493
return yamlExt
75-
? Optional.of(yaml.readValue(path.toFile(), OpenAPIExt.class))
76-
: Optional.of(json.readValue(path.toFile(), OpenAPIExt.class));
94+
? yaml.readValue(path.toFile(), OpenAPIExt.class)
95+
: json.readValue(path.toFile(), OpenAPIExt.class);
7796
}
7897
URL resource = classLoader.getResource(templateName);
7998
if (resource != null) {
8099
return yamlExt
81-
? Optional.of(yaml.readValue(resource, OpenAPIExt.class))
82-
: Optional.of(json.readValue(resource, OpenAPIExt.class));
100+
? yaml.readValue(resource, OpenAPIExt.class)
101+
: json.readValue(resource, OpenAPIExt.class);
83102
}
84-
return Optional.empty();
103+
return new OpenAPIExt();
85104
} catch (IOException x) {
86105
throw SneakyThrows.propagate(x);
87106
}

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParserContext.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@
7373
import io.jooby.StatusCode;
7474
import io.jooby.internal.openapi.javadoc.JavaDocParser;
7575
import io.jooby.openapi.DebugOption;
76-
import io.swagger.v3.core.util.Json;
7776
import io.swagger.v3.core.util.RefUtils;
78-
import io.swagger.v3.core.util.Yaml;
7977
import io.swagger.v3.oas.models.media.ArraySchema;
8078
import io.swagger.v3.oas.models.media.BinarySchema;
8179
import io.swagger.v3.oas.models.media.BooleanSchema;
@@ -100,6 +98,8 @@ public TypeLiteral() {}
10098
}
10199

102100
private String mainClass;
101+
private final ObjectMapper json;
102+
private final ObjectMapper yaml;
103103
private final ModelConvertersExt converters;
104104
private final Type router;
105105
private final Map<Type, ClassNode> nodes;
@@ -110,23 +110,32 @@ public TypeLiteral() {}
110110
private final JavaDocParser javadocParser;
111111

112112
public ParserContext(
113-
ClassSource source, Type router, JavaDocParser javadocParser, Set<DebugOption> debug) {
114-
this(source, new HashMap<>(), router, javadocParser, debug);
113+
ObjectMapper json,
114+
ObjectMapper yaml,
115+
ClassSource source,
116+
Type router,
117+
JavaDocParser javadocParser,
118+
Set<DebugOption> debug) {
119+
this(json, yaml, source, new HashMap<>(), router, javadocParser, debug);
115120
}
116121

117122
private ParserContext(
123+
ObjectMapper json,
124+
ObjectMapper yaml,
118125
ClassSource source,
119126
Map<Type, ClassNode> nodes,
120127
Type router,
121128
JavaDocParser javadocParser,
122129
Set<DebugOption> debug) {
130+
this.json = json;
131+
this.yaml = yaml;
123132
this.router = router;
124133
this.source = source;
125134
this.debug = Optional.ofNullable(debug).orElse(Collections.emptySet());
126135
this.nodes = nodes;
127136
this.javadocParser = javadocParser;
128137

129-
List<ObjectMapper> mappers = asList(Json.mapper(), Yaml.mapper());
138+
var mappers = List.of(json, yaml);
130139
jacksonModules(source.getClassLoader(), mappers);
131140
this.converters = new ModelConvertersExt();
132141
mappers.stream().map(ModelConverterExt::new).forEach(converters::addConverter);
@@ -413,7 +422,7 @@ public Schema schema(String type) {
413422
}
414423
String json = "{\"type\":\"" + type + "\"}";
415424
try {
416-
TypeLiteral literal = Json.mapper().readValue(json, TypeLiteral.class);
425+
TypeLiteral literal = json().readValue(json, TypeLiteral.class);
417426
return schema(literal.type);
418427
} catch (Exception x) {
419428
throw SneakyThrows.propagate(x);
@@ -512,6 +521,14 @@ public Type getRouter() {
512521
return router;
513522
}
514523

524+
public ObjectMapper json() {
525+
return json;
526+
}
527+
528+
public ObjectMapper yaml() {
529+
return yaml;
530+
}
531+
515532
public <T extends ClassVisitor> T createClassVisitor(Function<Integer, T> factory) {
516533
return factory.apply(Opcodes.ASM9);
517534
}
@@ -526,7 +543,7 @@ public boolean process(AbstractInsnNode instruction) {
526543
}
527544

528545
public ParserContext newContext(Type router) {
529-
return new ParserContext(source, nodes, router, javadocParser, debug);
546+
return new ParserContext(json, yaml, source, nodes, router, javadocParser, debug);
530547
}
531548

532549
public String getMainClass() {

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/RouteParser.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import io.jooby.Router;
4747
import io.jooby.SneakyThrows;
4848
import io.jooby.annotation.OpenApiRegister;
49-
import io.swagger.v3.core.util.Json;
5049
import io.swagger.v3.oas.models.media.ComposedSchema;
5150
import io.swagger.v3.oas.models.media.Content;
5251
import io.swagger.v3.oas.models.media.Schema;
@@ -203,9 +202,9 @@ private List<Parameter> checkParameters(ParserContext ctx, List<Parameter> param
203202
for (Object e : ref.schema.getProperties().entrySet()) {
204203
String name = (String) ((Map.Entry) e).getKey();
205204
Schema s = (Schema) ((Map.Entry) e).getValue();
206-
var schemaMap = Json.mapper().convertValue(s, Map.class);
205+
var schemaMap = ctx.json().convertValue(s, Map.class);
207206
schemaMap.remove("description");
208-
var schemaNoDesc = Json.mapper().convertValue(schemaMap, Schema.class);
207+
var schemaNoDesc = ctx.json().convertValue(schemaMap, Schema.class);
209208
ParameterExt p = new ParameterExt();
210209
p.setName(name);
211210
p.setIn(parameter.getIn());

modules/jooby-openapi/src/main/java/io/jooby/openapi/OpenAPIGenerator.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,21 @@
1515
import org.slf4j.Logger;
1616
import org.slf4j.LoggerFactory;
1717

18+
import com.fasterxml.jackson.databind.ObjectMapper;
1819
import edu.umd.cs.findbugs.annotations.NonNull;
1920
import edu.umd.cs.findbugs.annotations.Nullable;
2021
import io.jooby.Router;
2122
import io.jooby.SneakyThrows;
2223
import io.jooby.internal.openapi.*;
2324
import io.jooby.internal.openapi.javadoc.JavaDocParser;
2425
import io.swagger.v3.core.util.Json;
26+
import io.swagger.v3.core.util.Json31;
2527
import io.swagger.v3.core.util.Yaml;
28+
import io.swagger.v3.core.util.Yaml31;
2629
import io.swagger.v3.oas.models.OpenAPI;
2730
import io.swagger.v3.oas.models.PathItem;
2831
import io.swagger.v3.oas.models.Paths;
32+
import io.swagger.v3.oas.models.SpecVersion;
2933
import io.swagger.v3.oas.models.info.Info;
3034
import io.swagger.v3.oas.models.servers.Server;
3135
import io.swagger.v3.oas.models.tags.Tag;
@@ -97,6 +101,8 @@ public String toString(OpenAPIGenerator tool, OpenAPI result) {
97101

98102
private List<Path> sources;
99103

104+
private SpecVersion specVersion = SpecVersion.V30;
105+
100106
/**
101107
* Export an {@link OpenAPI} model to the given format.
102108
*
@@ -149,7 +155,7 @@ public String toString(OpenAPIGenerator tool, OpenAPI result) {
149155

150156
/* Create OpenAPI from template and make sure min required information is present: */
151157
OpenAPIExt openapi =
152-
OpenApiTemplate.fromTemplate(basedir, classLoader, templateName).orElseGet(OpenAPIExt::new);
158+
new OpenApiTemplate(specVersion).fromTemplate(basedir, classLoader, templateName);
153159

154160
var mainType = TypeFactory.fromJavaName(classname);
155161
var javadoc = new JavaDocParser(sources);
@@ -175,7 +181,9 @@ public String toString(OpenAPIGenerator tool, OpenAPI result) {
175181
}
176182

177183
RouteParser routes = new RouteParser();
178-
ParserContext ctx = new ParserContext(source, mainType, javadoc, debug);
184+
var json = jsonMapper();
185+
var yaml = yamlMapper();
186+
ParserContext ctx = new ParserContext(json, yaml, source, mainType, javadoc, debug);
179187
List<OperationExt> operations = routes.parse(ctx, openapi);
180188

181189
String contextPath = ContextPathParser.parse(ctx);
@@ -241,6 +249,14 @@ public String toString(OpenAPIGenerator tool, OpenAPI result) {
241249
return openapi;
242250
}
243251

252+
ObjectMapper yamlMapper() {
253+
return specVersion == SpecVersion.V30 ? Yaml.mapper() : Yaml31.mapper();
254+
}
255+
256+
ObjectMapper jsonMapper() {
257+
return specVersion == SpecVersion.V30 ? Json.mapper() : Json31.mapper();
258+
}
259+
244260
private boolean includes(String value) {
245261
return pattern(includes, value).orElse(true);
246262
}
@@ -282,7 +298,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi)
282298
*/
283299
public @NonNull String toYaml(@NonNull OpenAPI openAPI) {
284300
try {
285-
return Yaml.mapper().writeValueAsString(openAPI);
301+
return yamlMapper().writeValueAsString(openAPI);
286302
} catch (IOException x) {
287303
throw SneakyThrows.propagate(x);
288304
}
@@ -296,7 +312,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi)
296312
*/
297313
public @NonNull String toJson(@NonNull OpenAPI openAPI) {
298314
try {
299-
return Json.mapper().writer().withDefaultPrettyPrinter().writeValueAsString(openAPI);
315+
return jsonMapper().writer().withDefaultPrettyPrinter().writeValueAsString(openAPI);
300316
} catch (IOException x) {
301317
throw SneakyThrows.propagate(x);
302318
}
@@ -419,6 +435,10 @@ public void setOutputDir(@NonNull Path outputDir) {
419435
this.outputDir = outputDir;
420436
}
421437

438+
public void setSpecVersion(SpecVersion specVersion) {
439+
this.specVersion = specVersion;
440+
}
441+
422442
private String appname(String classname) {
423443
String name = classname;
424444
int i = name.lastIndexOf('.');

modules/jooby-openapi/src/test/java/io/jooby/openapi/OpenAPIExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
5858
OpenAPIResult result;
5959
try {
6060
OpenAPIExt openAPI = (OpenAPIExt) tool.generate(classname);
61-
result = new OpenAPIResult(openAPI);
61+
result = new OpenAPIResult(tool.jsonMapper(), tool.yamlMapper(), openAPI);
6262
} catch (RuntimeException re) {
6363
result = OpenAPIResult.failure(re);
6464
}

0 commit comments

Comments
 (0)