11package io .swagger .v3 .parser .converter ;
22
3+ import io .swagger .models .ArrayModel ;
4+ import io .swagger .models .ComposedModel ;
5+ import io .swagger .models .ExternalDocs ;
6+ import io .swagger .models .Model ;
7+ import io .swagger .models .ModelImpl ;
8+ import io .swagger .models .Path ;
9+ import io .swagger .models .RefModel ;
10+ import io .swagger .models .RefPath ;
11+ import io .swagger .models .RefResponse ;
12+ import io .swagger .models .Response ;
13+ import io .swagger .models .Scheme ;
14+ import io .swagger .models .SecurityRequirement ;
15+ import io .swagger .models .Swagger ;
16+ import io .swagger .models .auth .ApiKeyAuthDefinition ;
17+ import io .swagger .models .auth .OAuth2Definition ;
18+ import io .swagger .models .auth .SecuritySchemeDefinition ;
19+ import io .swagger .models .parameters .AbstractSerializableParameter ;
20+ import io .swagger .models .parameters .BodyParameter ;
21+ import io .swagger .models .parameters .RefParameter ;
22+ import io .swagger .models .parameters .SerializableParameter ;
23+ import io .swagger .models .properties .AbstractNumericProperty ;
24+ import io .swagger .models .properties .ArrayProperty ;
25+ import io .swagger .models .properties .MapProperty ;
26+ import io .swagger .models .properties .ObjectProperty ;
27+ import io .swagger .models .properties .Property ;
28+ import io .swagger .models .properties .RefProperty ;
29+ import io .swagger .parser .SwaggerParser ;
30+ import io .swagger .parser .SwaggerResolver ;
31+ import io .swagger .parser .util .SwaggerDeserializationResult ;
32+ import io .swagger .util .Json ;
333import io .swagger .v3 .oas .models .Components ;
434import io .swagger .v3 .oas .models .ExternalDocumentation ;
535import io .swagger .v3 .oas .models .OpenAPI ;
3262import io .swagger .v3 .parser .core .models .ParseOptions ;
3363import io .swagger .v3 .parser .core .models .SwaggerParseResult ;
3464import org .apache .commons .lang3 .StringUtils ;
35- import io .swagger .models .ArrayModel ;
36- import io .swagger .models .ComposedModel ;
37- import io .swagger .models .ExternalDocs ;
38- import io .swagger .models .Model ;
39- import io .swagger .models .ModelImpl ;
40- import io .swagger .models .Path ;
41- import io .swagger .models .RefModel ;
42- import io .swagger .models .RefPath ;
43- import io .swagger .models .RefResponse ;
44- import io .swagger .models .Response ;
45- import io .swagger .models .Scheme ;
46- import io .swagger .models .SecurityRequirement ;
47- import io .swagger .models .Swagger ;
48- import io .swagger .models .auth .ApiKeyAuthDefinition ;
49- import io .swagger .models .auth .OAuth2Definition ;
50- import io .swagger .models .auth .SecuritySchemeDefinition ;
51- import io .swagger .models .parameters .AbstractSerializableParameter ;
52- import io .swagger .models .parameters .BodyParameter ;
53- import io .swagger .models .parameters .RefParameter ;
54- import io .swagger .models .parameters .SerializableParameter ;
55- import io .swagger .models .properties .AbstractNumericProperty ;
56- import io .swagger .models .properties .ArrayProperty ;
57- import io .swagger .models .properties .MapProperty ;
58- import io .swagger .models .properties .ObjectProperty ;
59- import io .swagger .models .properties .Property ;
60- import io .swagger .models .properties .RefProperty ;
61- import io .swagger .parser .SwaggerParser ;
62- import io .swagger .parser .SwaggerResolver ;
63- import io .swagger .parser .util .SwaggerDeserializationResult ;
64- import io .swagger .util .Json ;
65+
6566import java .math .BigDecimal ;
6667import java .util .ArrayList ;
6768import java .util .Arrays ;
7374public class SwaggerConverter implements SwaggerParserExtension {
7475 private List <String > globalConsumes = new ArrayList <>();
7576 private List <String > globalProduces = new ArrayList <>();
77+ private Components components = new Components ();
7678
7779 @ Override
7880 public SwaggerParseResult readLocation (String url , List <AuthorizationValue > auths , ParseOptions options ) {
@@ -88,7 +90,8 @@ public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth
8890
8991 @ Override
9092 public SwaggerParseResult readContents (String swaggerAsString , List <AuthorizationValue > auth , ParseOptions options ) {
91- SwaggerDeserializationResult result = new SwaggerParser ().readWithInfo (swaggerAsString );
93+ SwaggerDeserializationResult result = new SwaggerParser ().readWithInfo (swaggerAsString , options == null ?
94+ true : options .isResolve ());
9295
9396 if (options != null ) {
9497 if (options .isResolve ()) {
@@ -177,16 +180,6 @@ public SwaggerParseResult convert(SwaggerDeserializationResult parse) {
177180 }
178181 }
179182
180- Paths v3Paths = new Paths ();
181- for (String pathname : swagger .getPaths ().keySet ()) {
182- io .swagger .models .Path v2Path = swagger .getPath (pathname );
183- PathItem v3Path = convert (v2Path );
184- v3Paths .put (pathname , v3Path );
185- }
186- openAPI .setPaths (v3Paths );
187-
188- Components components = new Components ();
189-
190183 if (swagger .getParameters () != null ) {
191184 swagger .getParameters ().forEach ((k , v ) -> {
192185 if ("body" .equals (v .getIn ())) {
@@ -199,6 +192,14 @@ public SwaggerParseResult convert(SwaggerDeserializationResult parse) {
199192 });
200193 }
201194
195+ Paths v3Paths = new Paths ();
196+ for (String pathname : swagger .getPaths ().keySet ()) {
197+ io .swagger .models .Path v2Path = swagger .getPath (pathname );
198+ PathItem v3Path = convert (v2Path );
199+ v3Paths .put (pathname , v3Path );
200+ }
201+ openAPI .setPaths (v3Paths );
202+
202203 if (swagger .getResponses () != null ) {
203204 swagger .getResponses ().forEach ((k , v ) -> components .addResponses (k , convert (v )));
204205 }
@@ -863,8 +864,14 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) {
863864
864865 RefParameter ref = (RefParameter ) v2Parameter ;
865866 if (ref .get$ref ().indexOf ("#/parameters" ) == 0 ) {
866-
867- String updatedRef = "#/components/parameters" + ref .get$ref ().substring ("#/parameters" .length ());
867+ String updatedRef = "#/components/" ;
868+ if (components .getRequestBodies () != null &&
869+ components .getRequestBodies ().get (ref .getSimpleRef ()) != null ) {
870+ updatedRef += "requestBodies" ;
871+ } else {
872+ updatedRef += "parameters" ;
873+ }
874+ updatedRef += ref .get$ref ().substring ("#/parameters" .length ());
868875 ref .set$ref (updatedRef );
869876 }
870877
0 commit comments