Skip to content

Commit bc172be

Browse files
authored
Merge branch 'master' into preserve-body-parameter-name
2 parents 2a3bf81 + 0468ac2 commit bc172be

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1651
-345
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ You can include this library from Sonatype OSS for SNAPSHOTS, or Maven central f
103103
<dependency>
104104
<groupId>io.swagger.parser.v3</groupId>
105105
<artifactId>swagger-parser</artifactId>
106-
<version>2.0.12</version>
106+
<version>2.0.14</version>
107107
</dependency>
108108
```
109109

modules/swagger-parser-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.swagger.parser.v3</groupId>
55
<artifactId>swagger-parser-project</artifactId>
6-
<version>2.0.13-SNAPSHOT</version>
6+
<version>2.0.15-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
package io.swagger.v3.parser.core.models;
22

3+
import java.net.URL;
4+
import java.util.Objects;
5+
import java.util.function.Predicate;
6+
7+
38
public class AuthorizationValue {
49
private String value, type, keyName;
10+
private Predicate<URL> urlMatcher;
511

612
public AuthorizationValue() {
713
}
814

9-
public AuthorizationValue(String keyName, String value, String type) {
15+
public AuthorizationValue(String keyName, String value, String type, Predicate<URL> urlMatcher) {
1016
this.setKeyName(keyName);
1117
this.setValue(value);
1218
this.setType(type);
19+
this.setUrlMatcher(urlMatcher);
20+
}
21+
22+
public AuthorizationValue(String keyName, String value, String type) {
23+
this(keyName, value, type, url -> true);
1324
}
1425

1526
public AuthorizationValue value(String value) {
@@ -27,6 +38,11 @@ public AuthorizationValue keyName(String keyName) {
2738
return this;
2839
}
2940

41+
public AuthorizationValue urlMatcher(Predicate<URL> urlMatcher) {
42+
setUrlMatcher(urlMatcher);
43+
return this;
44+
}
45+
3046
public String getValue() {
3147
return value;
3248
}
@@ -51,13 +67,22 @@ public void setKeyName(String keyName) {
5167
this.keyName = keyName;
5268
}
5369

70+
public Predicate<URL> getUrlMatcher() {
71+
return urlMatcher;
72+
}
73+
74+
public void setUrlMatcher(Predicate<URL> urlMatcher) {
75+
this.urlMatcher = Objects.requireNonNull(urlMatcher);
76+
}
77+
5478
@Override
5579
public int hashCode() {
5680
final int prime = 31;
5781
int result = 1;
5882
result = prime * result + ((keyName == null) ? 0 : keyName.hashCode());
5983
result = prime * result + ((type == null) ? 0 : type.hashCode());
6084
result = prime * result + ((value == null) ? 0 : value.hashCode());
85+
result = prime * result + urlMatcher.hashCode();
6186
return result;
6287
}
6388

@@ -94,6 +119,9 @@ public boolean equals(Object obj) {
94119
} else if (!value.equals(other.value)) {
95120
return false;
96121
}
122+
if (!urlMatcher.equals(other.urlMatcher)) {
123+
return false;
124+
}
97125
return true;
98126
}
99127
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public class ParseOptions {
55
private boolean resolveCombinators = true;
66
private boolean resolveFully;
77
private boolean flatten;
8+
private boolean skipMatches;
89

910
public boolean isResolve() {
1011
return resolve;
@@ -33,4 +34,12 @@ public void setResolveFully(boolean resolveFully) {
3334
public boolean isFlatten() { return flatten; }
3435

3536
public void setFlatten(boolean flatten) { this.flatten = flatten; }
37+
38+
public boolean isSkipMatches() {
39+
return skipMatches;
40+
}
41+
42+
public void setSkipMatches(boolean skipMatches) {
43+
this.skipMatches = skipMatches;
44+
}
3645
}

modules/swagger-parser-v2-converter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.swagger.parser.v3</groupId>
55
<artifactId>swagger-parser-project</artifactId>
6-
<version>2.0.13-SNAPSHOT</version>
6+
<version>2.0.15-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import io.swagger.parser.SwaggerResolver;
3333
import io.swagger.parser.util.SwaggerDeserializationResult;
3434
import io.swagger.v3.core.util.Json;
35+
import io.swagger.v3.core.util.PrimitiveType;
36+
import io.swagger.v3.core.util.Yaml;
3537
import io.swagger.v3.oas.models.Components;
3638
import io.swagger.v3.oas.models.ExternalDocumentation;
3739
import io.swagger.v3.oas.models.OpenAPI;
@@ -59,6 +61,7 @@
5961
import io.swagger.v3.oas.models.security.SecurityScheme;
6062
import io.swagger.v3.oas.models.servers.Server;
6163
import io.swagger.v3.oas.models.tags.Tag;
64+
import io.swagger.v3.parser.OpenAPIV3Parser;
6265
import io.swagger.v3.parser.core.extensions.SwaggerParserExtension;
6366
import io.swagger.v3.parser.core.models.AuthorizationValue;
6467
import io.swagger.v3.parser.core.models.ParseOptions;
@@ -106,7 +109,23 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
106109
result.setSwagger(resolved);
107110
}
108111
}
109-
return convert(result);
112+
SwaggerParseResult out = convert(result);
113+
if (out != null && options != null && options.isFlatten()) {
114+
try {
115+
SwaggerParseResult resultV3 = new OpenAPIV3Parser().readContents(Yaml.pretty(out.getOpenAPI()), auth, options);
116+
out.setOpenAPI(resultV3.getOpenAPI());
117+
if (out.getMessages() != null) {
118+
out.getMessages().addAll(resultV3.getMessages());
119+
out.messages(out.getMessages().stream()
120+
.distinct()
121+
.collect(Collectors.toList()));
122+
} else {
123+
out.messages(resultV3.getMessages());
124+
}
125+
} catch (Exception ignore) {}
126+
}
127+
return out;
128+
110129
}
111130

112131
public List<io.swagger.models.auth.AuthorizationValue> convert(List<AuthorizationValue> auths) {
@@ -692,9 +711,20 @@ private Schema convert(SerializableParameter sp) {
692711
}
693712
schema = as;
694713
} else {
695-
schema = new Schema();
696-
schema.setType(sp.getType());
697-
schema.setFormat(sp.getFormat());
714+
PrimitiveType ptype = PrimitiveType.fromTypeAndFormat(sp.getType(), sp.getFormat());
715+
if (ptype != null) {
716+
schema = ptype.createProperty();
717+
} else {
718+
ptype = PrimitiveType.fromTypeAndFormat(sp.getType(), null);
719+
if (ptype != null) {
720+
schema = ptype.createProperty();
721+
schema.setFormat(sp.getFormat());
722+
} else {
723+
schema = new Schema();
724+
schema.setType(sp.getType());
725+
schema.setFormat(sp.getFormat());
726+
}
727+
}
698728
}
699729

700730
schema.setDescription(sp.getDescription());

modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
import io.swagger.v3.oas.models.headers.Header;
88
import io.swagger.v3.oas.models.info.Info;
99
import io.swagger.v3.oas.models.media.ArraySchema;
10+
import io.swagger.v3.oas.models.media.BooleanSchema;
1011
import io.swagger.v3.oas.models.media.ComposedSchema;
1112
import io.swagger.v3.oas.models.media.IntegerSchema;
13+
import io.swagger.v3.oas.models.media.StringSchema;
1214
import io.swagger.v3.oas.models.media.Schema;
1315
import io.swagger.v3.oas.models.parameters.Parameter;
1416
import io.swagger.v3.oas.models.parameters.RequestBody;
@@ -91,6 +93,7 @@ public class V2ConverterTest {
9193
private static final String ISSUE_820_YAML = "issue-820.yaml";
9294
private static final String ISSUE_1032_YAML = "issue-1032.yaml";
9395
private static final String ISSUE_1113_YAML = "issue-1113.yaml";
96+
private static final String ISSUE_1164_YAML = "issue-1164.yaml";
9497

9598
private static final String API_BATCH_PATH = "/api/batch/";
9699
private static final String PETS_PATH = "/pets";
@@ -797,7 +800,37 @@ public void testIssue1113() throws Exception {
797800
assertNotNull(oas.getServers().get(0));
798801
assertEquals(oas.getServers().get(0).getUrl(), "/test");
799802
}
800-
803+
804+
@Test(description = "OpenAPI v2 converter - uses specialized schema subclasses where available")
805+
public void testIssue1164() throws Exception {
806+
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_1164_YAML);
807+
assertNotNull(oas);
808+
assertNotNull(oas.getPaths());
809+
assertNotNull(oas.getPaths().get("/foo"));
810+
assertNotNull(oas.getPaths().get("/foo").getGet());
811+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody());
812+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody().getContent());
813+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody().getContent().get("multipart/form-data"));
814+
Schema formSchema = oas.getPaths().get("/foo").getGet().getRequestBody().getContent().get("multipart/form-data").getSchema();
815+
assertNotNull(formSchema);
816+
assertNotNull(formSchema.getProperties());
817+
assertEquals(4, formSchema.getProperties().size());
818+
assertTrue(formSchema.getProperties().get("first") instanceof StringSchema);
819+
820+
assertTrue(formSchema.getProperties().get("second") instanceof BooleanSchema);
821+
822+
assertTrue(formSchema.getProperties().get("third") instanceof StringSchema);
823+
StringSchema third = (StringSchema) formSchema.getProperties().get("third");
824+
assertNotNull(third.getFormat());
825+
assertTrue("password".equals(third.getFormat()));
826+
827+
assertTrue(formSchema.getProperties().get("fourth") instanceof BooleanSchema);
828+
Schema fourth = (Schema) formSchema.getProperties().get("fourth");
829+
assertNotNull(fourth.getType());
830+
assertNotNull(fourth.getFormat());
831+
assertTrue("completely-custom".equals(fourth.getFormat()));
832+
}
833+
801834
private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException {
802835
SwaggerConverter converter = new SwaggerConverter();
803836
String swaggerAsString = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(file).toURI())));
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
swagger: '2.0'
2+
info:
3+
title: Test for Issue 1164
4+
version: 1.0.0
5+
paths:
6+
/foo:
7+
get:
8+
operationId: doFoo
9+
parameters:
10+
- in: formData
11+
name: first
12+
type: string
13+
required: true
14+
- in: formData
15+
name: second
16+
type: boolean
17+
required: true
18+
- in: formData
19+
name: third
20+
type: string
21+
format: password
22+
required: true
23+
- in: formData
24+
name: fourth
25+
type: boolean
26+
format: completely-custom
27+
required: true
28+
responses:
29+
'200':
30+
description: OK

modules/swagger-parser-v3/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.swagger.parser.v3</groupId>
55
<artifactId>swagger-parser-project</artifactId>
6-
<version>2.0.13-SNAPSHOT</version>
6+
<version>2.0.15-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public OpenAPI resolve() {
4949
pathProcessor.processPaths();
5050
componentsProcessor.processComponents();
5151

52+
5253
if(openApi.getPaths() != null) {
5354
for(String pathname : openApi.getPaths().keySet()) {
5455
PathItem pathItem = openApi.getPaths().get(pathname);

0 commit comments

Comments
 (0)