Skip to content

Commit f8c6f35

Browse files
authored
Merge pull request #1 from swagger-api/master
latest changes
2 parents aa83ef4 + a33a2c2 commit f8c6f35

File tree

58 files changed

+1860
-346
lines changed

Some content is hidden

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

58 files changed

+1860
-346
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
[![Build Status](https://img.shields.io/jenkins/s/https/jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2.svg)](https://jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2)
66

7+
[![Build Status](https://jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2/badge/icon?subject=jenkins%20build%20-%20java%208)](https://jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2/)
8+
9+
[![Build Status](https://jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2-java9/badge/icon?subject=jenkins%20build%20-%20java%209)](https://jenkins.swagger.io/view/OSS%20-%20Java/job/oss-swagger-parser-v2-java9/)
10+
711
## Overview
812
This is the Swagger Parser project, which reads OpenAPI definitions into current Java POJOs. It also provides a simple framework to add additional converters from different formats into the Swagger objects, making the entire toolchain available.
913

@@ -99,7 +103,7 @@ You can include this library from Sonatype OSS for SNAPSHOTS, or Maven central f
99103
<dependency>
100104
<groupId>io.swagger.parser.v3</groupId>
101105
<artifactId>swagger-parser</artifactId>
102-
<version>2.0.12</version>
106+
<version>2.0.14</version>
103107
</dependency>
104108
```
105109

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: 35 additions & 5 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) {
@@ -420,7 +439,7 @@ private List<Server> convert(List<Scheme> schemes, String host, String basePath)
420439
servers.add(server);
421440
}
422441
} else {
423-
if (!"/".equals(baseUrl)) {
442+
if (!StringUtils.startsWith(baseUrl, "/") && !"/".equals(baseUrl)) {
424443
baseUrl = "//" + baseUrl;
425444
}
426445
Server server = new Server();
@@ -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: 45 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;
@@ -90,6 +92,8 @@ public class V2ConverterTest {
9092
private static final String ISSUE_768_JSON = "issue-786.json";
9193
private static final String ISSUE_820_YAML = "issue-820.yaml";
9294
private static final String ISSUE_1032_YAML = "issue-1032.yaml";
95+
private static final String ISSUE_1113_YAML = "issue-1113.yaml";
96+
private static final String ISSUE_1164_YAML = "issue-1164.yaml";
9397

9498
private static final String API_BATCH_PATH = "/api/batch/";
9599
private static final String PETS_PATH = "/pets";
@@ -779,7 +783,47 @@ public void testIssue1032() throws Exception {
779783
assertEquals(INTEGER_TYPE, integerSchema.getType());
780784
assertEquals(INT64_FORMAT, integerSchema.getFormat());
781785
}
782-
786+
787+
@Test(description = "OpenAPI v2 converter - converts URL correctly when it begins with forward slash")
788+
public void testIssue1113() throws Exception {
789+
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_1113_YAML);
790+
assertNotNull(oas);
791+
assertNotNull(oas.getServers());
792+
assertFalse(oas.getServers().isEmpty());
793+
assertNotNull(oas.getServers().get(0));
794+
assertEquals(oas.getServers().get(0).getUrl(), "/test");
795+
}
796+
797+
@Test(description = "OpenAPI v2 converter - uses specialized schema subclasses where available")
798+
public void testIssue1164() throws Exception {
799+
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_1164_YAML);
800+
assertNotNull(oas);
801+
assertNotNull(oas.getPaths());
802+
assertNotNull(oas.getPaths().get("/foo"));
803+
assertNotNull(oas.getPaths().get("/foo").getGet());
804+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody());
805+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody().getContent());
806+
assertNotNull(oas.getPaths().get("/foo").getGet().getRequestBody().getContent().get("multipart/form-data"));
807+
Schema formSchema = oas.getPaths().get("/foo").getGet().getRequestBody().getContent().get("multipart/form-data").getSchema();
808+
assertNotNull(formSchema);
809+
assertNotNull(formSchema.getProperties());
810+
assertEquals(4, formSchema.getProperties().size());
811+
assertTrue(formSchema.getProperties().get("first") instanceof StringSchema);
812+
813+
assertTrue(formSchema.getProperties().get("second") instanceof BooleanSchema);
814+
815+
assertTrue(formSchema.getProperties().get("third") instanceof StringSchema);
816+
StringSchema third = (StringSchema) formSchema.getProperties().get("third");
817+
assertNotNull(third.getFormat());
818+
assertTrue("password".equals(third.getFormat()));
819+
820+
assertTrue(formSchema.getProperties().get("fourth") instanceof BooleanSchema);
821+
Schema fourth = (Schema) formSchema.getProperties().get("fourth");
822+
assertNotNull(fourth.getType());
823+
assertNotNull(fourth.getFormat());
824+
assertTrue("completely-custom".equals(fourth.getFormat()));
825+
}
826+
783827
private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException {
784828
SwaggerConverter converter = new SwaggerConverter();
785829
String swaggerAsString = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(file).toURI())));
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
swagger: '2.0'
2+
info:
3+
title: Test for Issue 1113
4+
version: 1.0.0
5+
basePath: /test
6+
paths:
7+
/ping:
8+
get:
9+
summary: test
10+
description: 'test'
11+
operationId: pingOp
12+
responses:
13+
'200':
14+
description: OK
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>

0 commit comments

Comments
 (0)