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 @@ -1022,6 +1022,22 @@ public Model allOfModel(ObjectNode node, String location, ParseResult result) {

addProperties(location, node, result, model);

// need to set properties first
ArrayNode required = getArray("required", node, false, location, result);
if (required != null) {
List<String> requiredProperties = new ArrayList<String>();
for (JsonNode n : required) {
if (n.getNodeType().equals(JsonNodeType.STRING)) {
requiredProperties.add(((TextNode) n).textValue());
} else {
result.invalidType(location, "required", "string", n);
}
}
if (requiredProperties.size() > 0) {
model.setRequired(requiredProperties);
}
}

return model;
}
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1658,4 +1658,18 @@ public void testIssuei432() {


}

@Test
public void testRequiredItemsInComposedModel() {
SwaggerDeserializationResult result = new SwaggerParser().readWithInfo("src/test/resources/allOf-example/allOf.yaml", null, true);
assertNotNull(result);
final Swagger swagger = result.getSwagger();
final Model model = swagger.getDefinitions().get("UserRegister");
final ComposedModel composedModel = (ComposedModel) model;

assertNotNull(composedModel.getRequired());
assertFalse(composedModel.getRequired().isEmpty());

assertEquals("password", composedModel.getRequired().get(0));
}
}
44 changes: 44 additions & 0 deletions modules/swagger-parser/src/test/resources/allOf-example/allOf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
swagger: '2.0'
info:
description: This is a simple API
version: 1.0.0
title: Simple User API
host: localhost
basePath: /v1
schemes:
- https

paths:
/user:
post:
consumes:
- application/json
produces:
- application/jsonÅÅÅ
parameters:
- in: body
name: checkUser
description: Check user
schema:
$ref: '#/definitions/User'
responses:
201:
description: item created

definitions:
User:
type: object
required:
- email
properties:
email:
type: string
UserRegister:
allOf:
- $ref: '#/definitions/User'
type: object
required:
- password
properties:
password:
type: string