fix null ref on invalid requestBody reference (#13199)

This commit is contained in:
Dillen Meijboom
2022-08-17 09:28:29 +02:00
committed by GitHub
parent 65d57a8bf1
commit c135139e3d
3 changed files with 32 additions and 6 deletions

View File

@@ -167,7 +167,7 @@ public class InlineModelResolver {
* Return true if a model should be generated e.g. object with properties,
* enum, oneOf, allOf, anyOf, etc.
*
* @param schema target schema
* @param schema target schema
* @param visitedSchemas Visited schemas
*/
private boolean isModelNeeded(Schema schema, Set<Schema> visitedSchemas) {
@@ -429,6 +429,10 @@ public class InlineModelResolver {
if (requestBody.get$ref() != null) {
String ref = ModelUtils.getSimpleRef(requestBody.get$ref());
requestBody = openAPI.getComponents().getRequestBodies().get(ref);
if (requestBody == null) {
return;
}
}
flattenContent(requestBody.getContent(),

View File

@@ -351,6 +351,19 @@ public class InlineModelResolverTest {
assertTrue(user.getProperties().get("city") instanceof StringSchema);
}
@Test
public void resolveRequestBodyInvalidRef() {
OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/inline_model_resolver.yaml");
new InlineModelResolver().flatten(openAPI);
RequestBody requestBodyReference = openAPI
.getPaths()
.get("/resolve_request_body_invalid_ref")
.getPost()
.getRequestBody();
assertNull(requestBodyReference.getContent());
}
@Test
public void resolveInlineRequestBody() {
OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/inline_model_resolver.yaml");
@@ -611,7 +624,7 @@ public class InlineModelResolverTest {
Schema requestBodySchema = ModelUtils.getReferencedSchema(openAPI, mediaType.getSchema());
assertNotNull(requestBodySchema);
assertEquals(1, requestBodySchema.getProperties().size(), 1);
assertTrue(requestBodySchema.getProperties().get("arbitrary_object_request_body_property") instanceof ObjectSchema);
assertTrue(requestBodySchema.getProperties().get("arbitrary_object_request_body_property") instanceof ObjectSchema);
}
@Test
@@ -954,12 +967,12 @@ public class InlineModelResolverTest {
.getContent()
.get("application/json")
.getSchema();
//.getProperties()
//.get("nullable_request_body_property");
//.getProperties()
//.get("nullable_request_body_property");
Schema nullableRequestBodySchema = ModelUtils.getReferencedSchema(openAPI, nullableRequestBodyReference);
//assertEquals(nullableRequestBodySchema, "");
Schema nullableSchema = ModelUtils.getReferencedSchema(openAPI,
((Schema)nullableRequestBodySchema.getProperties().get("nullable_request_body_property")));
((Schema) nullableRequestBodySchema.getProperties().get("nullable_request_body_property")));
assertTrue(nullableSchema.getNullable());
}
@@ -1047,7 +1060,7 @@ public class InlineModelResolverTest {
requestBodyReference.getContent().get("application/json").getSchema().get$ref());
//assertEquals("#/components/schemas/resolveInlineRequestBodyAllOf_request", requestBodyReference.get$ref());
ComposedSchema allOfModel =(ComposedSchema) openAPI.getComponents().getSchemas().get("resolveInlineRequestBodyAllOf_request");
ComposedSchema allOfModel = (ComposedSchema) openAPI.getComponents().getSchemas().get("resolveInlineRequestBodyAllOf_request");
assertEquals("#/components/schemas/resolveInlineRequestBody_request", allOfModel.getAllOf().get(0).get$ref());
//Schema allOfModel = ModelUtils.getReferencedSchema(openAPI, requestBodyReference.get$ref());

View File

@@ -7,6 +7,14 @@ info:
servers:
- url: http://api.example.xyz/v1
paths:
/resolve_request_body_invalid_ref:
post:
requestBody:
$ref: '#/components/schemas/Invalid'
operationId: resolveRequestBodyInvalidRef
responses:
'200':
description: OK
/resolve_inline_request_body:
post:
requestBody:
@@ -348,6 +356,7 @@ paths:
data:
type: string
components:
requestBodies: {}
schemas:
Users:
type: array