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