Skip to content

Commit 3ac5401

Browse files
committed
oas3.1 initial support
1 parent 26723ac commit 3ac5401

33 files changed

+1755
-147
lines changed

modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/SwaggerParseResult.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
public class SwaggerParseResult {
1010
private List<String> messages = null;
1111
private OpenAPI openAPI;
12+
private boolean openapi31;
1213

1314
public SwaggerParseResult messages(List<String> messages) {
1415
this.messages = messages;
@@ -52,4 +53,17 @@ public static SwaggerParseResult ofError(String message){
5253
result.setMessages(Collections.singletonList(message));
5354
return result;
5455
}
56+
57+
public void setOpenapi31(boolean openapi31) {
58+
this.openapi31 = openapi31;
59+
}
60+
61+
public SwaggerParseResult openapi31(boolean openapi31) {
62+
this.openapi31 = openapi31;
63+
return this;
64+
}
65+
66+
public boolean isOpenapi31() {
67+
return this.openapi31;
68+
}
5569
}

modules/swagger-parser-v3/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
<groupId>org.slf4j</groupId>
6565
<artifactId>slf4j-simple</artifactId>
6666
<version>${slf4j-version}</version>
67-
<scope>test</scope>
6867
</dependency>
6968
<dependency>
7069
<groupId>com.github.tomakehurst</groupId>

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIResolver.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public OpenAPI resolve() {
7272
pathProcessor.processPaths();
7373
componentsProcessor.processComponents();
7474

75+
7576
if(openApi.getPaths() != null) {
7677
for(String pathname : openApi.getPaths().keySet()) {
7778
PathItem pathItem = openApi.getPaths().get(pathname);
@@ -82,6 +83,7 @@ public OpenAPI resolve() {
8283
}
8384
}
8485
}
86+
8587
return openApi;
8688
}
8789

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class ResolverCache {
6969
private List<String> referencedModelKeys = new ArrayList<>();
7070
private Set<String> resolveValidationMessages;
7171
private final ParseOptions parseOptions;
72-
72+
protected boolean openapi31;
7373

7474
/*
7575
* a map that stores original external references, and their associated renamed
@@ -86,6 +86,7 @@ public ResolverCache(OpenAPI openApi, List<AuthorizationValue> auths, String par
8686
}
8787

8888
public ResolverCache(OpenAPI openApi, List<AuthorizationValue> auths, String parentFileLocation, Set<String> resolveValidationMessages, ParseOptions parseOptions) {
89+
this.openapi31 = parseOptions.isOpenapi31();
8990
this.openApi = openApi;
9091
this.auths = auths;
9192
this.rootPath = parentFileLocation;
@@ -158,14 +159,14 @@ else if (rootPath != null) {
158159
externalFileCache.put(file, contents);
159160
}
160161
SwaggerParseResult deserializationUtilResult = new SwaggerParseResult();
161-
JsonNode tree = DeserializationUtils.deserializeIntoTree(contents, file, parseOptions, deserializationUtilResult);
162+
JsonNode tree = DeserializationUtils.deserializeIntoTree(contents, file, parseOptions, deserializationUtilResult, openapi31);
162163

163164
if (definitionPath == null) {
164165
T result = null;
165166
if (parseOptions.isValidateExternalRefs()) {
166167
result = deserializeFragment(tree, expectedType, file, "/");
167168
} else {
168-
result = DeserializationUtils.deserialize(contents, file, expectedType);
169+
result = DeserializationUtils.deserialize(contents, file, expectedType, openapi31);
169170
}
170171
resolutionCache.put(ref, result);
171172
if (deserializationUtilResult.getMessages() != null) {
@@ -191,9 +192,9 @@ else if (rootPath != null) {
191192
} else {
192193
if (expectedType.equals(Schema.class)) {
193194
OpenAPIDeserializer deserializer = new OpenAPIDeserializer();
194-
result = (T) deserializer.getSchema((ObjectNode) tree, definitionPath.replace("/", "."), null);
195+
result = (T) deserializer.getSchema((ObjectNode) tree, definitionPath.replace("/", "."), null, , new OpenAPIDeserializer.ParseResult().openapi31(openapi31));
195196
} else {
196-
result = DeserializationUtils.deserialize(tree, file, expectedType);
197+
result = DeserializationUtils.deserialize(tree, file, expectedType, openapi31);
197198
}
198199
}
199200
updateLocalRefs(file, result);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.swagger.v3.parser.extensions;
2+
3+
import com.fasterxml.jackson.databind.node.ObjectNode;
4+
import io.swagger.v3.oas.models.OpenAPI;
5+
import io.swagger.v3.oas.models.media.Schema;
6+
import io.swagger.v3.parser.ResolverCache;
7+
import io.swagger.v3.parser.util.OpenAPIDeserializer;
8+
9+
import java.util.Map;
10+
11+
public interface JsonSchemaParserExtension {
12+
13+
Schema getSchema(ObjectNode node, String location, OpenAPIDeserializer.ParseResult result, Map<String, Object> rootMap, String basePath);
14+
15+
16+
boolean resolveSchema(Schema schema, ResolverCache cache, OpenAPI openAPI, boolean openapi31);
17+
18+
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/CallbackProcessor.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@ public class CallbackProcessor {
2626
private final ExternalRefProcessor externalRefProcessor;
2727

2828
public CallbackProcessor(ResolverCache cache, OpenAPI openAPI) {
29+
this(cache, openAPI, false);
30+
}
31+
public CallbackProcessor(ResolverCache cache, OpenAPI openAPI, boolean openapi31) {
2932
this.cache = cache;
30-
this.operationProcessor = new OperationProcessor(cache, openAPI);
31-
this.parameterProcessor = new ParameterProcessor(cache,openAPI);
33+
this.operationProcessor = new OperationProcessor(cache, openAPI, openapi31);
34+
this.parameterProcessor = new ParameterProcessor(cache,openAPI, openapi31);
3235
this.externalRefProcessor = new ExternalRefProcessor(cache, openAPI);
3336
this.openAPI = openAPI;
3437
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ComponentsProcessor.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,26 @@ public class ComponentsProcessor {
3535
private final SecuritySchemeProcessor securitySchemeProcessor;
3636

3737
public ComponentsProcessor(OpenAPI openApi,ResolverCache cache){
38+
this(openApi, cache, false);
39+
40+
}
41+
public ComponentsProcessor(OpenAPI openApi,ResolverCache cache, boolean openapi31){
3842
this.cache = cache;
3943
this.openApi = openApi;
40-
this.schemaProcessor = new SchemaProcessor(cache,openApi);
41-
this.responseProcessor = new ResponseProcessor(cache, openApi);
42-
this.requestBodyProcessor = new RequestBodyProcessor(cache, openApi);
43-
this.parameterProcessor = new ParameterProcessor(cache, openApi);
44-
this.headerProcessor = new HeaderProcessor(cache, openApi);
44+
this.schemaProcessor = new SchemaProcessor(cache,openApi, openapi31);
45+
this.responseProcessor = new ResponseProcessor(cache, openApi, openapi31);
46+
this.requestBodyProcessor = new RequestBodyProcessor(cache, openApi, openapi31);
47+
this.parameterProcessor = new ParameterProcessor(cache, openApi, openapi31);
48+
this.headerProcessor = new HeaderProcessor(cache, openApi, openapi31);
4549
this.exampleProcessor = new ExampleProcessor(cache,openApi);
46-
this.linkProcessor = new LinkProcessor(cache,openApi);
47-
this.callbackProcessor = new CallbackProcessor(cache,openApi);
50+
this.linkProcessor = new LinkProcessor(cache,openApi, openapi31);
51+
this.callbackProcessor = new CallbackProcessor(cache,openApi, openapi31);
4852
this.securitySchemeProcessor = new SecuritySchemeProcessor(cache,openApi);
4953

5054
}
5155

5256

57+
5358
public void processComponents() {
5459
if (openApi.getComponents() == null){
5560
return;

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/HeaderProcessor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,17 @@ public class HeaderProcessor {
2626

2727

2828
public HeaderProcessor(ResolverCache cache, OpenAPI openAPI) {
29+
this(cache, openAPI, false);
30+
}
31+
public HeaderProcessor(ResolverCache cache, OpenAPI openAPI, boolean openapi31) {
2932
this.cache = cache;
3033
this.openAPI = openAPI;
31-
this.schemaProcessor = new SchemaProcessor(cache,openAPI);
34+
this.schemaProcessor = new SchemaProcessor(cache,openAPI, openapi31);
3235
this.exampleProcessor = new ExampleProcessor(cache,openAPI);
3336
this.externalRefProcessor = new ExternalRefProcessor(cache, openAPI);
3437
}
3538

39+
3640
public void processHeader(Header header) {
3741

3842
if(header.get$ref() != null){
@@ -72,4 +76,4 @@ public void processHeader(Header header) {
7276
}
7377
}
7478
}
75-
}
79+
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/LinkProcessor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ public class LinkProcessor {
2222
private final HeaderProcessor headerProcessor;
2323
private final ExternalRefProcessor externalRefProcessor;
2424

25-
2625
public LinkProcessor(ResolverCache cache, OpenAPI openAPI){
26+
this (cache, openAPI, false);
27+
}
28+
public LinkProcessor(ResolverCache cache, OpenAPI openAPI, boolean openapi31){
2729
this.cache = cache;
2830
this.openAPI = openAPI;
29-
this.headerProcessor = new HeaderProcessor(cache,openAPI);
31+
this.headerProcessor = new HeaderProcessor(cache,openAPI, openapi31);
3032
this.externalRefProcessor = new ExternalRefProcessor(cache, openAPI);
3133
}
3234

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/OperationProcessor.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ public class OperationProcessor {
2525
private final ExternalRefProcessor externalRefProcessor;
2626
private final ResolverCache cache;
2727

28-
2928
public OperationProcessor(ResolverCache cache, OpenAPI openAPI) {
30-
this.parameterProcessor = new ParameterProcessor(cache, openAPI);
31-
this.responseProcessor = new ResponseProcessor(cache,openAPI);
32-
this.requestBodyProcessor = new RequestBodyProcessor(cache,openAPI);
29+
this(cache, openAPI, false);
30+
}
31+
32+
public OperationProcessor(ResolverCache cache, OpenAPI openAPI, boolean openapi31) {
33+
this.parameterProcessor = new ParameterProcessor(cache, openAPI, openapi31);
34+
this.responseProcessor = new ResponseProcessor(cache,openAPI, openapi31);
35+
this.requestBodyProcessor = new RequestBodyProcessor(cache,openAPI, openapi31);
3336
this.externalRefProcessor = new ExternalRefProcessor(cache, openAPI);
3437
this.cache = cache;
3538
}
@@ -115,4 +118,4 @@ public void processOperation(Operation operation) {
115118
}
116119
}
117120
}
118-
}
121+
}

0 commit comments

Comments
 (0)