Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -154,38 +154,38 @@ else if(rootPath != null) {
private Object loadInternalRef(String ref) {
Object result = null;

if(ref.startsWith("#/components/schemas")) {
result = getFromMap(ref, openApi.getComponents().getSchemas(), SCHEMAS_PATTERN);
}
else if(ref.startsWith("#/components/requestBodies")) {
result = getFromMap(ref, openApi.getComponents().getRequestBodies(), REQUEST_BODIES_PATTERN);
}
else if(ref.startsWith("#/components/examples")) {
result = getFromMap(ref, openApi.getComponents().getExamples(), EXAMPLES_PATTERN);
}
else if(ref.startsWith("#/components/responses")) {
result = getFromMap(ref, openApi.getComponents().getResponses(), RESPONSES_PATTERN);
}
else if(ref.startsWith("#/components/parameters")) {
result = getFromMap(ref, openApi.getComponents().getParameters(), PARAMETERS_PATTERN);
}
else if(ref.startsWith("#/components/links")) {
result = getFromMap(ref, openApi.getComponents().getLinks(), LINKS_PATTERN);
}
else if(ref.startsWith("#/components/headers")) {
result = getFromMap(ref, openApi.getComponents().getHeaders(), HEADERS_PATTERN);
}
else if(ref.startsWith("#/components/callbacks")) {
result = getFromMap(ref, openApi.getComponents().getCallbacks(), CALLBACKS_PATTERN);
}
else if(ref.startsWith("#/components/securitySchemes")) {
result = getFromMap(ref, openApi.getComponents().getSecuritySchemes(), SECURITY_SCHEMES);
}
else if(ref.startsWith("#/paths")) {
if (ref.startsWith("#/paths")) {
result = getFromMap(ref, openApi.getPaths(), PATHS_PATTERN);
} else if (openApi.getComponents() != null){
if(ref.startsWith("#/components/schemas")) {
result = getFromMap(ref, openApi.getComponents().getSchemas(), SCHEMAS_PATTERN);
}
else if(ref.startsWith("#/components/requestBodies")) {
result = getFromMap(ref, openApi.getComponents().getRequestBodies(), REQUEST_BODIES_PATTERN);
}
else if(ref.startsWith("#/components/examples")) {
result = getFromMap(ref, openApi.getComponents().getExamples(), EXAMPLES_PATTERN);
}
else if(ref.startsWith("#/components/responses")) {
result = getFromMap(ref, openApi.getComponents().getResponses(), RESPONSES_PATTERN);
}
else if(ref.startsWith("#/components/parameters")) {
result = getFromMap(ref, openApi.getComponents().getParameters(), PARAMETERS_PATTERN);
}
else if(ref.startsWith("#/components/links")) {
result = getFromMap(ref, openApi.getComponents().getLinks(), LINKS_PATTERN);
}
else if(ref.startsWith("#/components/headers")) {
result = getFromMap(ref, openApi.getComponents().getHeaders(), HEADERS_PATTERN);
}
else if(ref.startsWith("#/components/callbacks")) {
result = getFromMap(ref, openApi.getComponents().getCallbacks(), CALLBACKS_PATTERN);
}
else if(ref.startsWith("#/components/securitySchemes")) {
result = getFromMap(ref, openApi.getComponents().getSecuritySchemes(), SECURITY_SCHEMES);
}
}


return result;

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.swagger.v3.parser.processors;


import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.callbacks.Callback;
import io.swagger.v3.oas.models.examples.Example;
Expand Down Expand Up @@ -51,6 +52,9 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Schema> schemas = openAPI.getComponents().getSchemas();

if (schemas == null) {
Expand Down Expand Up @@ -131,6 +135,9 @@ public String processRefToExternalResponse(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, ApiResponse> responses = openAPI.getComponents().getResponses();

if (responses == null) {
Expand Down Expand Up @@ -186,6 +193,9 @@ public String processRefToExternalRequestBody(String $ref, RefFormat refFormat)
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, RequestBody> bodies = openAPI.getComponents().getRequestBodies();

if (bodies == null) {
Expand Down Expand Up @@ -241,6 +251,9 @@ public String processRefToExternalHeader(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Header> headers = openAPI.getComponents().getHeaders();

if (headers == null) {
Expand Down Expand Up @@ -296,6 +309,9 @@ public String processRefToExternalSecurityScheme(String $ref, RefFormat refForma
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, SecurityScheme> securitySchemeMap = openAPI.getComponents().getSecuritySchemes();

if (securitySchemeMap == null) {
Expand Down Expand Up @@ -351,6 +367,9 @@ public String processRefToExternalLink(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Link> links = openAPI.getComponents().getLinks();

if (links == null) {
Expand Down Expand Up @@ -406,6 +425,9 @@ public String processRefToExternalExample(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Example> examples = openAPI.getComponents().getExamples();

if (examples == null) {
Expand Down Expand Up @@ -461,6 +483,9 @@ public String processRefToExternalParameter(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Parameter> parameters = openAPI.getComponents().getParameters();

if (parameters == null) {
Expand Down Expand Up @@ -516,6 +541,9 @@ public String processRefToExternalCallback(String $ref, RefFormat refFormat) {
}
String newRef;

if (openAPI.getComponents() == null) {
openAPI.setComponents(new Components());
}
Map<String, Callback> callbacks = openAPI.getComponents().getCallbacks();

if (callbacks == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public OpenAPI parseRoot(JsonNode node, ParseResult result) {
openAPI.setPaths(paths);
}

obj = getObject("components", rootNode, true, location, result);
obj = getObject("components", rootNode, false, location, result);
if (obj != null) {
Components components = getComponents(obj, "components", result);
openAPI.setComponents(components);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -604,7 +604,17 @@ public void resolveComposedSchema(@Injectable final List<AuthorizationValue> aut

}

@Test
public void referringSpecWithoutComponentsTag() throws Exception {
ParseOptions resolve = new ParseOptions();
resolve.setResolveFully(true);
final OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/ref-without-component/a.yaml", null, resolve);

Map<String, Schema> schemas = openAPI.getComponents().getSchemas();
Assert.assertEquals("Example value", schemas.get("CustomerType").getExample());
}



public void testRefNameConflicts() throws Exception {
ParseOptions options = new ParseOptions();
options.setResolveFully(true);
Expand All @@ -617,6 +627,7 @@ public void testRefNameConflicts() throws Exception {
AssertJUnit.assertEquals("referred", ((Schema) openAPI.getComponents().getSchemas().get("PersonObj_2").getProperties().get("location")).getExample());
}


private static int getDynamicPort() {
return new Random().ints(50000, 60000).findFirst().getAsInt();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,6 @@ public void testAlmostEmpty(@Injectable List<AuthorizationValue> auths) {

assertTrue(messages.contains("attribute info is missing"));
assertTrue(messages.contains("attribute paths is missing"));
assertTrue(messages.contains("attribute components is missing"));
assertTrue(messages.contains("attribute new is unexpected"));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
openapi: 3.0.0
paths:
"/newPerson":
post:
summary: Create new person
description: Create new person
responses:
'200':
description: OK
content:
"*/*":
schema:
"$ref": "./src/test/resources/ref-without-component/b.yaml#/components/schemas/CustomerType"
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
openapi: 3.0.0
components:
schemas:
CustomerType:
type: string
example: Example value