From 8d50d18c1e3f2aebf215c21e3734bc672eb5afce Mon Sep 17 00:00:00 2001 From: Vaadin Bot Date: Fri, 24 May 2024 16:34:37 +0200 Subject: [PATCH] fix: Do not skip endpoint registration if there are no custom types (#2467) (CP: main) (#2469) fix: Do not skip endpoint registration if there are no custom types (#2467) Fixes #2461 Co-authored-by: Artur Co-authored-by: Anton Platonov --- .../java/com/vaadin/hilla/OpenAPIUtil.java | 30 +++++++++---------- .../com/vaadin/hilla/OpenAPIUtilTest.java | 7 +++++ .../com/vaadin/hilla/openapi-noendpoints.json | 13 ++++++++ 3 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 packages/java/endpoint/src/test/resources/com/vaadin/hilla/openapi-noendpoints.json diff --git a/packages/java/endpoint/src/main/java/com/vaadin/hilla/OpenAPIUtil.java b/packages/java/endpoint/src/main/java/com/vaadin/hilla/OpenAPIUtil.java index 87175dd207..3089d4decc 100644 --- a/packages/java/endpoint/src/main/java/com/vaadin/hilla/OpenAPIUtil.java +++ b/packages/java/endpoint/src/main/java/com/vaadin/hilla/OpenAPIUtil.java @@ -104,30 +104,30 @@ public static String generateOpenAPI(Path buildDirectory, public static Set findOpenApiClasses(String openApiAsText) throws IOException { JsonNode openApi = new ObjectMapper().readTree(openApiAsText); - if (!openApi.has("components")) { - return Collections.emptySet(); - } Set types = new HashSet<>(); // Endpoints - ArrayNode tags = (ArrayNode) openApi.get("tags"); + if (openApi.has("tags")) { + ArrayNode tags = (ArrayNode) openApi.get("tags"); - if (tags != null) { - tags.forEach(nameAndClass -> { - types.add(nameAndClass.get("x-class-name").asText()); - }); + if (tags != null) { + tags.forEach(nameAndClass -> { + types.add(nameAndClass.get("x-class-name").asText()); + }); + } } // Parameters and return types - ObjectNode schemas = (ObjectNode) openApi.get("components") - .get("schemas"); - if (schemas != null) { - schemas.fieldNames().forEachRemaining(type -> { - types.add(type); - }); + if (openApi.has("components")) { + ObjectNode schemas = (ObjectNode) openApi.get("components") + .get("schemas"); + if (schemas != null) { + schemas.fieldNames().forEachRemaining(type -> { + types.add(type); + }); + } } - return types; } diff --git a/packages/java/endpoint/src/test/java/com/vaadin/hilla/OpenAPIUtilTest.java b/packages/java/endpoint/src/test/java/com/vaadin/hilla/OpenAPIUtilTest.java index 172f720da7..b99ed362b0 100644 --- a/packages/java/endpoint/src/test/java/com/vaadin/hilla/OpenAPIUtilTest.java +++ b/packages/java/endpoint/src/test/java/com/vaadin/hilla/OpenAPIUtilTest.java @@ -14,6 +14,13 @@ public class OpenAPIUtilTest { @Test public void emptySchemaReturnsNoComponents() throws IOException { Assert.assertEquals(Collections.emptySet(), + parse("openapi-noendpoints.json")); + } + + @Test + public void noComponentsReturnEndpointTypes() throws IOException { + Assert.assertEquals(Set.of( + "com.example.application.endpoints.helloreact.HelloReactEndpoint"), parse("openapi-nocustomtypes.json")); } diff --git a/packages/java/endpoint/src/test/resources/com/vaadin/hilla/openapi-noendpoints.json b/packages/java/endpoint/src/test/resources/com/vaadin/hilla/openapi-noendpoints.json new file mode 100644 index 0000000000..e946e2fc8a --- /dev/null +++ b/packages/java/endpoint/src/test/resources/com/vaadin/hilla/openapi-noendpoints.json @@ -0,0 +1,13 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Hilla Application", + "version": "1.0.0" + }, + "servers": [ + { + "url": "http://localhost:8080/connect", + "description": "Hilla Backend" + } + ] +}