From 314cb0d3323f7ce75d6493ddf37301f964bfa44d Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 21:26:11 -0300 Subject: [PATCH 1/3] Fixes an issue where the generated REST client was missing a comma between `additional-request-args` and `@Url` when both were used, causing a compilation error. Updated the `api.qute` template to handle this safely, without affecting other parameter combinations. --- .../resources/templates/libraries/microprofile/api.qute | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute index 7b4ddc519..26fea5f20 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -124,9 +124,10 @@ public interface {classname} { {/if} {/if} {#if additionalRequestArgs} - {#for arg in additionalRequestArgs}{! - !}{arg}{#if arg_hasNext}, {/if}{/for}{! - !}{#if op.allParams || op.hasFormParams},{/if} + {#for arg in additionalRequestArgs} + {arg}{#if arg_hasNext}, {/if} + {/for} + {#if is-resteasy-reactive && use-dynamic-url}, {/if} {/if} {#if is-resteasy-reactive && use-dynamic-url} // See https://quarkus.io/version/3.20/guides/rest-client#dynamic-base-urls From eb2299d510da39a473b6de168d9fd27378f7279d Mon Sep 17 00:00:00 2001 From: dellamas Date: Thu, 5 Jun 2025 17:35:37 -0300 Subject: [PATCH 2/3] test: add test to ensure additionalRequestArgs are generated when length > 0 fix: adjust api.qute to correctly handle commas when using additionalRequestArgs and dynamic url Updated the `api.qute` template to handle this safely, without affecting other parameter combinations. --- .../templates/libraries/microprofile/api.qute | 12 ++++----- .../OpenApiClientGeneratorWrapperTest.java | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute index 26fea5f20..78dacb610 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -123,15 +123,13 @@ public interface {classname} { {/if} {/if} {/if} - {#if additionalRequestArgs} - {#for arg in additionalRequestArgs} - {arg}{#if arg_hasNext}, {/if} - {/for} - {#if is-resteasy-reactive && use-dynamic-url}, {/if} + {#if additionalRequestArgs && additionalRequestArgs.length > 0} + {#for arg in additionalRequestArgs}{arg}{#if arg_hasNext}, {/if}{/for} + {#if (op.allParams || op.hasFormParams)}, {/if} {/if} {#if is-resteasy-reactive && use-dynamic-url} - // See https://quarkus.io/version/3.20/guides/rest-client#dynamic-base-urls - @io.quarkus.rest.client.reactive.Url String dynUrl{#if op.allParams || op.hasFormParams},{/if} + // See https://quarkus.io/version/3.20/guides/rest-client#dynamic-base-urls + @io.quarkus.rest.client.reactive.Url String dynUrl{#if op.allParams || op.hasFormParams},{/if} {/if} {#if op.hasFormParams} {#if is-resteasy-reactive} diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java index 6fde9d9ac..34854bba5 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java @@ -633,6 +633,31 @@ void verifyAdditionalRequestArgs() throws URISyntaxException { .forEach(this::verifyApiAdditionalHTTPHeaders); } + @Test + void shouldGenerateAdditionalParametersWhenLengthGreaterThanZero() throws Exception { + List generatedFiles = createGeneratorWrapper("petstore-openapi.json") + .withAdditionalRequestArgs("@HeaderParam(\"X-Test\") String testHeader;@PathParam(\"id\") String id") + .generate("org.test.additionalargs"); + + Optional file = generatedFiles.stream() + .filter(f -> f.getName().endsWith("PetApi.java")) + .findAny(); + assertThat(file).isNotEmpty(); + + CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); + List methods = compilationUnit.findAll(MethodDeclaration.class); + + boolean found = methods.stream().anyMatch(m -> + m.getParameters().stream().anyMatch(p -> + p.getNameAsString().equals("testHeader") && p.getAnnotationByName("HeaderParam").isPresent() + ) && + m.getParameters().stream().anyMatch(p -> + p.getNameAsString().equals("id") && p.getAnnotationByName("PathParam").isPresent() + ) + ); + assertTrue(found, "Additional parameters must be generated when additionalRequestArgs.length > 0"); + } + @Test void verifyCookieParams() throws URISyntaxException { List generatedFiles = createGeneratorWrapper("petstore-openapi.json").generate("org.cookieParams"); From fecbd878fd287d4eae5ce5e34020aaec80146ebf Mon Sep 17 00:00:00 2001 From: dellamas Date: Thu, 5 Jun 2025 18:24:43 -0300 Subject: [PATCH 3/3] test: add test to ensure additionalRequestArgs are generated when length > 0 fix: adjust api.qute to correctly handle commas when using additionalRequestArgs and dynamic url Updated the `api.qute` template to handle this safely, without affecting other parameter combinations. --- .../wrapper/OpenApiClientGeneratorWrapperTest.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java index 34854bba5..d4309c5c2 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java @@ -647,14 +647,11 @@ void shouldGenerateAdditionalParametersWhenLengthGreaterThanZero() throws Except CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List methods = compilationUnit.findAll(MethodDeclaration.class); - boolean found = methods.stream().anyMatch(m -> - m.getParameters().stream().anyMatch(p -> - p.getNameAsString().equals("testHeader") && p.getAnnotationByName("HeaderParam").isPresent() - ) && - m.getParameters().stream().anyMatch(p -> - p.getNameAsString().equals("id") && p.getAnnotationByName("PathParam").isPresent() - ) - ); + boolean found = methods.stream() + .anyMatch(m -> m.getParameters().stream().anyMatch( + p -> p.getNameAsString().equals("testHeader") && p.getAnnotationByName("HeaderParam").isPresent()) && + m.getParameters().stream().anyMatch( + p -> p.getNameAsString().equals("id") && p.getAnnotationByName("PathParam").isPresent())); assertTrue(found, "Additional parameters must be generated when additionalRequestArgs.length > 0"); }