diff --git a/modules/swagger-parser-v3/pom.xml b/modules/swagger-parser-v3/pom.xml index 20eab2a479..e297c3c9e5 100644 --- a/modules/swagger-parser-v3/pom.xml +++ b/modules/swagger-parser-v3/pom.xml @@ -3,7 +3,7 @@ io.swagger.parser.v3 swagger-parser-project - 2.1.23-SNAPSHOT + 2.1.22 ../.. 4.0.0 diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/InlineModelResolver.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/InlineModelResolver.java index 6cfd900161..4bafc43264 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/InlineModelResolver.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/InlineModelResolver.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -416,7 +417,7 @@ private static String normalize(String pathPart) } private String resolveModelName(String title, String key) { - if (title == null) { + if (StringUtils.isBlank(title)) { return uniqueName(key); } else { return uniqueName(title); diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java index ba2d40af59..35b29b61fc 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java @@ -1509,4 +1509,16 @@ public void testSchemaPropertiesBeingPassedToFlattenedModel() { assertEquals(userAddress.getWriteOnly(), Boolean.FALSE); } + + @Test(description = "https://github.com/swagger-api/swagger-parser/issues/2118") + public void testInlineSchemaWithEmptyTitle() { + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setFlatten(true); + OpenAPI openAPI = new OpenAPIV3Parser().read("issue2118/issue2118.yaml", null, options); + + assertNotNull(openAPI); + assertNotNull(openAPI.getComponents().getSchemas().get("MegaPet_creator")); + assertNull(openAPI.getComponents().getSchemas().get("")); + } } diff --git a/modules/swagger-parser-v3/src/test/resources/issue2118/issue2118.yaml b/modules/swagger-parser-v3/src/test/resources/issue2118/issue2118.yaml new file mode 100644 index 0000000000..64b5c7ddb4 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/issue2118/issue2118.yaml @@ -0,0 +1,97 @@ +openapi: "3.0.0" +info: + title: API + description: API + version: 1.0.0 +paths: + /pet-types: + post: + description: Creates a new pet in the store. Duplicates are allowed + operationId: addPet + requestBody: + description: Pet to add to the store + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MegaPet' + responses: + '200': + description: pet response + content: + application/json: + schema: + $ref: '#/components/schemas/MegaPet' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + schemas: + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + MegaPet: + properties: + id: + type: integer + format: int64 + code: + type: string + format: byte + example: MjIyMjIyMg== + additionalCode: + type: string + format: binary + example: MjIyMjIyMg== + dateOfBirth: + type: string + format: date + example: "2000-12-12" + timeOfVaccination: + type: string + format: date-time + example: 2012-01-24T15:54:14.876Z + age: + type: string + pattern: "[0-9]+" + owner: + type: object + previousOwner: + type: object + example: "prev owner" + metadata: + type: object + maxProperties: 10 + additionalProperties: + type: string + maxLength: 256 + creator: + title: '' + description: '' + type: object + properties: + id: + description: '' + type: string + example: 63d415e0dd0d828c3a878548 + readOnly: true + email: + description: '' + type: string + example: fett@intergalactic.com + readOnly: true + displayName: + description: '' + type: string + example: Boba Fett + readOnly: true