This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 1960a6ceda45 CAMEL-22493: camel-rest-openapi: Potential NPE in
OpenApiUtils.isArrayType
1960a6ceda45 is described below
commit 1960a6ceda45e4e0703259fd1a50dd307f0eddcf
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Oct 7 13:50:15 2025 +0200
CAMEL-22493: camel-rest-openapi: Potential NPE in OpenApiUtils.isArrayType
---
.../camel/component/rest/openapi/OpenApiUtils.java | 6 ++++
.../component/rest/openapi/OpenApiUtilsTest.java | 34 ++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/OpenApiUtils.java
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/OpenApiUtils.java
index 4a5ed22ceaeb..7823cf46003a 100644
---
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/OpenApiUtils.java
+++
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/OpenApiUtils.java
@@ -206,6 +206,9 @@ public class OpenApiUtils {
schemaName = Optional.ofNullable(schemaName)
.orElse(Optional.ofNullable(schema.get$ref()).orElse(getSchemaType(schema)));
+ if (schemaName == null) {
+ return null;
+ }
Matcher classNameMatcher = CLASS_NAME_PATTERN.matcher(schemaName);
String classToFind = classNameMatcher.find()
? classNameMatcher.group(1)
@@ -222,6 +225,9 @@ public class OpenApiUtils {
if (schema.getSpecVersion() == SpecVersion.V30) {
return schema instanceof ArraySchema;
}
+ if (schema.getTypes() == null) {
+ return false;
+ }
return
"array".equals(schema.getTypes().stream().findFirst().orElse(null));
}
diff --git
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/OpenApiUtilsTest.java
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/OpenApiUtilsTest.java
index b7d5770e31ad..27ebe5d0380d 100644
---
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/OpenApiUtilsTest.java
+++
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/OpenApiUtilsTest.java
@@ -36,6 +36,7 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
public class OpenApiUtilsTest {
@@ -75,6 +76,28 @@ public class OpenApiUtilsTest {
- name
""";
+ private static final String NO_RESPONSE_BODY = """
+ openapi: <openapi_version>
+ info:
+ title: test
+ version: 1.0.0
+ paths:
+ /test:
+ post:
+ operationId: test
+ requestBody:
+ required: true
+ content:
+ "application/json":
+ schema:
+ oneOf:
+ - type: string
+ - type: number
+ responses:
+ "200":
+ description: Successful response
+ """;
+
@Test
public void shouldReturnAllProduces() {
Operation operation = new Operation();
@@ -185,6 +208,17 @@ public class OpenApiUtilsTest {
assertEquals(TagResponseDto.class.getName() + "[]",
utils.manageResponseBody(operation));
}
+ @Test
+ public void noResponseBody() throws Exception {
+ String bindingPackagePath = OpenApiUtils.class.getPackage().getName();
+ OpenAPIV3Parser parser = new OpenAPIV3Parser();
+ OpenAPI openApi =
parser.readContents(NO_RESPONSE_BODY.replace("<openapi_version>",
"3.1.0")).getOpenAPI();
+ Operation operation = openApi.getPaths().get("/test").getPost();
+ OpenApiUtils utils = new OpenApiUtils(new DefaultCamelContext(),
bindingPackagePath, openApi.getComponents());
+ assertNull(utils.manageRequestBody(operation));
+ assertNull(utils.manageResponseBody(operation));
+ }
+
private ApiResponse createResponse(String... contentTypes) {
ApiResponse response = new ApiResponse();