Skip to content

Commit ccf39a3

Browse files
author
Willem Salembier
committed
Absent type doesn't imply type object #2113
1 parent 0ab2e8a commit ccf39a3

File tree

5 files changed

+47
-17
lines changed

5 files changed

+47
-17
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ root = true
88
# Indentation style
99
# Possible values - tab, space
1010
indent_style = space
11+
end_of_line = lf
1112

1213
# File character encoding
1314
# Possible values - latin1, utf-8, utf-16be, utf-16le

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,6 @@ public Schema resolveSchema(Schema schema) {
469469
Schema property = updated.get(key);
470470

471471
if (property.getProperties() != model.getProperties()) {
472-
if (!hasSchemaType(property)) {
473-
if (SpecVersion.V30.equals(property.getSpecVersion())) {
474-
property.setType("object");
475-
} else {
476-
property.addType("object");
477-
}
478-
}
479472
model.addProperties(key, property);
480473
} else {
481474
LOGGER.debug("not adding recursive properties, using generic object");

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,16 @@ public void testIssue1706() {
782782
assertTrue(openAPI.getPaths().get("/resource").getPost().getResponses().get("200").getContent().get("application/json").getSchema() instanceof ObjectSchema);
783783
}
784784

785+
@Test
786+
public void testIssue2113() {
787+
ParseOptions options = new ParseOptions();
788+
options.setResolve(true);
789+
options.setResolveFully(true);
785790

791+
OpenAPI openAPI = new OpenAPIV3Parser().readLocation("issue_2113.yaml", auths, options).getOpenAPI();
792+
ObjectSchema schema = (ObjectSchema) openAPI.getPaths().get("/foo").getPost().getRequestBody().getContent().get("application/json").getSchema();
793+
assertNull(schema.getProperties().get("goo").getType());
794+
}
786795

787796
@Test
788797
public void selfReferenceTest() {

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV31ParserSchemaTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
2626
import static com.github.tomakehurst.wiremock.client.WireMock.get;
2727
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
28-
import static org.testng.Assert.assertNotNull;
29-
import static org.testng.Assert.assertTrue;
3028

3129
public class OpenAPIV31ParserSchemaTest {
3230
protected int serverPort = getDynamicPort();
@@ -167,54 +165,54 @@ private void tearDownWireMockServer() {
167165
public void test$idUrlExternal() throws Exception {
168166
ParseOptions p = new ParseOptions();
169167
p.setResolve(true);
170-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-external/root.json").getAbsolutePath(), null, p);
168+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-external/root.json").toURI().toASCIIString(), null, p);
171169
compare("$id-uri-external", swaggerParseResult);
172170
}
173171

174172
@Test
175173
public void test$idUrlEnclosing() throws Exception {
176174
ParseOptions p = new ParseOptions();
177175
p.setResolve(true);
178-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-enclosing/root.json").getAbsolutePath(), null, p);
176+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-enclosing/root.json").toURI().toASCIIString(), null, p);
179177
compare("$id-uri-enclosing", swaggerParseResult);
180178
}
181179

182180
@Test
183181
public void test$idUrlDirect() throws Exception {
184182
ParseOptions p = new ParseOptions();
185183
p.setResolve(true);
186-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-direct/root.json").getAbsolutePath(), null, p);
184+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-uri-direct/root.json").toURI().toASCIIString(), null, p);
187185
compare("$id-uri-direct", swaggerParseResult);
188186
}
189187
@Test
190188
public void test$idUrlUnresolvable() throws Exception {
191189
ParseOptions p = new ParseOptions();
192190
p.setResolve(true);
193-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-unresolvable/root.json").getAbsolutePath(), null, p);
191+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$id-unresolvable/root.json").toURI().toASCIIString(), null, p);
194192
compare("$id-unresolvable", swaggerParseResult);
195193
}
196194

197195
@Test
198196
public void testAnchorExt() throws Exception {
199197
ParseOptions p = new ParseOptions();
200198
p.setResolve(true);
201-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-external/root.json").getAbsolutePath(), null, p);
199+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-external/root.json").toURI().toASCIIString(), null, p);
202200
compare("$anchor-external", swaggerParseResult);
203201
}
204202

205203
@Test
206204
public void testAnchorInt() throws Exception {
207205
ParseOptions p = new ParseOptions();
208206
p.setResolve(true);
209-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-internal/root.json").getAbsolutePath(), null, p);
207+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-internal/root.json").toURI().toASCIIString(), null, p);
210208
compare("$anchor-internal", swaggerParseResult);
211209
}
212210

213211
@Test
214212
public void testAnchorUnresolve() throws Exception {
215213
ParseOptions p = new ParseOptions();
216214
p.setResolve(true);
217-
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-not-found/root.json").getAbsolutePath(), null, p);
215+
SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readLocation(new File("src/test/resources/3.1.0/dereference/schema/$anchor-not-found/root.json").toURI().toASCIIString(), null, p);
218216
compare("$anchor-not-found", swaggerParseResult);
219217
}
220218

@@ -223,7 +221,7 @@ public void compare(String dir, SwaggerParseResult result) throws Exception {
223221
ObjectMapper mapper = Json31.mapper().copy();
224222
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
225223
mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
226-
String actual = mapper.writer(new DefaultPrettyPrinter()).writeValueAsString(result.getOpenAPI());
224+
String actual = mapper.writer(new DefaultPrettyPrinter()).writeValueAsString(result.getOpenAPI()).replace("\r\n", "\n");
227225
org.testng.Assert.assertEquals(actual,
228226
FileUtils.readFileToString(new File("src/test/resources/3.1.0/dereference/schema/" + dir + "/dereferenced.json")));
229227
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
openapi: "3.0.0"
2+
info:
3+
version: 1.0.0
4+
title: Issue X
5+
servers:
6+
- url: http://petstore.swagger.io/api
7+
paths:
8+
/foo:
9+
post:
10+
requestBody:
11+
content:
12+
application/json:
13+
schema:
14+
$ref: '#/components/schemas/Foo'
15+
required: true
16+
responses:
17+
200:
18+
description: ok
19+
components:
20+
schemas:
21+
Foo:
22+
type: object
23+
allOf:
24+
- $ref: "#/components/schemas/Goo"
25+
Goo:
26+
type: object
27+
properties:
28+
goo:
29+
title: "Goo"

0 commit comments

Comments
 (0)