Skip to content

Commit 5284d71

Browse files
authored
Merge pull request #1649 from kerrykimbrough/body-content
OpenAPIDeserializer: Report an error when a request body content defines no media types.
2 parents c6f2278 + dad6e19 commit 5284d71

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

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

+8-3
Original file line numberDiff line numberDiff line change
@@ -3123,9 +3123,14 @@ public RequestBody getRequestBody(ObjectNode node, String location, ParseResult
31233123
}
31243124

31253125
final ObjectNode contentNode = getObject("content", node, true, location, result);
3126-
if (contentNode != null) {
3127-
body.setContent(getContent(contentNode, location + ".content", result));
3128-
}
3126+
Content content = getContent(contentNode, location + ".content", result);
3127+
if(content != null && content.isEmpty()) {
3128+
result.unsupported(location,"content with no media type",contentNode);
3129+
result.invalid();
3130+
}
3131+
else {
3132+
body.setContent(content);
3133+
}
31293134

31303135
Map<String, Object> extensions = getExtensions(node);
31313136
if (extensions != null && extensions.size() > 0) {

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

+57
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,63 @@ public void testDeserializeByteString() {
12201220
"attribute components.schemas.ByteString.default=`W.T.F?` is not of type `byte`"));
12211221
}
12221222

1223+
@Test
1224+
public void testBodyContent() {
1225+
String json =
1226+
"{"
1227+
+ " \"openapi\": \"3.0.0\","
1228+
+ " \"info\": {"
1229+
+ " \"title\": \"Operations\","
1230+
+ " \"version\": \"0.0.0\""
1231+
+ " },"
1232+
+ " \"paths\": {"
1233+
+ " \"/operations\": {"
1234+
+ " \"post\": {"
1235+
+ " \"requestBody\": {"
1236+
+ " \"description\": \"Content empty\","
1237+
+ " \"content\": {"
1238+
+ " }"
1239+
+ " },"
1240+
+ " \"responses\": {"
1241+
+ " \"default\": {"
1242+
+ " \"description\": \"None\""
1243+
+ " }"
1244+
+ " }"
1245+
+ " },"
1246+
+ " \"put\": {"
1247+
+ " \"requestBody\": {"
1248+
+ " \"description\": \"Content undefined\""
1249+
+ " },"
1250+
+ " \"responses\": {"
1251+
+ " \"default\": {"
1252+
+ " \"description\": \"None\""
1253+
+ " }"
1254+
+ " }"
1255+
+ " }"
1256+
+ " }"
1257+
+ " }"
1258+
+ "}"
1259+
;
1260+
OpenAPIV3Parser parser = new OpenAPIV3Parser();
1261+
SwaggerParseResult result = parser.readContents(json, null, null);
1262+
1263+
Operation post = result.getOpenAPI().getPaths().get( "/operations").getPost();
1264+
assertEquals( post.getRequestBody().getContent(), null, "Empty content");
1265+
assertEquals
1266+
(result.getMessages().contains("attribute paths.'/operations'(post).requestBody.content with no media type is unsupported"),
1267+
true,
1268+
"Empty content error reported");
1269+
1270+
Operation put = result.getOpenAPI().getPaths().get( "/operations").getPut();
1271+
assertEquals( put.getRequestBody().getContent(), null, "Empty content");
1272+
assertEquals
1273+
(result.getMessages().contains("attribute paths.'/operations'(put).requestBody.content is missing"),
1274+
true,
1275+
"Missing content error reported");
1276+
1277+
assertEquals( result.getMessages().size(), 2, "Messages");
1278+
}
1279+
12231280
@Test
12241281
public void testStyleInvalid() {
12251282
String json =

0 commit comments

Comments
 (0)