diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java index 5a6c94d9b8..4eeee6347b 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java @@ -235,6 +235,12 @@ private void processProperties(final Map subProps, final Strin file); } } + else if (prop.getValue() instanceof ObjectProperty){ + ObjectProperty objProp = (ObjectProperty) prop.getValue(); + if(objProp.getProperties() != null ){ + processProperties(objProp.getProperties(),file); + } + } } } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java index 37405a1102..5b2d09d66c 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java @@ -1405,4 +1405,12 @@ public void testIssue258() { assertEquals(result.getMessages().get(0), "attribute paths.'/pets/{id}'(post).operationId is repeated"); } + @Test + public void testIssue913() { + SwaggerParser parser = new SwaggerParser(); + final Swagger swagger = parser.read("src/test/resources/issue-913/BS/ApiSpecification.yaml"); + Assert.assertNotNull(swagger); + Assert.assertNotNull(swagger.getDefinitions().get("indicatorType")); + Assert.assertEquals(swagger.getDefinitions().get("indicatorType").getProperties().size(),1); + } } \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/issue-913/BO/Common/BasicComponents.json b/modules/swagger-parser/src/test/resources/issue-913/BO/Common/BasicComponents.json new file mode 100644 index 0000000000..eebd403570 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-913/BO/Common/BasicComponents.json @@ -0,0 +1,12 @@ +{ + "properties": { + "indicatorType": { + "type": "object", + "properties": { + "indicator": { + "type": "boolean" + } + } + } + } +} \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/issue-913/BO/Resource/ApiSpecificationBO.json b/modules/swagger-parser/src/test/resources/issue-913/BO/Resource/ApiSpecificationBO.json new file mode 100644 index 0000000000..54b85dfaa9 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-913/BO/Resource/ApiSpecificationBO.json @@ -0,0 +1,12 @@ +{ + "properties": { + "details": { + "type": "object", + "properties": { + "confirmationCodeRequired": { + "$ref": "../Common/BasicComponents.json#/properties/indicatorType" + } + } + } + } +} diff --git a/modules/swagger-parser/src/test/resources/issue-913/BS/ApiSpecification.yaml b/modules/swagger-parser/src/test/resources/issue-913/BS/ApiSpecification.yaml new file mode 100644 index 0000000000..c3314bd4e9 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-913/BS/ApiSpecification.yaml @@ -0,0 +1,60 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service Model", + "version": "2.4.0" + }, + "host": "api.com", + "basePath": "/{access}/accessProfileAPI", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/networkAccessProfile": { + "get": { + "tags": [ + "AccessProfile" + ], + "operationId": "getList", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "id", + "in": "query", + "type": "string" + } + ], + "responses": { + "200": { + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/accessProfileBO" + } + } + } + } + } + } + }, + "definitions": { + "accessProfileBO": { + "$ref": "../BO/Resource/ApiSpecificationBO.json" + } + }, + "parameters": { + "fields": { + "name": "fields", + "in": "query", + "type": "string" + } + } +} \ No newline at end of file