Skip to content

Commit dfb6ace

Browse files
authored
Merge pull request #578 from joeljons/refering-without-components
Referring without components
2 parents fb5593a + 6a8b811 commit dfb6ace

File tree

7 files changed

+89
-32
lines changed

7 files changed

+89
-32
lines changed

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

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -154,38 +154,38 @@ else if(rootPath != null) {
154154
private Object loadInternalRef(String ref) {
155155
Object result = null;
156156

157-
if(ref.startsWith("#/components/schemas")) {
158-
result = getFromMap(ref, openApi.getComponents().getSchemas(), SCHEMAS_PATTERN);
159-
}
160-
else if(ref.startsWith("#/components/requestBodies")) {
161-
result = getFromMap(ref, openApi.getComponents().getRequestBodies(), REQUEST_BODIES_PATTERN);
162-
}
163-
else if(ref.startsWith("#/components/examples")) {
164-
result = getFromMap(ref, openApi.getComponents().getExamples(), EXAMPLES_PATTERN);
165-
}
166-
else if(ref.startsWith("#/components/responses")) {
167-
result = getFromMap(ref, openApi.getComponents().getResponses(), RESPONSES_PATTERN);
168-
}
169-
else if(ref.startsWith("#/components/parameters")) {
170-
result = getFromMap(ref, openApi.getComponents().getParameters(), PARAMETERS_PATTERN);
171-
}
172-
else if(ref.startsWith("#/components/links")) {
173-
result = getFromMap(ref, openApi.getComponents().getLinks(), LINKS_PATTERN);
174-
}
175-
else if(ref.startsWith("#/components/headers")) {
176-
result = getFromMap(ref, openApi.getComponents().getHeaders(), HEADERS_PATTERN);
177-
}
178-
else if(ref.startsWith("#/components/callbacks")) {
179-
result = getFromMap(ref, openApi.getComponents().getCallbacks(), CALLBACKS_PATTERN);
180-
}
181-
else if(ref.startsWith("#/components/securitySchemes")) {
182-
result = getFromMap(ref, openApi.getComponents().getSecuritySchemes(), SECURITY_SCHEMES);
183-
}
184-
else if(ref.startsWith("#/paths")) {
157+
if (ref.startsWith("#/paths")) {
185158
result = getFromMap(ref, openApi.getPaths(), PATHS_PATTERN);
159+
} else if (openApi.getComponents() != null){
160+
if(ref.startsWith("#/components/schemas")) {
161+
result = getFromMap(ref, openApi.getComponents().getSchemas(), SCHEMAS_PATTERN);
162+
}
163+
else if(ref.startsWith("#/components/requestBodies")) {
164+
result = getFromMap(ref, openApi.getComponents().getRequestBodies(), REQUEST_BODIES_PATTERN);
165+
}
166+
else if(ref.startsWith("#/components/examples")) {
167+
result = getFromMap(ref, openApi.getComponents().getExamples(), EXAMPLES_PATTERN);
168+
}
169+
else if(ref.startsWith("#/components/responses")) {
170+
result = getFromMap(ref, openApi.getComponents().getResponses(), RESPONSES_PATTERN);
171+
}
172+
else if(ref.startsWith("#/components/parameters")) {
173+
result = getFromMap(ref, openApi.getComponents().getParameters(), PARAMETERS_PATTERN);
174+
}
175+
else if(ref.startsWith("#/components/links")) {
176+
result = getFromMap(ref, openApi.getComponents().getLinks(), LINKS_PATTERN);
177+
}
178+
else if(ref.startsWith("#/components/headers")) {
179+
result = getFromMap(ref, openApi.getComponents().getHeaders(), HEADERS_PATTERN);
180+
}
181+
else if(ref.startsWith("#/components/callbacks")) {
182+
result = getFromMap(ref, openApi.getComponents().getCallbacks(), CALLBACKS_PATTERN);
183+
}
184+
else if(ref.startsWith("#/components/securitySchemes")) {
185+
result = getFromMap(ref, openApi.getComponents().getSecuritySchemes(), SECURITY_SCHEMES);
186+
}
186187
}
187188

188-
189189
return result;
190190

191191
}

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.swagger.v3.parser.processors;
22

33

4+
import io.swagger.v3.oas.models.Components;
45
import io.swagger.v3.oas.models.OpenAPI;
56
import io.swagger.v3.oas.models.callbacks.Callback;
67
import io.swagger.v3.oas.models.examples.Example;
@@ -51,6 +52,9 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) {
5152
}
5253
String newRef;
5354

55+
if (openAPI.getComponents() == null) {
56+
openAPI.setComponents(new Components());
57+
}
5458
Map<String, Schema> schemas = openAPI.getComponents().getSchemas();
5559

5660
if (schemas == null) {
@@ -131,6 +135,9 @@ public String processRefToExternalResponse(String $ref, RefFormat refFormat) {
131135
}
132136
String newRef;
133137

138+
if (openAPI.getComponents() == null) {
139+
openAPI.setComponents(new Components());
140+
}
134141
Map<String, ApiResponse> responses = openAPI.getComponents().getResponses();
135142

136143
if (responses == null) {
@@ -186,6 +193,9 @@ public String processRefToExternalRequestBody(String $ref, RefFormat refFormat)
186193
}
187194
String newRef;
188195

196+
if (openAPI.getComponents() == null) {
197+
openAPI.setComponents(new Components());
198+
}
189199
Map<String, RequestBody> bodies = openAPI.getComponents().getRequestBodies();
190200

191201
if (bodies == null) {
@@ -241,6 +251,9 @@ public String processRefToExternalHeader(String $ref, RefFormat refFormat) {
241251
}
242252
String newRef;
243253

254+
if (openAPI.getComponents() == null) {
255+
openAPI.setComponents(new Components());
256+
}
244257
Map<String, Header> headers = openAPI.getComponents().getHeaders();
245258

246259
if (headers == null) {
@@ -296,6 +309,9 @@ public String processRefToExternalSecurityScheme(String $ref, RefFormat refForma
296309
}
297310
String newRef;
298311

312+
if (openAPI.getComponents() == null) {
313+
openAPI.setComponents(new Components());
314+
}
299315
Map<String, SecurityScheme> securitySchemeMap = openAPI.getComponents().getSecuritySchemes();
300316

301317
if (securitySchemeMap == null) {
@@ -351,6 +367,9 @@ public String processRefToExternalLink(String $ref, RefFormat refFormat) {
351367
}
352368
String newRef;
353369

370+
if (openAPI.getComponents() == null) {
371+
openAPI.setComponents(new Components());
372+
}
354373
Map<String, Link> links = openAPI.getComponents().getLinks();
355374

356375
if (links == null) {
@@ -406,6 +425,9 @@ public String processRefToExternalExample(String $ref, RefFormat refFormat) {
406425
}
407426
String newRef;
408427

428+
if (openAPI.getComponents() == null) {
429+
openAPI.setComponents(new Components());
430+
}
409431
Map<String, Example> examples = openAPI.getComponents().getExamples();
410432

411433
if (examples == null) {
@@ -461,6 +483,9 @@ public String processRefToExternalParameter(String $ref, RefFormat refFormat) {
461483
}
462484
String newRef;
463485

486+
if (openAPI.getComponents() == null) {
487+
openAPI.setComponents(new Components());
488+
}
464489
Map<String, Parameter> parameters = openAPI.getComponents().getParameters();
465490

466491
if (parameters == null) {
@@ -516,6 +541,9 @@ public String processRefToExternalCallback(String $ref, RefFormat refFormat) {
516541
}
517542
String newRef;
518543

544+
if (openAPI.getComponents() == null) {
545+
openAPI.setComponents(new Components());
546+
}
519547
Map<String, Callback> callbacks = openAPI.getComponents().getCallbacks();
520548

521549
if (callbacks == null) {

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public OpenAPI parseRoot(JsonNode node, ParseResult result) {
136136
openAPI.setPaths(paths);
137137
}
138138

139-
obj = getObject("components", rootNode, true, location, result);
139+
obj = getObject("components", rootNode, false, location, result);
140140
if (obj != null) {
141141
Components components = getComponents(obj, "components", result);
142142
openAPI.setComponents(components);

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,17 @@ public void resolveComposedSchema(@Injectable final List<AuthorizationValue> aut
604604

605605
}
606606

607-
@Test
607+
public void referringSpecWithoutComponentsTag() throws Exception {
608+
ParseOptions resolve = new ParseOptions();
609+
resolve.setResolveFully(true);
610+
final OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/ref-without-component/a.yaml", null, resolve);
611+
612+
Map<String, Schema> schemas = openAPI.getComponents().getSchemas();
613+
Assert.assertEquals("Example value", schemas.get("CustomerType").getExample());
614+
}
615+
616+
617+
608618
public void testRefNameConflicts() throws Exception {
609619
ParseOptions options = new ParseOptions();
610620
options.setResolveFully(true);
@@ -617,6 +627,7 @@ public void testRefNameConflicts() throws Exception {
617627
AssertJUnit.assertEquals("referred", ((Schema) openAPI.getComponents().getSchemas().get("PersonObj_2").getProperties().get("location")).getExample());
618628
}
619629

630+
620631
private static int getDynamicPort() {
621632
return new Random().ints(50000, 60000).findFirst().getAsInt();
622633
}

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,6 @@ public void testAlmostEmpty(@Injectable List<AuthorizationValue> auths) {
542542

543543
assertTrue(messages.contains("attribute info is missing"));
544544
assertTrue(messages.contains("attribute paths is missing"));
545-
assertTrue(messages.contains("attribute components is missing"));
546545
assertTrue(messages.contains("attribute new is unexpected"));
547546
}
548547

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
openapi: 3.0.0
2+
paths:
3+
"/newPerson":
4+
post:
5+
summary: Create new person
6+
description: Create new person
7+
responses:
8+
'200':
9+
description: OK
10+
content:
11+
"*/*":
12+
schema:
13+
"$ref": "./src/test/resources/ref-without-component/b.yaml#/components/schemas/CustomerType"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
openapi: 3.0.0
2+
components:
3+
schemas:
4+
CustomerType:
5+
type: string
6+
example: Example value

0 commit comments

Comments
 (0)