52
52
import io .swagger .v3 .oas .models .servers .Server ;
53
53
import io .swagger .v3 .oas .models .servers .ServerVariable ;
54
54
import io .swagger .v3 .oas .models .servers .ServerVariables ;
55
+ import io .swagger .v3 .parser .core .models .ParseOptions ;
55
56
import io .swagger .v3 .parser .core .models .SwaggerParseResult ;
56
57
import io .swagger .v3 .core .util .Json ;
57
58
@@ -270,18 +271,19 @@ public SwaggerParseResult deserialize(JsonNode rootNode) {
270
271
}
271
272
272
273
public SwaggerParseResult deserialize (JsonNode rootNode , String path ) {
273
- return deserialize (rootNode , null , false );
274
+ return deserialize (rootNode , null , new ParseOptions () );
274
275
}
275
276
276
- public SwaggerParseResult deserialize (JsonNode rootNode , String path , boolean isOaiAuthor ) {
277
+ public SwaggerParseResult deserialize (JsonNode rootNode , String path , ParseOptions options ) {
277
278
basePath = path ;
278
279
this .rootNode = rootNode ;
279
280
rootMap = new ObjectMapper ().convertValue (rootNode , Map .class );
280
281
SwaggerParseResult result = new SwaggerParseResult ();
281
282
try {
282
283
283
284
ParseResult rootParse = new ParseResult ();
284
- rootParse .setOaiAuthor (isOaiAuthor );
285
+ rootParse .setOaiAuthor (options .isOaiAuthor ());
286
+ rootParse .setDefaultSchemaTypeObject (options .isDefaultSchemaTypeObject ());
285
287
OpenAPI api = parseRoot (rootNode , rootParse , path );
286
288
result .openapi31 (rootParse .isOpenapi31 ());
287
289
result .setOpenAPI (api );
@@ -1356,7 +1358,7 @@ public MediaType getMediaType(ObjectNode contentNode, String location, ParseResu
1356
1358
, false ));
1357
1359
}
1358
1360
1359
- Object example = getAnyExample ("example" , contentNode , location , result );
1361
+ Object example = getAnyType ("example" , contentNode , location , result );
1360
1362
if (example != null ) {
1361
1363
if (examplesObject != null ) {
1362
1364
result .warning (location , "examples already defined -- ignoring \" example\" field" );
@@ -1971,7 +1973,7 @@ public Parameter getParameter(ObjectNode obj, String location, ParseResult resul
1971
1973
, false ));
1972
1974
}
1973
1975
1974
- Object example = getAnyExample ("example" , obj , location , result );
1976
+ Object example = getAnyType ("example" , obj , location , result );
1975
1977
if (example != null ) {
1976
1978
if (examplesObject != null ) {
1977
1979
result .warning (location , "examples already defined -- ignoring \" example\" field" );
@@ -2104,7 +2106,7 @@ public Header getHeader(ObjectNode headerNode, String location, ParseResult resu
2104
2106
header .setExamples (getExamples (examplesObject , location , result , false ));
2105
2107
}
2106
2108
2107
- Object example = getAnyExample ("example" , headerNode , location , result );
2109
+ Object example = getAnyType ("example" , headerNode , location , result );
2108
2110
if (example != null ) {
2109
2111
if (examplesObject != null ) {
2110
2112
result .warning (location , "examples already defined -- ignoring \" example\" field" );
@@ -2133,8 +2135,8 @@ public Header getHeader(ObjectNode headerNode, String location, ParseResult resu
2133
2135
2134
2136
return header ;
2135
2137
}
2136
- //TODO rename method as is used by different objects not only to get examples
2137
- public Object getAnyExample (String nodeKey , ObjectNode node , String location , ParseResult result ) {
2138
+
2139
+ public Object getAnyType (String nodeKey , ObjectNode node , String location , ParseResult result ) {
2138
2140
JsonNode example = node .get (nodeKey );
2139
2141
if (example != null ) {
2140
2142
if (example .getNodeType ().equals (JsonNodeType .STRING )) {
@@ -2550,7 +2552,7 @@ at the moment path passed as string (basePath) from upper components can be both
2550
2552
}
2551
2553
}
2552
2554
2553
- if (itemsNode != null ) {
2555
+ if (itemsNode != null && result . isDefaultSchemaTypeObject () ) {
2554
2556
ArraySchema items = new ArraySchema ();
2555
2557
if (itemsNode .getNodeType ().equals (JsonNodeType .OBJECT )) {
2556
2558
items .setItems (getSchema (itemsNode , location , result ));
@@ -2562,6 +2564,18 @@ at the moment path passed as string (basePath) from upper components can be both
2562
2564
}
2563
2565
}
2564
2566
schema = items ;
2567
+ }else if (itemsNode != null ){
2568
+ Schema items = new Schema ();
2569
+ if (itemsNode .getNodeType ().equals (JsonNodeType .OBJECT )) {
2570
+ items .setItems (getSchema (itemsNode , location , result ));
2571
+ } else if (itemsNode .getNodeType ().equals (JsonNodeType .ARRAY )) {
2572
+ for (JsonNode n : itemsNode ) {
2573
+ if (n .isValueNode ()) {
2574
+ items .setItems (getSchema (itemsNode , location , result ));
2575
+ }
2576
+ }
2577
+ }
2578
+ schema = items ;
2565
2579
}
2566
2580
2567
2581
Boolean additionalPropertiesBoolean = getBoolean ("additionalProperties" , node , false , location , result );
@@ -2576,7 +2590,7 @@ at the moment path passed as string (basePath) from upper components can be both
2576
2590
? getSchema (additionalPropertiesObject , location , result )
2577
2591
: additionalPropertiesBoolean ;
2578
2592
2579
- if (additionalProperties != null ) {
2593
+ if (additionalProperties != null && result . isDefaultSchemaTypeObject () ) {
2580
2594
if (schema == null ) {
2581
2595
schema =
2582
2596
additionalProperties .equals (Boolean .FALSE )
@@ -2801,7 +2815,7 @@ at the moment path passed as string (basePath) from upper components can be both
2801
2815
}
2802
2816
2803
2817
//sets default value according to the schema type
2804
- if (node .get ("default" ) != null ) {
2818
+ if (node .get ("default" ) != null && result . isDefaultSchemaTypeObject () ) {
2805
2819
if (!StringUtils .isBlank (schema .getType ())) {
2806
2820
if (schema .getType ().equals ("array" )) {
2807
2821
ArrayNode array = getArray ("default" , node , false , location , result );
@@ -2840,6 +2854,13 @@ at the moment path passed as string (basePath) from upper components can be both
2840
2854
}
2841
2855
}
2842
2856
}
2857
+ }else {
2858
+ schema .setDefault (null );
2859
+ }
2860
+
2861
+ bool = getBoolean ("nullable" , node , false , location , result );
2862
+ if (bool != null ) {
2863
+ schema .setNullable (bool );
2843
2864
}
2844
2865
2845
2866
bool = getBoolean ("readOnly" , node , false , location , result );
@@ -2875,7 +2896,7 @@ at the moment path passed as string (basePath) from upper components can be both
2875
2896
}
2876
2897
}
2877
2898
2878
- Object example = getAnyExample ("example" , node , location , result );
2899
+ Object example = getAnyType ("example" , node , location , result );
2879
2900
if (example != null ) {
2880
2901
schema .setExample (example instanceof NullNode ? null : example );
2881
2902
}
@@ -3083,7 +3104,7 @@ public Example getExample(ObjectNode node, String location, ParseResult result)
3083
3104
example .setDescription (value );
3084
3105
}
3085
3106
3086
- Object sample = getAnyExample ("value" , node , location , result );
3107
+ Object sample = getAnyType ("value" , node , location , result );
3087
3108
if (sample != null ) {
3088
3109
example .setValue (sample instanceof NullNode ? null : sample );
3089
3110
}
@@ -3586,8 +3607,19 @@ public Schema getJsonSchema(ObjectNode node, String location, ParseResult result
3586
3607
schema = composedSchema ;
3587
3608
}
3588
3609
}
3589
-
3590
- if (itemsNode != null ) {
3610
+ if (itemsNode != null && result .isDefaultSchemaTypeObject ()) {
3611
+ ArraySchema items = new ArraySchema ();
3612
+ if (itemsNode .getNodeType ().equals (JsonNodeType .OBJECT )) {
3613
+ items .setItems (getSchema (itemsNode , location , result ));
3614
+ } else if (itemsNode .getNodeType ().equals (JsonNodeType .ARRAY )) {
3615
+ for (JsonNode n : itemsNode ) {
3616
+ if (n .isValueNode ()) {
3617
+ items .setItems (getSchema (itemsNode , location , result ));
3618
+ }
3619
+ }
3620
+ }
3621
+ schema = items ;
3622
+ }else if (itemsNode != null ) {
3591
3623
JsonSchema items = new JsonSchema ();
3592
3624
if (itemsNode .getNodeType ().equals (JsonNodeType .OBJECT )) {
3593
3625
items .setItems (getJsonSchema (itemsNode , location , result ));
@@ -3613,7 +3645,16 @@ public Schema getJsonSchema(ObjectNode node, String location, ParseResult result
3613
3645
? getJsonSchema (additionalPropertiesObject , location , result )
3614
3646
: additionalPropertiesBoolean ;
3615
3647
3616
- if (additionalProperties != null ) {
3648
+
3649
+ if (additionalProperties != null && result .isDefaultSchemaTypeObject ()) {
3650
+ if (schema == null ) {
3651
+ schema =
3652
+ additionalProperties .equals (Boolean .FALSE )
3653
+ ? new ObjectSchema ()
3654
+ : new MapSchema ();
3655
+ }
3656
+ schema .setAdditionalProperties (additionalProperties );
3657
+ }else if (additionalProperties != null ) {
3617
3658
if (schema == null ) {
3618
3659
schema = new JsonSchema ();
3619
3660
}
@@ -3689,7 +3730,9 @@ public Schema getJsonSchema(ObjectNode node, String location, ParseResult result
3689
3730
3690
3731
if (node .get ("default" ) != null ) {
3691
3732
//TODO rename method
3692
- schema .setDefault (getAnyExample ("default" ,node ,location ,result ));
3733
+ if (result .isDefaultSchemaTypeObject ()) {
3734
+ schema .setDefault (getAnyType ("default" , node , location , result ));
3735
+ }
3693
3736
}
3694
3737
3695
3738
ObjectNode discriminatorNode = getObject ("discriminator" , node , false , location , result );
@@ -4074,7 +4117,7 @@ public Schema getJsonSchema(ObjectNode node, String location, ParseResult result
4074
4117
schema .setExamples (exampleList );
4075
4118
}
4076
4119
4077
- Object example = getAnyExample ("example" , node , location , result );
4120
+ Object example = getAnyType ("example" , node , location , result );
4078
4121
if (example != null ) {
4079
4122
schema .setExample (example instanceof NullNode ? null : example );
4080
4123
}
@@ -4131,10 +4174,23 @@ public static class ParseResult {
4131
4174
private List <Location > unique = new ArrayList <>();
4132
4175
private List <Location > uniqueTags = new ArrayList <>();
4133
4176
private List <Location > reserved = new ArrayList <>();
4134
-
4177
+ private boolean defaultSchemaTypeObject = true ;
4135
4178
private boolean openapi31 = false ;
4136
4179
private boolean oaiAuthor = false ;
4137
4180
4181
+ public boolean isDefaultSchemaTypeObject () {
4182
+ return defaultSchemaTypeObject ;
4183
+ }
4184
+
4185
+ public void setDefaultSchemaTypeObject (boolean defaultSchemaTypeObject ) {
4186
+ this .defaultSchemaTypeObject = defaultSchemaTypeObject ;
4187
+ }
4188
+
4189
+ public ParseResult defaultSchemaTypeObject (boolean defaultSchemaTypeObject ) {
4190
+ this .defaultSchemaTypeObject = defaultSchemaTypeObject ;
4191
+ return this ;
4192
+ }
4193
+
4138
4194
public ParseResult () {
4139
4195
}
4140
4196
0 commit comments