Skip to content

Commit 99bdc74

Browse files
authored
Merge branch 'master' into issue-1292
2 parents 831efae + e172a00 commit 99bdc74

38 files changed

+1267
-270
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.17</version>
106+
<version>2.0.18</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.18-SNAPSHOT</version>
6+
<version>2.0.19-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

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.18-SNAPSHOT</version>
6+
<version>2.0.19-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

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.18-SNAPSHOT</version>
6+
<version>2.0.19-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ public static ObjectMapper createJson() {
1515
}
1616

1717
protected static ObjectMapper createJson(boolean includePathDeserializer, boolean includeResponseDeserializer) {
18-
return create(null, includePathDeserializer, includeResponseDeserializer);
18+
return create(createJsonFactory(), includePathDeserializer, includeResponseDeserializer);
1919
}
2020

2121
public static ObjectMapper createYaml() {
2222
return createYaml(true, true);
2323
}
2424

2525
protected static ObjectMapper createYaml(boolean includePathDeserializer, boolean includeResponseDeserializer) {
26-
return create(new YAMLFactory(), includePathDeserializer, includeResponseDeserializer);
26+
return create(createYamlFactory(), includePathDeserializer, includeResponseDeserializer);
2727
}
2828

2929
private static ObjectMapper create(JsonFactory jsonFactory, boolean includePathDeserializer, boolean includeResponseDeserializer) {
30-
ObjectMapper mapper = jsonFactory == null ? new ObjectMapper(createJsonFactory()) : new ObjectMapper(jsonFactory);
30+
ObjectMapper mapper = new ObjectMapper(jsonFactory);
3131

3232
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
3333
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
@@ -42,4 +42,10 @@ private static JsonFactory createJsonFactory() {
4242
.enable(StreamReadFeature.STRICT_DUPLICATE_DETECTION)
4343
.build();
4444
}
45+
46+
private static JsonFactory createYamlFactory() {
47+
return YAMLFactory.builder()
48+
.enable(StreamReadFeature.STRICT_DUPLICATE_DETECTION)
49+
.build();
50+
}
4551
}

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.swagger.v3.oas.models.links.Link;
1212
import io.swagger.v3.oas.models.media.ArraySchema;
1313
import io.swagger.v3.oas.models.media.ComposedSchema;
14+
import io.swagger.v3.oas.models.media.Discriminator;
1415
import io.swagger.v3.oas.models.media.MediaType;
1516
import io.swagger.v3.oas.models.media.ObjectSchema;
1617
import io.swagger.v3.oas.models.media.Schema;
@@ -156,6 +157,8 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) {
156157

157158
processProperties(subProps,file);
158159

160+
processDiscriminator(schema.getDiscriminator(),file);
161+
159162
if(schema.getAdditionalProperties() != null && schema.getAdditionalProperties() instanceof Schema){
160163
Schema additionalProperty = (Schema) schema.getAdditionalProperties();
161164
if (additionalProperty.get$ref() != null) {
@@ -229,6 +232,7 @@ private void processProperties(Map<String, Schema> properties, String file) {
229232
}
230233
}
231234

235+
232236
public PathItem processRefToExternalPathItem(String $ref, RefFormat refFormat) {
233237

234238
final PathItem pathItem = cache.loadRef($ref, refFormat, PathItem.class);
@@ -306,6 +310,22 @@ public PathItem processRefToExternalPathItem(String $ref, RefFormat refFormat) {
306310
return pathItem;
307311
}
308312

313+
private void processDiscriminator(Discriminator d, String file) {
314+
if (d != null && d.getMapping() != null) {
315+
processDiscriminatorMapping(d.getMapping(), file);
316+
}
317+
}
318+
319+
private void processDiscriminatorMapping(Map<String, String> mapping, String file) {
320+
for (String key : mapping.keySet()) {
321+
String ref = mapping.get(key);
322+
Schema subtype = new Schema().$ref(ref);
323+
processSchema(subtype, file);
324+
mapping.put(key, subtype.get$ref());
325+
}
326+
327+
}
328+
309329
public String processRefToExternalResponse(String $ref, RefFormat refFormat) {
310330
String renamedRef = cache.getRenamedRef($ref);
311331
if(renamedRef != null) {
@@ -787,6 +807,42 @@ private void processRefContent(Map<String, MediaType> content, String $ref) {
787807
if(mediaType.getSchema() != null) {
788808
processRefSchemaObject(mediaType.getSchema(), $ref);
789809
}
810+
if(mediaType.getExamples() != null) {
811+
processRefExamples(mediaType.getExamples(), $ref);
812+
}
813+
}
814+
}
815+
816+
private void processRefExamples(Map<String, Example> examples, String $ref) {
817+
String file = $ref.split("#/")[0];
818+
for(Example example : examples.values()) {
819+
if (example.get$ref() != null) {
820+
RefFormat ref = computeRefFormat(example.get$ref());
821+
if (isAnExternalRefFormat(ref)) {
822+
processRefExample(example, $ref);
823+
} else {
824+
processRefToExternalExample(file + example.get$ref(), RefFormat.RELATIVE);
825+
}
826+
}
827+
}
828+
}
829+
830+
private void processRefExample(Example example, String externalFile) {
831+
RefFormat format = computeRefFormat(example.get$ref());
832+
833+
if (!isAnExternalRefFormat(format)) {
834+
example.set$ref(RefType.SCHEMAS.getInternalPrefix()+ processRefToExternalSchema(externalFile + example.get$ref(), RefFormat.RELATIVE));
835+
return;
836+
}
837+
String $ref = example.get$ref();
838+
String subRefExternalPath = getExternalPath(example.get$ref())
839+
.orElse(null);
840+
841+
if (format.equals(RefFormat.RELATIVE) && !Objects.equals(subRefExternalPath, externalFile)) {
842+
$ref = join(externalFile, example.get$ref());
843+
example.set$ref($ref);
844+
}else {
845+
processRefToExternalExample($ref, format);
790846
}
791847
}
792848

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,19 @@ public void processSchemaType(Schema schema){
6161
processAdditionalProperties(schema);
6262

6363
}
64+
if (schema.getDiscriminator() != null) {
65+
processDiscriminatorSchema(schema);
66+
}
67+
68+
}
6469

70+
private void processDiscriminatorSchema(Schema schema) {
71+
if (schema.getDiscriminator() != null && schema.getDiscriminator().getMapping() != null) {
72+
Map<String, String> mapping = schema.getDiscriminator().getMapping();
73+
for (String ref : mapping.values()) {
74+
processReferenceSchema(new Schema().$ref(ref));
75+
}
76+
}
6577
}
6678

6779
private void processAdditionalProperties(Object additionalProperties) {

0 commit comments

Comments
 (0)