From ec6919d74778a05b7ceb618d777705508e9dc376 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 31 Oct 2024 20:28:51 -0300 Subject: [PATCH 001/166] Fixed warning (#837) --- .../generator/deployment/codegen/OpenApiConfigValidator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java index e6cf62dd6..96386230d 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java @@ -7,7 +7,6 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +28,7 @@ public static void validateInputConfiguration(List configNames) throws C .filter(pn -> pn.startsWith("quarkus.openapi-generator.codegen")) .map(CONFIG_PATTERN::matcher) .filter(Matcher::find) - .collect(Collectors.toList()); + .toList(); if (!userOpenApiConfigurations.isEmpty()) { Set unsupportedConfigNames = new HashSet<>(); From aa9f471cb402c3a2c6a2600c093076dc2e97a3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hermann?= Date: Mon, 4 Nov 2024 15:34:12 -0500 Subject: [PATCH 002/166] fix Build fails if quarkus-oidc-client is not in the classpath (#829) --- .../deployment/GeneratorProcessor.java | 16 +- client/integration-tests/pom.xml | 1 + client/integration-tests/without-oidc/pom.xml | 95 ++++++ .../main/openapi/quarkus-simple-openapi.yaml | 282 ++++++++++++++++++ .../src/main/resources/application.properties | 1 + .../it/QuarkusSimpleOpenApiTest.java | 24 ++ 6 files changed, 417 insertions(+), 2 deletions(-) create mode 100644 client/integration-tests/without-oidc/pom.xml create mode 100644 client/integration-tests/without-oidc/src/main/openapi/quarkus-simple-openapi.yaml create mode 100644 client/integration-tests/without-oidc/src/main/resources/application.properties create mode 100644 client/integration-tests/without-oidc/src/test/java/io/quarkiverse/openapi/generator/it/QuarkusSimpleOpenApiTest.java diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java index 2cc8c3b33..92bff1491 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java @@ -1,5 +1,7 @@ package io.quarkiverse.openapi.generator.deployment; +import static io.quarkus.bootstrap.classloading.QuarkusClassLoader.isClassPresentAtRuntime; + import java.util.Collection; import java.util.List; import java.util.Map; @@ -48,9 +50,10 @@ public class GeneratorProcessor { private static final DotName BASIC_AUTHENTICATION_MARKER = DotName.createSimple(BasicAuthenticationMarker.class); private static final DotName BEARER_AUTHENTICATION_MARKER = DotName.createSimple(BearerAuthenticationMarker.class); private static final DotName API_KEY_AUTHENTICATION_MARKER = DotName.createSimple(ApiKeyAuthenticationMarker.class); - private static final DotName OPERATION_MARKER = DotName.createSimple(OperationMarker.class); + private static final String ABSTRACT_TOKEN_PRODUCER = "io.quarkus.oidc.client.runtime.AbstractTokensProducer"; + @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); @@ -61,6 +64,10 @@ void additionalBean( Capabilities capabilities, BuildProducer producer) { + if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { + return; + } + if (capabilities.isPresent(Capability.REST_CLIENT_REACTIVE)) { producer.produce( AdditionalBeanBuildItem.builder().addBeanClass(ReactiveOidcClientRequestFilterDelegate.class) @@ -103,10 +110,15 @@ void produceCompositeProviders(AuthenticationRecorder recorder, @BuildStep @Record(ExecutionTime.STATIC_INIT) - void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, + void produceOauthAuthentication( + CombinedIndexBuildItem beanArchiveBuildItem, BuildProducer authenticationProviders, BuildProducer beanProducer, AuthenticationRecorder recorder) { + + if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { + return; + } Collection authenticationMarkers = beanArchiveBuildItem.getIndex() .getAnnotationsWithRepeatable(OAUTH_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 8c2d96ba8..ef2670df3 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -40,6 +40,7 @@ type-mapping config-key github + without-oidc diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml new file mode 100644 index 000000000..18c904388 --- /dev/null +++ b/client/integration-tests/without-oidc/pom.xml @@ -0,0 +1,95 @@ + + + + quarkus-openapi-generator-parent + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + ../../../pom.xml + + 4.0.0 + + quarkus-openapi-generator-it-without-oidc + Quarkus - Openapi Generator - Integration Tests - Client - Without OIDC + Example project for general usage + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + io.quarkus + quarkus-rest-client-jackson + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/without-oidc/src/main/openapi/quarkus-simple-openapi.yaml b/client/integration-tests/without-oidc/src/main/openapi/quarkus-simple-openapi.yaml new file mode 100644 index 000000000..559d04451 --- /dev/null +++ b/client/integration-tests/without-oidc/src/main/openapi/quarkus-simple-openapi.yaml @@ -0,0 +1,282 @@ +--- +openapi: 3.0.3 +info: + title: greeting-flow API + version: "1.0" +paths: + /: + post: + requestBody: + content: + '*/*': + schema: + $ref: '#/components/schemas/CloudEvent' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Response' + /hello: + get: + tags: + - Reactive Greeting Resource + operationId: hello + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + /messaging/topics: + get: + tags: + - Quarkus Topics Information Resource + responses: + "200": + description: OK +components: + schemas: + Type: + type: object + properties: + tags: + uniqueItems: true + type: array + items: + type: string + CloudEvent: + type: object + properties: + specVersion: + $ref: '#/components/schemas/SpecVersion' + id: + type: string + type: + type: string + source: + format: uri + type: string + dataContentType: + type: string + dataSchema: + format: uri + type: string + subject: + type: string + time: + format: date-time + type: string + attributeNames: + uniqueItems: true + type: array + items: + type: string + extensionNames: + uniqueItems: true + type: array + items: + type: string + data: + $ref: '#/components/schemas/CloudEventData' + CloudEventData: + type: object + EntityTag: + type: object + properties: + value: + type: string + weak: + type: boolean + Family: + enum: + - INFORMATIONAL + - SUCCESSFUL + - REDIRECTION + - CLIENT_ERROR + - SERVER_ERROR + - OTHER + type: string + Link: + type: object + properties: + uri: + format: uri + type: string + uriBuilder: + $ref: '#/components/schemas/UriBuilder' + rel: + type: string + rels: + type: array + items: + type: string + title: + type: string + type: + type: string + params: + type: object + additionalProperties: + type: string + Locale: + type: object + properties: + language: + type: string + script: + type: string + country: + type: string + variant: + type: string + extensionKeys: + uniqueItems: true + type: array + items: + format: byte + type: string + unicodeLocaleAttributes: + uniqueItems: true + type: array + items: + type: string + unicodeLocaleKeys: + uniqueItems: true + type: array + items: + type: string + iSO3Language: + type: string + iSO3Country: + type: string + displayLanguage: + type: string + displayScript: + type: string + displayCountry: + type: string + displayVariant: + type: string + displayName: + type: string + MediaType: + type: object + properties: + type: + type: string + subtype: + type: string + parameters: + type: object + additionalProperties: + type: string + wildcardType: + type: boolean + wildcardSubtype: + type: boolean + MultivaluedMapStringObject: + type: object + additionalProperties: + type: array + items: + type: object + MultivaluedMapStringString: + type: object + additionalProperties: + type: array + items: + type: string + NewCookie: + type: object + properties: + name: + type: string + value: + type: string + version: + format: int32 + type: integer + path: + type: string + domain: + type: string + comment: + type: string + maxAge: + format: int32 + type: integer + expiry: + format: date + type: string + secure: + type: boolean + httpOnly: + type: boolean + Response: + type: object + properties: + status: + format: int32 + type: integer + statusInfo: + $ref: '#/components/schemas/StatusType' + entity: + type: object + mediaType: + $ref: '#/components/schemas/MediaType' + language: + $ref: '#/components/schemas/Locale' + length: + format: int32 + type: integer + allowedMethods: + uniqueItems: true + type: array + items: + type: string + cookies: + type: object + additionalProperties: + $ref: '#/components/schemas/NewCookie' + entityTag: + $ref: '#/components/schemas/EntityTag' + date: + format: date + type: string + lastModified: + format: date + type: string + location: + format: uri + type: string + links: + uniqueItems: true + type: array + items: + $ref: '#/components/schemas/Link' + metadata: + $ref: '#/components/schemas/MultivaluedMapStringObject' + headers: + $ref: '#/components/schemas/MultivaluedMapStringObject' + stringHeaders: + $ref: '#/components/schemas/MultivaluedMapStringString' + SpecVersion: + enum: + - V03 + - V1 + type: string + StatusType: + type: object + properties: + statusCode: + format: int32 + type: integer + family: + $ref: '#/components/schemas/Family' + reasonPhrase: + type: string + UriBuilder: + type: object diff --git a/client/integration-tests/without-oidc/src/main/resources/application.properties b/client/integration-tests/without-oidc/src/main/resources/application.properties new file mode 100644 index 000000000..a2f16a854 --- /dev/null +++ b/client/integration-tests/without-oidc/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file diff --git a/client/integration-tests/without-oidc/src/test/java/io/quarkiverse/openapi/generator/it/QuarkusSimpleOpenApiTest.java b/client/integration-tests/without-oidc/src/test/java/io/quarkiverse/openapi/generator/it/QuarkusSimpleOpenApiTest.java new file mode 100644 index 000000000..f055063c6 --- /dev/null +++ b/client/integration-tests/without-oidc/src/test/java/io/quarkiverse/openapi/generator/it/QuarkusSimpleOpenApiTest.java @@ -0,0 +1,24 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.assertj.core.api.Assertions.assertThat; + +import jakarta.inject.Inject; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.junit.jupiter.api.Test; +import org.openapi.quarkus.quarkus_simple_openapi_yaml.api.ReactiveGreetingResourceApi; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class QuarkusSimpleOpenApiTest { + + @RestClient + @Inject + ReactiveGreetingResourceApi api; + + @Test + void apiIsBeingGenerated() { + assertThat(api).isNotNull(); + } +} From fd9629fb89d526335c452ce740371f44945571b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:43:16 -0500 Subject: [PATCH 003/166] Bump quarkus.version from 3.15.1 to 3.16.1 (#836) * Bump quarkus.version from 3.15.1 to 3.16.1 Bumps `quarkus.version` from 3.15.1 to 3.16.1. Updates `io.quarkus:quarkus-bom` from 3.15.1 to 3.16.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.15.1...3.16.1) Updates `io.quarkus:quarkus-maven-plugin` from 3.15.1 to 3.16.1 Updates `io.quarkus:quarkus-extension-processor` from 3.15.1 to 3.16.1 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.15.1 to 3.16.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.15.1...3.16.1) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Disabled tests on Windows Signed-off-by: Helber Belmiro --------- Signed-off-by: dependabot[bot] Signed-off-by: Helber Belmiro Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Helber Belmiro --- .github/workflows/build.yml | 10 ++++++++-- pom.xml | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 28d9a1cbd..b874708e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,10 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [ + ubuntu-latest, +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + ] java: [ { 'version': '17' }, { 'version': '21' } @@ -53,7 +56,10 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [ + ubuntu-latest, +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + ] java: [ { 'version': '17' }, { 'version': '21' } diff --git a/pom.xml b/pom.xml index 8da081e65..5f051b798 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.15.1 + 3.16.1 1.1.1.Final 3.26.2 3.26.3 From b0cebad6c4bdcd81a7d3f7b5fcf461f2ebfb1728 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:58:55 -0300 Subject: [PATCH 004/166] Bump quarkus.version from 3.16.1 to 3.16.2 (#842) Bumps `quarkus.version` from 3.16.1 to 3.16.2. Updates `io.quarkus:quarkus-bom` from 3.16.1 to 3.16.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.1...3.16.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.16.1 to 3.16.2 Updates `io.quarkus:quarkus-extension-processor` from 3.16.1 to 3.16.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.16.1 to 3.16.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.1...3.16.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5f051b798..47420a2fa 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.16.1 + 3.16.2 1.1.1.Final 3.26.2 3.26.3 From 72edb3f873e0478a463b50b7db9e7ad83a9be9a0 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 7 Nov 2024 11:11:09 -0300 Subject: [PATCH 005/166] Added the `main-lts` branch to CI (#841) Signed-off-by: Helber Belmiro --- .github/workflows/build.yml | 1 + .github/workflows/build_website.yml | 1 + .github/workflows/codeql.yml | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b874708e3..f8f27159e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,6 +4,7 @@ on: push: branches: - "main" + - "main-lts" paths-ignore: - '.gitignore' - 'CODEOWNERS' diff --git a/.github/workflows/build_website.yml b/.github/workflows/build_website.yml index bd5a8822f..9057da4f2 100644 --- a/.github/workflows/build_website.yml +++ b/.github/workflows/build_website.yml @@ -4,6 +4,7 @@ on: push: branches: - "main" + - "main-lts" paths-ignore: - '.gitignore' - 'CODEOWNERS' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index af121a859..a39aa4b71 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -2,9 +2,9 @@ name: "CodeQL" on: push: - branches: [ "main" ] + branches: [ "main", "main-lts" ] pull_request: - branches: [ "main" ] + branches: [ "main", "main-lts" ] schedule: - cron: "2 0 * * 6" From 0e38b426ec425715b8d88dd26e3af25b128f56a9 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:40:04 -0500 Subject: [PATCH 006/166] Release 2.6.0 (#843) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index ed4633709..8b76a1f78 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.5.0 + current-version: 2.6.0 next-version: 3.0.0-SNAPSHOT From a9d0c7f0479ead3746a119f28eade4031ededb74 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:40:52 +0000 Subject: [PATCH 007/166] Update the latest release version 2.6.0 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 132b09b8f..ac5c3cf6f 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.5.0 +:project-version: 2.6.0 :examples-dir: ./../examples/ From d43da6aa15a0306042145618a4bf52626d682afc Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:58:53 +0000 Subject: [PATCH 008/166] [maven-release-plugin] prepare release 2.6.0 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 5 ++--- client/integration-tests/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 43 files changed, 45 insertions(+), 46 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 722b3bc55..96de30c16 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..f13f68a28 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..91585cb65 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..53460c449 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index a73d12a8a..c12aedb57 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 9532fb2bc..e641b1594 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 49bfa265e..f59a12df3 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..67a6952f1 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..983210b41 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index f5a5a9831..7342cad40 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..3f10bcca7 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index d96a13f83..ad341468b 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 34d9bd4ec..5b35a6551 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..bc40a6758 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..b51afea8c 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index e845744ce..3e94f0cbd 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..3cbb36d7e 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..cb396f601 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 56283cfe0..ff088c923 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..dfb7b2dfe 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..ed7f746ef 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index a8272f284..aa495974a 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..34c7997b4 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index fe79e4555..dd4d54687 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -1,10 +1,9 @@ - + quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index ef2670df3..32575141d 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..046111cd8 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 11035298f..9ff75ff1d 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..0ae9d5a33 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 8cedef1bf..5628beb93 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..3a1101a3c 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 78c5b6372..3efd2f9b2 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 18c904388..6bfdc3759 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../../../pom.xml 4.0.0 diff --git a/client/pom.xml b/client/pom.xml index c82086b00..88f161fd4 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index b0b2ab4aa..9b5aa14b7 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 354e59fa5..19442d538 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index bc3f73da5..b78c2cc00 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 47420a2fa..7e376c4f6 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.6.0 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.6.0 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 7c9619120..37b7e325b 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..32d3713d6 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..ef2c34c0c 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..01af6b811 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..c6a394f59 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 79ce725a3..c48179e5e 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.6.0 ../pom.xml 4.0.0 From 8cba4b265aaa120a029db1328b5433fc9496c54f Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:58:53 +0000 Subject: [PATCH 009/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 43 files changed, 44 insertions(+), 44 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 96de30c16..722b3bc55 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index f13f68a28..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 91585cb65..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 53460c449..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index c12aedb57..a73d12a8a 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index e641b1594..9532fb2bc 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index f59a12df3..49bfa265e 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 67a6952f1..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 983210b41..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 7342cad40..f5a5a9831 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 3f10bcca7..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index ad341468b..d96a13f83 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 5b35a6551..34d9bd4ec 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index bc40a6758..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index b51afea8c..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 3e94f0cbd..e845744ce 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 3cbb36d7e..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index cb396f601..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index ff088c923..56283cfe0 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index dfb7b2dfe..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index ed7f746ef..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index aa495974a..a8272f284 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 34c7997b4..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index dd4d54687..50987d9cd 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 32575141d..ef2670df3 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 046111cd8..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 9ff75ff1d..11035298f 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 0ae9d5a33..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 5628beb93..8cedef1bf 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 3a1101a3c..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 3efd2f9b2..78c5b6372 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 6bfdc3759..18c904388 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/client/pom.xml b/client/pom.xml index 88f161fd4..c82086b00 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 9b5aa14b7..b0b2ab4aa 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 19442d538..354e59fa5 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index b78c2cc00..bc3f73da5 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 7e376c4f6..47420a2fa 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.6.0 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.6.0 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 37b7e325b..7c9619120 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 32d3713d6..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index ef2c34c0c..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 01af6b811..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index c6a394f59..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index c48179e5e..79ce725a3 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.6.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From af0a708a7fc3040b846780cd4a483fba18fcdb95 Mon Sep 17 00:00:00 2001 From: Melloware Date: Tue, 12 Nov 2024 11:21:05 -0500 Subject: [PATCH 010/166] Add logo to docs and README (#847) --- README.md | 7 +++++++ .../src/main/resources/META-INF/quarkus-extension.yaml | 1 + docs/modules/ROOT/assets/images/openapi.svg | 1 + 3 files changed, 9 insertions(+) create mode 100644 docs/modules/ROOT/assets/images/openapi.svg diff --git a/README.md b/README.md index 609bdc955..337d2b564 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ + +
+ + + # Quarkus - OpenAPI Generator +
+
[![All Contributors](https://img.shields.io/badge/all_contributors-40-orange.svg?style=flat-square)](#contributors-) diff --git a/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml index 179992546..6a4317fe0 100644 --- a/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml +++ b/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -8,6 +8,7 @@ metadata: - "rest-client" categories: - "web" + icon-url: "https://raw.githubusercontent.com/quarkiverse/quarkus-openapi-generator/main/docs/modules/ROOT/assets/images/openapi.svg" status: "preview" codestart: name: "openapi-generator" diff --git a/docs/modules/ROOT/assets/images/openapi.svg b/docs/modules/ROOT/assets/images/openapi.svg new file mode 100644 index 000000000..50ee1e39f --- /dev/null +++ b/docs/modules/ROOT/assets/images/openapi.svg @@ -0,0 +1 @@ + \ No newline at end of file From 3af015f046ed8cb3fcbcbd13c1bc4e6ce26cbe52 Mon Sep 17 00:00:00 2001 From: Marko Bekhta Date: Tue, 12 Nov 2024 22:06:37 +0100 Subject: [PATCH 011/166] Consistently use `quarkus-generator.openApiSpecId` as openApiSpecId in templates (#848) as otherwise using the `configKey` instead can lead to a mismatch and an exception like: ``` [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider and qualifiers [@OpenApiSpec(openApiSpecId = "your-config-key-not-the-same-as-spec-id")] - injection target: parameter 'compositeProvider' of com.acme.api.auth.AuthenticationPropagationHeadersFactory constructor - declared on CLASS bean [types=[com.acme.api.auth.AuthenticationPropagationHeadersFactory, io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory, org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory, java.lang.Object], qualifiers=[@Default, @Any], target=com.acme.api.auth.AuthenticationPropagationHeadersFactory] The following beans match by type, but none has matching qualifiers: - SYNTHETIC bean [types=[io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider, java.lang.Object], qualifiers=[@Any, @io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId = "your-spec-id-not-the-same-as-config-key")], target=n/a] ``` --- .../microprofile/auth/compositeAuthenticationProvider.qute | 2 +- .../templates/libraries/microprofile/auth/headersFactory.qute | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute index c1fd07985..836d2e711 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute @@ -22,7 +22,7 @@ package {apiPackage}.auth; public class CompositeAuthenticationProvider implements jakarta.ws.rs.client.ClientRequestFilter { @jakarta.inject.Inject - @io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{configKey}") + @io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{quarkus-generator.openApiSpecId}") io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider compositeProvider; @java.lang.Override diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute index 0fc3f221c..adb47b393 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute @@ -3,7 +3,7 @@ package {apiPackage}.auth; public class AuthenticationPropagationHeadersFactory extends io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory { @jakarta.inject.Inject - public AuthenticationPropagationHeadersFactory(@io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{configKey}") io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider compositeProvider, io.quarkiverse.openapi.generator.OpenApiGeneratorConfig generatorConfig, io.quarkiverse.openapi.generator.providers.HeadersProvider headersProvider) { + public AuthenticationPropagationHeadersFactory(@io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{quarkus-generator.openApiSpecId}") io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider compositeProvider, io.quarkiverse.openapi.generator.OpenApiGeneratorConfig generatorConfig, io.quarkiverse.openapi.generator.providers.HeadersProvider headersProvider) { super(compositeProvider, generatorConfig, headersProvider); } From 1dffa466d014fd006778bc2bcf3c7aafbd1dcb81 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 18:08:11 -0300 Subject: [PATCH 012/166] docs: add marko-bekhta as a contributor for code (#850) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 548f8f025..c06b0890e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -378,6 +378,15 @@ "contributions": [ "doc" ] + }, + { + "login": "marko-bekhta", + "name": "Marko Bekhta", + "avatar_url": "https://avatars.githubusercontent.com/u/4004823?v=4", + "profile": "https://github.com/marko-bekhta", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 337d2b564..b77e29e95 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-40-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-41-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -97,6 +97,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Karl Ferdinand Ebert
Karl Ferdinand Ebert

💻 📖 Michał Kolenda
Michał Kolenda

💻 rednalyn
rednalyn

📖 + Marko Bekhta
Marko Bekhta

💻 From 4fc3803610a08e3c4a4a3554ba65fedefec7a0aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:06:51 -0300 Subject: [PATCH 013/166] Bump quarkus.version from 3.16.2 to 3.16.3 (#853) Bumps `quarkus.version` from 3.16.2 to 3.16.3. Updates `io.quarkus:quarkus-bom` from 3.16.2 to 3.16.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.2...3.16.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.16.2 to 3.16.3 Updates `io.quarkus:quarkus-extension-processor` from 3.16.2 to 3.16.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.16.2 to 3.16.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.2...3.16.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 47420a2fa..c55261301 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.16.2 + 3.16.3 1.1.1.Final 3.26.2 3.26.3 From 1230fb841503b70120b531a4d9e7578660a6e857 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:25:50 -0300 Subject: [PATCH 014/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.23 to 2.1.24 (#857) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.23 to 2.1.24. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.23...v2.1.24) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 722b3bc55..5c2d08b6c 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -14,7 +14,7 @@ 7.8.0 2.0.16 4.3.1 - 2.1.23 + 2.1.24
From 91b1ce687422d0dab91a0a442d792dbb11049424 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:24:28 -0300 Subject: [PATCH 015/166] Bump quarkus.version from 3.16.3 to 3.17.0 (#860) Bumps `quarkus.version` from 3.16.3 to 3.17.0. Updates `io.quarkus:quarkus-bom` from 3.16.3 to 3.17.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.3...3.17.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.16.3 to 3.17.0 Updates `io.quarkus:quarkus-extension-processor` from 3.16.3 to 3.17.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.16.3 to 3.17.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.16.3...3.17.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c55261301..5af75c35e 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.16.3 + 3.17.0 1.1.1.Final 3.26.2 3.26.3 From 6cd8f74ad098f4cb7071a6e53a7ec7148823e7b8 Mon Sep 17 00:00:00 2001 From: Martin Panzer Date: Thu, 21 Nov 2024 14:25:29 +0100 Subject: [PATCH 016/166] Link to extension guide on the extensions site (#861) --- .../runtime/src/main/resources/META-INF/quarkus-extension.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml index 6a4317fe0..5b091677d 100644 --- a/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml +++ b/client/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -8,6 +8,7 @@ metadata: - "rest-client" categories: - "web" + guide: "https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html" icon-url: "https://raw.githubusercontent.com/quarkiverse/quarkus-openapi-generator/main/docs/modules/ROOT/assets/images/openapi.svg" status: "preview" codestart: From fa0179920f7bd28d2fa872e3470af20ed8204bd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:51:14 -0500 Subject: [PATCH 017/166] Bump org.openapitools:openapi-generator from 7.8.0 to 7.10.0 (#858) Bumps [org.openapitools:openapi-generator](https://github.com/openapitools/openapi-generator) from 7.8.0 to 7.10.0. - [Release notes](https://github.com/openapitools/openapi-generator/releases) - [Changelog](https://github.com/OpenAPITools/openapi-generator/blob/master/docs/3.0.0-release-note.md) - [Commits](https://github.com/openapitools/openapi-generator/compare/v7.8.0...v7.10.0) --- updated-dependencies: - dependency-name: org.openapitools:openapi-generator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 5c2d08b6c..6c2be76d8 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -11,7 +11,7 @@ Quarkus - Openapi Generator - Client - Deployment - 7.8.0 + 7.10.0 2.0.16 4.3.1 2.1.24 From e230b962b7b277230abd9ef08e3f5df08406c192 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:37:21 -0500 Subject: [PATCH 018/166] Fix #852 - Process Qute templates in a strict manner (#864) * Fix #852 - Process Qute templates in a strict manner Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> * Fix discriminator annotations on pojo.qute Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> * Improve testing on discriminator annotations Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> * Incorporate @hbelmiro review Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --------- Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- .../deployment/template/ExprEvaluator.java | 33 + .../template/OpenApiNamespaceResolver.java | 9 +- .../template/QuteTemplatingEngineAdapter.java | 3 +- .../template/StrNamespaceResolver.java | 58 + .../OpenApiClientGeneratorWrapper.java | 94 +- .../additionalEnumTypeUnexpectedMember.qute | 2 +- .../templates/libraries/microprofile/api.qute | 12 +- .../libraries/microprofile/enumClass.qute | 10 +- .../microprofile/enumOuterClass.qute | 16 +- .../libraries/microprofile/model.qute | 2 +- .../libraries/microprofile/pojo.qute | 35 +- .../microprofile/pojoQueryParam.qute | 19 +- .../OpenApiSpecProviderTest.java | 1 + .../authentication/OperationTest.java | 5 +- .../OpenApiClientGeneratorWrapperTest.java | 28 +- .../src/test/resources/openapi/issue-852.json | 6160 +++++++++++++++++ .../src/main/resources/application.properties | 6 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 1 + .../src/main/custom/templates/api.qute | 14 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 3 + .../it/circuit/breaker/SimpleOpenApiTest.java | 4 +- .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 4 +- .../src/main/resources/templates/api.qute | 14 +- .../resources/templates/pojoQueryParam.qute | 19 +- .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 2 + .../src/main/resources/application.properties | 1 + .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 3 +- .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 4 +- .../src/main/resources/application.properties | 4 +- 50 files changed, 6460 insertions(+), 160 deletions(-) create mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java create mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java create mode 100644 client/deployment/src/test/resources/openapi/issue-852.json create mode 100644 client/integration-tests/beanparam/src/main/resources/application.properties create mode 100644 client/integration-tests/enum-property/src/main/resources/application.properties create mode 100644 client/integration-tests/generation-input/src/main/resources/application.properties create mode 100644 client/integration-tests/github/src/main/resources/application.properties create mode 100644 client/integration-tests/polymorphism/src/main/resources/application.properties diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java new file mode 100644 index 000000000..01074a88d --- /dev/null +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java @@ -0,0 +1,33 @@ +package io.quarkiverse.openapi.generator.deployment.template; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +import io.quarkus.qute.EvalContext; +import io.quarkus.qute.Expression; + +final class ExprEvaluator { + + private ExprEvaluator() { + } + + @SuppressWarnings("unchecked") + public static T evaluate(EvalContext context, Expression expression) throws ExecutionException, InterruptedException { + return (T) context.evaluate(expression).toCompletableFuture().get(); + } + + @SuppressWarnings("unchecked") + public static T[] evaluate(EvalContext context, List expressions, Class type) + throws ExecutionException, InterruptedException { + T[] results = (T[]) java.lang.reflect.Array.newInstance(type, expressions.size()); + + for (int i = 0; i < expressions.size(); i++) { + Expression expression = expressions.get(i); + T result = type.cast(context.evaluate(expression).toCompletableFuture().get()); + results[i] = result; + } + + return results; + } + +} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java index 140ed1bfe..0cb8f2b8b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java @@ -7,6 +7,8 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutionException; +import org.openapitools.codegen.model.OperationMap; + import io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorOutputPaths; import io.quarkus.qute.EvalContext; import io.quarkus.qute.Expression; @@ -18,9 +20,8 @@ * implement and use them. */ public class OpenApiNamespaceResolver implements NamespaceResolver { - private static final String GENERATE_DEPRECATED_PROP = "generateDeprecated"; - static final OpenApiNamespaceResolver INSTANCE = new OpenApiNamespaceResolver(); + private static final String GENERATE_DEPRECATED_PROP = "generateDeprecated"; private OpenApiNamespaceResolver() { } @@ -53,6 +54,10 @@ public String parseUri(String uri) { return OpenApiGeneratorOutputPaths.getRelativePath(Path.of(uri)).toString().replace(File.separatorChar, '/'); } + public boolean hasAuthMethods(OperationMap operations) { + return operations != null && operations.getOperation().stream().anyMatch(operation -> operation.hasAuthMethods); + } + @Override public CompletionStage resolve(EvalContext context) { try { diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java index 5498f8543..4a27a6fe8 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java @@ -42,8 +42,9 @@ public QuteTemplatingEngineAdapter() { .addDefaults() .addValueResolver(new ReflectionValueResolver()) .addNamespaceResolver(OpenApiNamespaceResolver.INSTANCE) + .addNamespaceResolver(StrNamespaceResolver.INSTANCE) .removeStandaloneLines(true) - .strictRendering(false) + .strictRendering(true) .build(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java new file mode 100644 index 000000000..86ee7873b --- /dev/null +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java @@ -0,0 +1,58 @@ +package io.quarkiverse.openapi.generator.deployment.template; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; + +import io.quarkus.qute.EvalContext; +import io.quarkus.qute.NamespaceResolver; + +/** + * Namespace resolver to mimic the function of io.quarkus.qute.runtime.extensions.StringTemplateExtensions. + * This extension is built-in with Qute when used in a context with Quarkus DI. + * Since these extensions are built in build time by Qute we can't use them because our process also runs in build time without + * a CDI context. + * So any namespace resolver auto-generated by Quarkus won't be added to our engine. + * + * @see Template Extension Methods + */ +public class StrNamespaceResolver implements NamespaceResolver { + + static final StrNamespaceResolver INSTANCE = new StrNamespaceResolver(); + + private StrNamespaceResolver() { + } + + @Override + public String getNamespace() { + return "str"; + } + + /** + * @see io.quarkus.qute.runtime.extensions.StringTemplateExtensions#fmt(String, String, Object...) + */ + public String fmt(String format, Object... args) { + return String.format(format, args); + } + + @Override + public CompletionStage resolve(EvalContext context) { + switch (context.getName()) { + case "fmt": + if (context.getParams().size() < 2) { + throw new IllegalArgumentException( + "Missing required parameter for 'fmt'. Make sure that the function has at least two parameters"); + } + try { + return CompletableFuture.completedFuture( + fmt(ExprEvaluator.evaluate(context, context.getParams().get(0)), + ExprEvaluator.evaluate(context, context.getParams().subList(1, context.getParams().size()), + Object.class))); + } catch (Exception e) { + throw new RuntimeException(e); + } + default: + throw new IllegalArgumentException("There's no method named '" + context.getName() + "'"); + } + } + +} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index f7aa635c0..e8cb162df 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -33,17 +33,14 @@ public abstract class OpenApiClientGeneratorWrapper { public static final String VERBOSE = "verbose"; - private static final String ONCE_LOGGER = "org.openapitools.codegen.utils.oncelogger.enabled"; /** * Security scheme for which to apply security constraints even if the OpenAPI definition has no security definition */ public static final String DEFAULT_SECURITY_SCHEME = "defaultSecurityScheme"; public static final String SUPPORTS_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE = "supportsAdditionalPropertiesWithComposedSchema"; - private static final Map defaultTypeMappings = Map.of( - "date", "LocalDate", - "DateTime", "OffsetDateTime"); - private static final Map defaultImportMappings = Map.of( - "LocalDate", "java.time.LocalDate", + private static final String ONCE_LOGGER = "org.openapitools.codegen.utils.oncelogger.enabled"; + private static final Map defaultTypeMappings = Map.of("date", "LocalDate", "DateTime", "OffsetDateTime"); + private static final Map defaultImportMappings = Map.of("LocalDate", "java.time.LocalDate", "OffsetDateTime", "java.time.OffsetDateTime"); private final QuarkusCodegenConfigurator configurator; private final DefaultGenerator generator; @@ -53,8 +50,8 @@ public abstract class OpenApiClientGeneratorWrapper { private String modelPackage = ""; OpenApiClientGeneratorWrapper(final QuarkusCodegenConfigurator configurator, final Path specFilePath, final Path outputDir, - final boolean verbose, - final boolean validateSpec) { + final boolean verbose, final boolean validateSpec) { + // do not generate docs nor tests GlobalSettings.setProperty(CodegenConstants.API_DOCS, FALSE.toString()); GlobalSettings.setProperty(CodegenConstants.API_TESTS, FALSE.toString()); @@ -78,17 +75,44 @@ public abstract class OpenApiClientGeneratorWrapper { defaultTypeMappings.forEach(this.configurator::addTypeMapping); defaultImportMappings.forEach(this.configurator::addImportMapping); - this.generator = new DefaultGenerator(); - } + this.setDefaults(); - public OpenApiClientGeneratorWrapper withApiPackage(final String pkg) { - this.apiPackage = pkg; - return this; + this.generator = new DefaultGenerator(); } - public OpenApiClientGeneratorWrapper withModelPackage(final String pkg) { - this.modelPackage = pkg; - return this; + /** + * A few properties from the "with*" methods must be injected in the Qute context by default since we turned strict model + * rendering. + * This way we avoid side effects in the model such as "NOT_FOUND" strings printed everywhere. + * + * @see Qute - Configuration Reference + */ + private void setDefaults() { + // Set default values directly here + this.configurator.addAdditionalProperty("additionalApiTypeAnnotations", new String[0]); + this.configurator.addAdditionalProperty("additionalPropertiesAsAttribute", FALSE); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMember", FALSE); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberName", ""); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberStringValue", ""); + this.configurator.addAdditionalProperty("additionalRequestArgs", new String[0]); + this.configurator.addAdditionalProperty("classes-codegen", new HashMap<>()); + this.configurator.addAdditionalProperty("circuit-breaker", new HashMap<>()); + this.configurator.addAdditionalProperty("configKey", ""); + this.configurator.addAdditionalProperty("datatypeWithEnum", ""); + this.configurator.addAdditionalProperty("enable-security-generation", TRUE); + this.configurator.addAdditionalProperty("generate-part-filename", FALSE); + this.configurator.addAdditionalProperty("mutiny", FALSE); + this.configurator.addAdditionalProperty("mutiny-operation-ids", new HashMap<>()); + this.configurator.addAdditionalProperty("mutiny-return-response", FALSE); + this.configurator.addAdditionalProperty("part-filename-value", ""); + this.configurator.addAdditionalProperty("return-response", FALSE); + this.configurator.addAdditionalProperty("skipFormModel", TRUE); + this.configurator.addAdditionalProperty("templateDir", ""); + this.configurator.addAdditionalProperty("use-bean-validation", FALSE); + this.configurator.addAdditionalProperty("use-field-name-in-part-filename", FALSE); + this.configurator.addAdditionalProperty("verbose", FALSE); + // TODO: expose as properties https://github.com/quarkiverse/quarkus-openapi-generator/issues/869 + this.configurator.addAdditionalProperty(CodegenConstants.SERIALIZABLE_MODEL, FALSE); } /** @@ -98,30 +122,30 @@ public OpenApiClientGeneratorWrapper withModelPackage(final String pkg) { * @return this wrapper */ public OpenApiClientGeneratorWrapper withCircuitBreakerConfig(final Map> config) { - if (config != null) { - configurator.addAdditionalProperty("circuit-breaker", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("circuit-breaker", config); + }); return this; } public OpenApiClientGeneratorWrapper withClassesCodeGenConfig(final Map config) { - if (config != null) { - configurator.addAdditionalProperty("classes-codegen", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("classes-codegen", cfg); + }); return this; } public OpenApiClientGeneratorWrapper withMutiny(final Boolean config) { - if (config != null) { - configurator.addAdditionalProperty("mutiny", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("mutiny", cfg); + }); return this; } public OpenApiClientGeneratorWrapper withMutinyReturnResponse(final Boolean config) { - if (config != null) { - configurator.addAdditionalProperty("mutiny-return-response", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("mutiny-return-response", cfg); + }); return this; } @@ -209,16 +233,16 @@ public OpenApiClientGeneratorWrapper withAdditionalEnumTypeUnexpectedMemberStrin * @return this wrapper */ public OpenApiClientGeneratorWrapper withAdditionalApiTypeAnnotationsConfig(final String additionalApiTypeAnnotations) { - if (additionalApiTypeAnnotations != null) { + Optional.ofNullable(additionalApiTypeAnnotations).ifPresent(cfg -> { this.configurator.addAdditionalProperty("additionalApiTypeAnnotations", additionalApiTypeAnnotations.split(";")); - } + }); return this; } public OpenApiClientGeneratorWrapper withAdditionalRequestArgs(final String additionalRequestArgs) { - if (additionalRequestArgs != null) { + Optional.ofNullable(additionalRequestArgs).ifPresent(cfg -> { this.configurator.addAdditionalProperty("additionalRequestArgs", additionalRequestArgs.split(";")); - } + }); return this; } @@ -261,6 +285,12 @@ public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNameP return this; } + /** + * Main entrypoint, or where to generate the files based on the given base package. + * + * @param basePackage Java package name, e.g. org.acme + * @return a list of generated files + */ public List generate(final String basePackage) { this.basePackage = basePackage; this.consolidatePackageNames(); diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute index d130f7d41..9aa8cf918 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute @@ -2,4 +2,4 @@ * Special value if the API response contains some new value not declared in this enum. * You should react accordingly. */ -{additionalEnumTypeUnexpectedMemberName}({#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf("{additionalEnumTypeUnexpectedMemberStringValue}")){#if e.allowableValues},{/if} +{additionalEnumTypeUnexpectedMemberName}({#if e.isContainer.or(false)}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf("{additionalEnumTypeUnexpectedMemberStringValue}")){#if e.allowableValues},{/if} 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 738a52b08..d315a412a 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -17,10 +17,10 @@ import {imp.import}; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@jakarta.ws.rs.Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") +@jakarta.ws.rs.Path("{#if useAnnotatedBasePath.or(false)}{contextPath}{/if}{commonPath}") +@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @io.quarkiverse.openapi.generator.annotations.GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if enable-security-generation && hasAuthMethods} +{#if enable-security-generation && openapi:hasAuthMethods(operations) } @org.eclipse.microprofile.rest.client.annotation.RegisterProvider({package}.auth.CompositeAuthenticationProvider.class) @org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders({package}.auth.AuthenticationPropagationHeadersFactory.class) {/if} @@ -53,7 +53,7 @@ public interface {classname} { @jakarta.ws.rs.Produces(\{{#for produce in op.produces}"{produce.mediaType}"{#if produce_hasNext}, {/if}{/for}\}) {/if} @io.quarkiverse.openapi.generator.annotations.GeneratedMethod("{op.operationIdOriginal}") - {#for cbClassConfig in circuit-breaker.orEmpty}{#if cbClassConfig.key == package + classname} + {#for cbClassConfig in circuit-breaker.orEmpty}{#if cbClassConfig.key == str:fmt("%s.%s", package, classname)} {#for cbMethod in cbClassConfig.value.orEmpty}{#if cbMethod == op.nickname} @org.eclipse.microprofile.faulttolerance.CircuitBreaker {/if}{/for} @@ -138,13 +138,13 @@ public interface {classname} { {#for p in op.pathParams}@jakarta.validation.Valid {#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} {#for p in op.queryParams}@jakarta.validation.Valid {#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} {#for p in op.cookieParams}@jakarta.validation.Valid {#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} - {#for p in op.headerParams}@jakarta.validation.Valid {#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams}, + {#for p in op.headerParams}@jakarta.validation.Valid {#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam}, {#for p in op.bodyParams}@jakarta.validation.Valid {#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{/if} {#else} {#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} {#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} {#for p in op.cookieParams}{#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} - {#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if} + {#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if} {#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} {#else} diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute index 75a41699b..45f921047 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute @@ -1,16 +1,8 @@ -{#if e.withXml} - @jakarta.xml.bind.annotation.XmlType(name={#if e.isEnum}"{e.items.enumName}"{#else}"{e.enumName}"{/if}) - @akarta.xml.bind.annotation.XmlEnum({#if e.isEnum}{e.items.dataType}{#else}{e.dataType}{/if}.class) -{/if} {#include additionalEnumTypeAnnotations.qute e=e /}public enum {e.enumName} { {#if e.allowableValues} {#if additionalEnumTypeUnexpectedMember}{#include additionalEnumTypeUnexpectedMember.qute e=e/}{/if} - {#if e.withXml} - {#for v in e.allowableValues.enumVars}@XmlEnumValue({#if v.isInteger || v.isDouble || v.isLong || v.isFloat}"{/if}{v.value}{#if v.isInteger || v.isDouble || v.isLong || v.isFloat}"{/if}) {v.name}({#if e.isEnum}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf({v.value})){#if v_hasNext}, {#else}; {/if}{/for} - {#else} {#for v in e.allowableValues.enumVars}{v.name}({#if eq e.isNumeric}{v.value}{#else}{#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf({v.value}){/if}){#if v_hasNext}, {#else};{/if}{/for} {/if} - {/if} // caching enum access private static final java.util.EnumSet<{e.enumName}> values = java.util.EnumSet.allOf({e.enumName}.class); @@ -38,6 +30,6 @@ return b; } } - {#if e.useNullForUnknownEnumValue}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + v + "'");{/if} + {#if e.isNullable}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + v + "'");{/if} } } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute index c47e1944a..d5f1dbecb 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute @@ -1,25 +1,25 @@ /** - * {#insert e.description}Gets or Sets {e.name}{/}{#if e.description}{description}{/} + * {#insert e.description}Gets or Sets {e.name}{/}{#if e.description}{e.description}{/} */ @com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) -{#include additionalEnumTypeAnnotations.qute e=e/}public enum {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} { +{#include additionalEnumTypeAnnotations.qute e=e/}public enum {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} { {#if e.allowableValues} {#if additionalEnumTypeUnexpectedMember}{#include additionalEnumTypeUnexpectedMember.qute e=e/}{/if} {#for v in e.allowableValues.enumVars}{v.name}({e.dataType}.valueOf({v.value})){#if v_hasNext}, {#else};{/if}{/for} {/if} // caching enum access - private static final java.util.EnumSet<{#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}> values = java.util.EnumSet.allOf({#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}.class); + private static final java.util.EnumSet<{#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}> values = java.util.EnumSet.allOf({#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}.class); private {e.dataType} value; - {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}({e.dataType} value){ + {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}({e.dataType} value){ this.value = value; } @com.fasterxml.jackson.annotation.JsonValue - public {#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if} value() { + public {#if e.isContainer.or(false)}{e.items.dataType}{#else}{e.dataType}{/if} value() { return value; } @@ -29,12 +29,12 @@ } @com.fasterxml.jackson.annotation.JsonCreator - public static {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} fromString(String text) { - for ({#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} b : values) { + public static {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} fromString(String text) { + for ({#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} b : values) { if (String.valueOf(b.value).equalsIgnoreCase(text)) { return b; } } - {#if e.useNullForUnknownEnumValue}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + text + "'");{/if} + {#if e.isNullable}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + text + "'");{/if} } } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute index 7b266fdc1..437740b5a 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute @@ -17,5 +17,5 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; {#for m in models} {#if m.model.isEnum}{#include enumOuterClass.qute e=m.model/} -{#else}{#include pojo.qute m=m.model withXml=withXml codegen=classes-codegen package=modelPackage/}{/if} +{#else}{#include pojo.qute m=m.model codegen=classes-codegen package=modelPackage/}{/if} {/for} \ No newline at end of file diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index a8662e818..ae5542c1e 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -1,35 +1,27 @@ {@org.openapitools.codegen.CodegenModel m} -{#if withXml} -{#else} import com.fasterxml.jackson.annotation.JsonProperty; -{/if} {#if m.description} /** * {m.description} **/ {/if} -{#if withXml} -@jakarta.xml.bind.annotation.XmlAccessorType(jakarta.xml.bind.annotation.XmlAccessType.FIELD) -{#if m.hasVars}@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} -}){#else} -@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}") -{/if} -{#if !m.parent || m.parent.isEmpty}@jakarta.xml.bind.annotation.XmlRootElement(name = "{m.classname}"){/if} -{#else} -@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) -{/if} {#include additionalModelTypeAnnotations.qute m=m/} {#if m.discriminator && m.discriminator.mappedModels && !m.discriminator.mappedModels.empty} -@com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.EXISTING_PROPERTY, property = "{m.discriminator.propertyBaseName}") +@com.fasterxml.jackson.annotation.JsonIgnoreProperties( + value = "{m.discriminator.propertyBaseName}", // ignore manually set {m.discriminator.propertyBaseName}, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the {m.discriminator.propertyBaseName} to be set during deserialization +) +@com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY, property = "{m.discriminator.propertyBaseName}", visible = true) @com.fasterxml.jackson.annotation.JsonSubTypes({ {#for child in m.discriminator.mappedModels} - @com.fasterxml.jackson.annotation.JsonSubTypes.Type(value = {child.model.classname}.class, name = "{child.mappingName}"), + @com.fasterxml.jackson.annotation.JsonSubTypes.Type(value = {child.modelName}.class, name = "{#if m.vendorExtensions.x-discriminator-value.or('') == ''}{child.mappingName}{#else}{m.vendorExtensions.x-discriminator-value}{/if}"), {/for} }) +{#else} +@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) {/if} -public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements java.io.Serializable{/if} { +public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements java.io.Serializable{/if} { {#for v in m.vars} {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} @@ -40,9 +32,6 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if v.description} /** * {v.description} @@ -73,12 +62,10 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {/if} * @return {v.name} **/ - {#if !withXml} @JsonProperty("{v.baseName}") {#if !v.required} @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) {/if} - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} @@ -128,7 +115,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {/if} {/for} - {#include pojoAdditionalProperties.qute m=m.model additionalPropertiesAsAttribute=additionalPropertiesAsAttribute /} + {#include pojoAdditionalProperties.qute m=m additionalPropertiesAsAttribute=additionalPropertiesAsAttribute /} /** * Create a string representation of this pojo. **/ @@ -159,5 +146,5 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa return o.toString().replace("\n", "\n "); } - {#include pojoQueryParam.qute m=m.model withXml=withXml codegen=classes-codegen package=modelPackage/} + {#include pojoQueryParam.qute m=m codegen=classes-codegen package=modelPackage/} } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute index 26ef23f25..cb0ccd9ee 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute @@ -3,19 +3,9 @@ * {m.description} **/ {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlAccessorType(jakarta.xml.bind.annotation.XmlType.XmlAccessType.FIELD) - {#if m.hasVars}@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} - }){#else} - @jakarta.xml.bind.annotation.XmlType(name = "{m.classname}") - {/if} - {#if !m.parent || m.parent.isEmpty}@jakarta.xml.bind.annotation.XmlRootElement(name = "{m.classname}"){/if} - {#else} @com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) - {/if} {#include additionalModelTypeAnnotations.qute m=m/} - public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements java.io.Serializable{/if} { + public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements java.io.Serializable{/if} { {#for v in m.vars} {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} @@ -26,9 +16,6 @@ {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlType.XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if m.description} /** * {m.description} @@ -41,7 +28,7 @@ {#include beanValidation.qute p=v/} {/if} {#if v.isContainer} - private {v.datatypeWithEnum} {v.name}{#if v.required&&v.defaultValue} = {v.defaultValue}{#else} = null{/if}; + private {v.datatypeWithEnum} {v.name}{#if v.required && v.defaultValue} = {v.defaultValue}{#else} = null{/if}; {#else} private {v.datatypeWithEnum} {v.name}{#if v.defaultValue} = {v.defaultValue}{/if}; {/if} @@ -64,9 +51,7 @@ {/if} * @return {v.name} **/ - {#if !withXml} @com.fasterxml.jackson.annotation.JsonProperty("{v.baseName}") - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java index cf3e03c4f..2c13db0dd 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java @@ -35,6 +35,7 @@ public class OpenApiSpecProviderTest { quarkus.oidc-client.oauth_auth.auth-server-url=localhost quarkus.oidc-client.oauth_auth1.auth-server-url=localhost quarkus.oidc-client.oauth_auth2.auth-server-url=localhost + quarkus.keycloak.devservices.enabled=false """), "application.properties")); diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java index ea2f7e4fa..f9a330c1f 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java @@ -32,7 +32,10 @@ public class OperationTest { .addClass(PetApi.class) .addClass(LocalAuthenticationProvider.class) .addAsResource( - new StringAsset("quarkus.oidc-client.oauth_auth.auth-server-url=localhost\n"), + new StringAsset(""" + quarkus.oidc-client.oauth_auth.auth-server-url=localhost + quarkus.keycloak.devservices.enabled=false + """), "application.properties")); @Inject 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 2a80f9ec2..248ef41f5 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 @@ -45,6 +45,29 @@ public class OpenApiClientGeneratorWrapperTest { + private static Optional getMethodDeclarationByIdentifier(List methodDeclarations, + String methodName) { + return methodDeclarations.stream().filter(md -> md.getName().getIdentifier().equals(methodName)).findAny(); + } + + @Test + void verifyDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { + OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-852.json"); + final List generatedFiles = generatorWrapper.generate("org.issue852"); + + assertNotNull(generatedFiles); + assertFalse(generatedFiles.isEmpty()); + + final Optional classWithDiscriminator = generatedFiles.stream() + .filter(f -> f.getName().endsWith("PostRevisionForDocumentRequest.java")).findFirst(); + assertThat(classWithDiscriminator).isPresent(); + + final CompilationUnit compilationUnit = StaticJavaParser.parse(classWithDiscriminator.orElseThrow()); + assertThat(compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) + .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))) + .isPresent(); + } + @Test void verifyFlink() throws URISyntaxException, FileNotFoundException { OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-flink.yaml"); @@ -765,9 +788,4 @@ private Optional findVariableByName(List f .filter((VariableDeclarator variable) -> name.equals(variable.getName().asString())) .findFirst(); } - - private static Optional getMethodDeclarationByIdentifier(List methodDeclarations, - String methodName) { - return methodDeclarations.stream().filter(md -> md.getName().getIdentifier().equals(methodName)).findAny(); - } } diff --git a/client/deployment/src/test/resources/openapi/issue-852.json b/client/deployment/src/test/resources/openapi/issue-852.json new file mode 100644 index 000000000..679ffb7ad --- /dev/null +++ b/client/deployment/src/test/resources/openapi/issue-852.json @@ -0,0 +1,6160 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "OnBase Foundation 22.1", + "title": "OnBase Document API", + "description": "Provides core OnBase Document Management functionality.", + "x-public": true, + "contact": { + "name": "Hyland Community", + "url": "https://community.hyland.com/technical/rest-apis" + } + }, + "servers": [ + { + "url": "{protocol}://{server}/{product}", + "variables": { + "protocol": { + "enum": [ + "http", + "https" + ], + "default": "https" + }, + "server": { + "default": "localhost/apiserver", + "description": "This is the server being used to host the API in the current environment." + }, + "product": { + "default": "onbase/core", + "description": "This is the portion of the url to add to each base-url before each path defined below." + } + } + } + ], + "security": [ + { + "Bearer": [] + } + ], + "tags": [ + { + "name": "Autofills", + "description": "AutoFill Keyword Set metadata retrieval." + }, + { + "name": "Currency Formats", + "description": "Configuration items related to currency formats." + }, + { + "name": "Custom Queries", + "description": "Configuration items related to custom queries." + }, + { + "name": "Document", + "description": "Document archival and metadata retrieval." + }, + { + "name": "Document Content", + "description": "Document content retrieval." + }, + { + "name": "Document Keywords", + "description": "Document keywords." + }, + { + "name": "Document Notes", + "description": "Notes retrieval from a document's revision." + }, + { + "name": "Document Queries", + "description": "Document search." + }, + { + "name": "Document Renditions", + "description": "Document renditions." + }, + { + "name": "Document Revisions", + "description": "Document revisions." + }, + { + "name": "Document Types", + "description": "Configuration items related to document types." + }, + { + "name": "Document Type Groups", + "description": "Configuration items related to document type groups." + }, + { + "name": "File Types", + "description": "Configuration items related to file types." + }, + { + "name": "File Upload", + "description": "File upload for document archival." + }, + { + "name": "Locks", + "description": "Locking and unlocking documents." + }, + { + "name": "Keyword Types", + "description": "Keyword types metadata retrieval." + }, + { + "name": "Keyword Type Groups", + "description": "Keyword type groups metadata retrieval." + }, + { + "name": "Notes", + "description": "Note metadata retrieval." + }, + { + "name": "Note Types", + "description": "Configuration items related to Note types." + } + ], + "paths": { + "/currency-formats": { + "get": { + "summary": "Get the metadata for all currency formats.", + "description": "Get all the currency formats configured. This list will not include the currency\nused to support Workstation Region Settings.", + "operationId": "GetCurrencyFormatCollection", + "tags": [ + "Currency Formats" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of currency formats. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of currency formats. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=currencyFormat1&systemName=currencyFormat2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CurrencyFormatCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/currency-formats/{currencyFormatId}": { + "get": { + "summary": "Gets currency format metadata.", + "description": "Gets currency format metadata. When Keyword Type is configured to use Workstation Regional Settings\n'default' can be used.", + "operationId": "GetCurrencyFormatById", + "tags": [ + "Currency Formats" + ], + "parameters": [ + { + "$ref": "#/components/parameters/currencyFormatId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CurrencyFormat" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries": { + "get": { + "summary": "Gets custom queries", + "description": "Currently only returns Custom Queries the user has permissions to and that the /documents/queries end point is capable of executing.", + "operationId": "GetCustomQueryCollection", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of custom queries. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of custom queries. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=customQuery1&systemName=customQuery2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQueryCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries/{customQueryId}": { + "get": { + "summary": "Gets custom query metadata", + "description": "Gets custom query metadata", + "operationId": "GetCustomQueryById", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/customQueryId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQuery" + } + } + } + }, + "400": { + "description": "Response for when user attempts to retrieve a type of custom query that is not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Custom query type is not supported.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries/{customQueryId}/keyword-types": { + "get": { + "summary": "Gets keyword types for a custom query", + "description": "Gets a keyword type collection for the custom query", + "operationId": "GetKeywordTypeCollectionForCustomQuery", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/customQueryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQueryKeywordTypeCollection" + } + } + } + }, + "400": { + "description": "Response for when user attempts to retrieve a type of custom query that is not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Custom query type is not supported.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types": { + "get": { + "summary": "Get a list of document types.", + "description": "Get all the document types the logged in user has permissions to view.", + "operationId": "GetDocumentTypeCollection", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of document types.This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of document types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=docType1&systemName=docType2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}": { + "get": { + "summary": "Get a document type", + "description": "Gets the document type with the associated id.", + "operationId": "GetDocumentTypeById", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}/keyword-type-groups": { + "get": { + "summary": "Get keyword type group metadata for a document type.", + "description": "Gets the associated keyword type groups or associated list of keyword types for standalone keywords.\n\nThe keyword type group metadata will be returned in the display order as it has\nbeen configured on the document type.", + "operationId": "GetKeywordTypeGroupCollectionForDocumentType", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupCollectionModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}/default-keywords": { + "get": { + "summary": "Gets default keywords for a new document.", + "description": "Gets the default keyword values for a document type grouped by keyword type group and\nkeyword type.", + "operationId": "GetDefaultKeywordCollectionForDocumentType", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `Create Document' or\ndocument privilege 'ReIndex Document'", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have the document privilege Create Document or document privilege ReIndex Document", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups": { + "get": { + "summary": "Get a list of document type groups.", + "description": "Get all the document type groups the logged in user has permissions to view.", + "operationId": "GetDocumentTypeGroupCollection", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of document type groups. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique system names of document type groups. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=docTypeGroup1&systemName=docTypeGroup2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroupCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups/{documentTypeGroupId}": { + "get": { + "summary": "Get a document type group", + "description": "Gets the document type group with the associated id.", + "operationId": "GetDocumentTypeGroupById", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroup" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups/{documentTypeGroupId}/document-types": { + "get": { + "summary": "Gets the associated document types for a document type group", + "description": "Gets the associated document type collection for the document type group", + "operationId": "GetDocumentTypeCollectionForDocumentTypeGroup", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeGroupId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroupDocumentTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/file-types": { + "get": { + "summary": "Get file type metadata for all file types.", + "description": "Get the file type metadata for all file types in\nthe system.", + "operationId": "GetFileTypeCollection", + "tags": [ + "File Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of file types. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=2&id=16" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of file types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=Image File Format&systemName=PDF" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/file-types/{fileTypeId}": { + "get": { + "summary": "Get file type metadata.", + "description": "Get file type metadata for the specified file type id.", + "operationId": "GetFileTypeById", + "tags": [ + "File Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/default-upload-file-types": { + "get": { + "summary": "Gets the \"best guess\" file type for upload based on a given extension.", + "description": "Gets the \"best guess\" file type for upload based on a given extension.", + "operationId": "GetFileTypeForUpload", + "tags": [ + "File Types" + ], + "parameters": [ + { + "in": "query", + "name": "extension", + "required": true, + "schema": { + "type": "string" + }, + "description": "The extension that will determine the File Type that is appropriate for upload." + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DefaultUploadFileType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-types": { + "get": { + "summary": "Get keyword type metadata for all keyword types.", + "description": "Get the keyword type metadata for all keyword types in\nthe system.", + "operationId": "GetKeywordTypeCollection", + "tags": [ + "Keyword Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of keyword types. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of keyword types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=keywordType1&systemName=keywordType2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-types/{keywordTypeId}": { + "get": { + "summary": "Get keyword type metadata.", + "description": "Get keyword type metadata for the specified keyword type id.", + "operationId": "GetKeywordTypeById", + "tags": [ + "Keyword Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups": { + "get": { + "summary": "Get keyword type group metadata for all keyword type groups.", + "description": "Get the keyword type group metadata for all keyword type groups in\nthe system.", + "operationId": "GetKeywordTypeGroupCollection", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of keyword type groups. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of keyword type groups. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=keywordTypeGroup1&systemName=keywordTypeGroup2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups/{keywordTypeGroupId}": { + "get": { + "summary": "Get keyword type group metadata.", + "description": "Get keyword type group metadata for the specified keyword type group id.", + "operationId": "GetKeywordTypeGroupById", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroup" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups/{keywordTypeGroupId}/keyword-types": { + "get": { + "summary": "Get a list of keyword types in the keyword type group.", + "description": "Get a list of keyword types in the keyword type group with the specified id.", + "operationId": "GetKeywordTypeCollectionForKeywordTypeGroup", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupKeywordTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets": { + "get": { + "summary": "Get autofill keyword set metadata for all autofill keyword sets.", + "description": "Get the autofill keyword set metadata for all autofill keyword sets in\nthe system.", + "operationId": "GetAutofillKeywordSetCollection", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of autofill keyword sets. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of autofill keyword sets. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=testAutofill1&systemName=testAutofill2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSetCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}": { + "get": { + "summary": "Get autofill keyword set metadata.", + "description": "Get autofill keyword set metadata for the specified autofill keyword set id.", + "operationId": "GetAutofillKeywordSetById", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSet" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}/keyword-types": { + "get": { + "summary": "Get keyword metadata for a autofill type.", + "description": "Gets the associated keyword types.", + "operationId": "GetKeywordTypeCollectionForAutofillKeywordSet", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeywordTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}/keyword-set-data": { + "get": { + "summary": "Get the keyword set data.", + "description": "Get the keyword set data instances based on query parameters.", + "operationId": "GetKeywordDataCollectionForAutofillKeywordSet", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + }, + { + "in": "query", + "name": "primaryValue", + "schema": { + "type": "string" + }, + "description": "The primary keyword value associated with the particular autofill keyword set." + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordSetDataCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents": { + "get": { + "summary": "Get a list of documents.", + "description": "Get the list of documents with the given ids that the user has permission to view. An empty list is returned if the user does not have access to any documents or the documents cannot be found.", + "operationId": "GetDocumentCollection", + "tags": [ + "Document" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "description": "The unique identifiers of Document. Multiple values are supported and in a URL should be joined using the '&' character.\nEx: ?id=101&id=102&id=103.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Archive the document.", + "description": "Finishes the document upload by archiving the document into the given document type. Can also optionally specify the document date, comments if the document type is Revisable/Renditionable and also a boolean to indicate if this needs to be stored as a new document regardless of the document type settings. If fileTypeId is not specified, then the default file type for the document type will be used. Providing a keyword collection with a keyword guid is required. Takes a list of references to uploaded file resources.", + "operationId": "PostDocument", + "tags": [ + "Document" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentArchiveProperties" + } + } + } + }, + "responses": { + "201": { + "description": "Document successfully archived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "300": { + "description": "Document(s) are found for which the new document can be added as Revision/Rendition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatchedDocumentCollectionResponse" + } + } + } + }, + "400": { + "description": "Document Type Id and/or File Type Id is invalid,\nKeyword information is invalid, unique handle(s)\nare invalid, no comments are provided when the document type is set to \"Force Comments\",\nor an invalid archival option has been provided for Revisable/Renditionable document type.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid document type.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "User does not have rights to create document or when the user is trying to add read-only and hidden keywords without 'Access Restricted Keywords' privilege.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "User does not have rights to create document.", + "instance": "/example-resource" + } + } + } + } + } + } + }, + "/documents/{documentId}": { + "get": { + "summary": "Gets document metadata.", + "description": "Gets document metadata.", + "operationId": "GetDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "delete": { + "summary": "Deletes a document.", + "description": "Deletes a document.", + "operationId": "DeleteDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have delete rights to the specified document,\nretention criteria has not been met, or the resource is checked out.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to the specified document, retention criteria has not been met, or the resource is checked out.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "description": "Response when the resource does not exist or the user does not have view rights to the specified document.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "Document does not exist.", + "instance": "/example-resource" + } + } + } + } + } + }, + "patch": { + "summary": "Updates document metadata.", + "description": "Updates document metadata.", + "operationId": "PatchDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "400": { + "description": "Response when the user sends invalid data to modify document metadata.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Date Format.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to modify document metadata.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to modify the specified document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "put": { + "summary": "Reindex document.", + "description": "Reindexes a document by first checking if there is a match for rendition or revisions\nand then applies the reindex if there are no matches, the user verifies that it will not\nstore as a new revision or rendition, or if there is no document type change.\nThe keywordCollection requires a keyword GUID. For reindexing, this must come from the source document (/document/{id}/keywords) rather than the target document type.", + "operationId": "PutDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentReindexProperties" + } + } + } + }, + "responses": { + "204": { + "description": "No Content" + }, + "300": { + "description": "Document(s) are found for which the new document can be added as Revision/Rendition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatchedDocumentCollectionResponse" + } + } + } + }, + "400": { + "description": "Response when the user sends invalid data to reindex.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Date Format.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to reindex.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to reindex the specified document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/keywords": { + "get": { + "summary": "Gets keywords for a document.", + "description": "Gets the keyword values for a document grouped by keyword type group and\nkeyword type.", + "operationId": "GetKeywordCollectionForDocument", + "tags": [ + "Document Keywords" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "in": "query", + "name": "unmask", + "description": "Value determining whether to unmask security masked Keywords. If true and user does not\nhave Access Security Masked Keywords privilege, security masked Keywords will stay masked.\nSetting unmask to false is equivalent to omitting the query string parameter.", + "schema": { + "type": "boolean" + }, + "required": false + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `View Keywords'", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have the document privilege View Keywords", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "put": { + "summary": "Sets all keyword values for an indexed document.", + "description": "Sets all keyword values for an indexed document. Existing values will be\nreplaced with the supplied list of keyword values grouped by keyword type\ngroup and keyword type.", + "operationId": "PutKeywordCollectionForDocument", + "tags": [ + "Document Keywords" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Response when the user sends a empty request body,\ninvalid keyword syntax, invalid keyword data, or missing restricted keyword guid.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Do not have the document privilege View Keywords", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `Modify Keywords',\nthe document is locked by Records Management or Medical records.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Does not have the document privilege Modify Keywords, the document is locked by Records Management or Medical records.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/indexing-modifiers": { + "post": { + "summary": "Performs modification of keyword data during indexing processes like Reindex and Archival.", + "description": "During the indexing process, some actions require additional information from the server before indexing can continue. This\nend point provides the ability to perform these actions.\nThis end point is intended to assist with indexing processes that are interactive. Requests to this end point do not persist\nany indexing data on the document.\n# Expand AutoFill Keyword Sets\nAutoFill Keyword Sets can be expanded during the Reindex process and during the Archival process. Information about the desired AutoFill\nto expand is sent to the server to perform the operation and sends back the results based on a Primary Keyword value. Expansion will\noccur if a single Primary Keyword value match is found and will return back the updated Keyword Collection. If multiple matches are\nfound the endpoint will behave differently depending on the following AutoFill Keyword Set configuration.\n\n\n \n \n \n \n \n \n \n \n \n
Expansion Type Behavior
Single Selection A collection of AutoFill Keyword Set Data Sets will be sent\n back that requires a selection of a single AutoFill Keyword Set Data Set Instance Id\n to be passed back for successful expansion.
Multiple Selection A collection of AutoFill Keyword Set Data Sets will be sent back\n that requires a selection of AutoFill Keyword Set Data Set Instance Ids to be passed\n back for successful expansion.
Expand All All matching AutoFill Keyword Set Data Sets will be\n expanded without any other interaction.
", + "operationId": "PostIndexingModifier", + "tags": [ + "Document Keywords" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReindexAutoFillExpansionModifierProperties" + }, + { + "$ref": "#/components/schemas/ArchivalAutoFillExpansionModifierProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "ReindexAutoFillExpansion": "#/components/schemas/ReindexAutoFillExpansionModifierProperties", + "ArchivalAutoFillExpansion": "#/components/schemas/ArchivalAutoFillExpansionModifierProperties" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexingModifiersPostResponse" + } + } + } + }, + "300": { + "description": "Multiple AutoFill Keyword Set Data Set items are found matching the Primary Keyword Value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillMultipleMatchesResponse" + } + } + } + }, + "400": { + "description": "Response when the user sends an invalid AutoFill Keyword Expansion Properties.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Type Id.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the necessary privileges.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "No privileges to perform Autofill Expansion", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/locks": { + "get": { + "summary": "Gets the current locks for the document.", + "description": "Gets the list of locks that are currently placed on a document.", + "operationId": "GetDocumentLocks", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LockInfoCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Create a lock on a document.", + "description": "Creates lock on a document. The type of lock is\nspecified in the required query parameter `lockType`.", + "operationId": "PostDocumentLocks", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/lockTypeParam" + } + ], + "responses": { + "204": { + "description": "No Content. Lock created." + }, + "400": { + "description": "Response when lockType is not included.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Required parameter lockType is not included.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + }, + "409": { + "$ref": "#/components/responses/409-LOCKING-RESPONSE" + } + } + }, + "delete": { + "summary": "Delete a lock on a document.", + "description": "Deletes a lock on a document. The type of lock is\nspecified in the required query parameter `lockType`.", + "operationId": "DeleteDocumentLock", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/lockTypeParam" + } + ], + "responses": { + "204": { + "description": "No content. Document Lock has been removed." + }, + "400": { + "description": "Response when lockType is not included.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Required parameter lockType is not included.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/notes": { + "get": { + "tags": [ + "Document Notes" + ], + "summary": "Gets a collection of notes for a given document.", + "description": "Gets a collection of notes for a given document.\nUse `latest` to retrieve the most recent revision's notes.", + "operationId": "GetNoteCollectionForDocument", + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "name": "page", + "in": "query", + "description": "The page of the document to retrieve notes from. A page is one based.\nIf the value is not present then all notes on the document revision will be retrieved.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteCollectionModel" + } + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "tags": [ + "Document Notes" + ], + "summary": "Create a new note and add it to a given document revision.", + "description": "Create a new note and add it to a given document revision.\nUse `latest` to add to the most recent revision.", + "operationId": "PostNoteOnDocument", + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "requestBody": { + "description": "Model containing the note metadata to save.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddNotePropertiesModel" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The note was successfully created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotesPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "The note has an invalid size, the note type of the note is unsupported, or the note\ncould not be created.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to create notes on this document or\nthe document lock prevents the note from being created.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to create the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions": { + "get": { + "summary": "Gets a collection of document revisions.", + "description": "Gets collection of document revisions.", + "operationId": "GetRevisionCollectionForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevisionCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Store a new revision", + "description": "Archives or Reindexes the document as a latest revision to the current document.\nKeywords supplied with this request are merged with the existing keywords on the document. For Single Instance keywords, old values are replaced by the new values.", + "operationId": "PostRevisionForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/RevisionArchiveProperties" + }, + { + "$ref": "#/components/schemas/RevisionReindexProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "RevisionArchive": "#/components/schemas/RevisionArchiveProperties", + "RevisionReindex": "#/components/schemas/RevisionReindexProperties" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Revision successfully stored.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevisionsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "A reference to an uploaded file resource is not found, invalid File\nType Id is provided, the document type is not revisable, invalid keywords are supplied or\na comment is not supplied when 'Force Comments' is set to true.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "A reference to an uploaded file resource is not found, invalid File Type Id is provided, or the document type is not revisable", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to create or reindex a document, when the user is trying to add/modify keywords with an invalid Keyword Guid, or when the user is trying to add/modify read-only keywords without `Access Restricted Keywords`.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Does not have rights to create revisions.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}": { + "get": { + "summary": "Gets the metadata for a revision.", + "description": "Gets the metadata for a revision.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.", + "operationId": "GetRevisionByIdForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Revision" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions": { + "get": { + "summary": "Gets a collection of document renditions.", + "description": "Gets a collection of document renditions.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.", + "operationId": "GetRenditionCollectionForRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenditionCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/latest/renditions": { + "post": { + "summary": "Store rendition to the latest revision", + "description": "Archives or Reindexes the document as a rendition to the latest revision.\nKeywords supplied with this request are merged with the existing keywords on the document. For Single Instance keywords, old values are replaced by the new values.", + "operationId": "PostRenditionForLatestRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/RenditionArchiveProperties" + }, + { + "$ref": "#/components/schemas/RenditionReindexProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "RenditionArchive": "#/components/schemas/RenditionArchiveProperties", + "RenditionReindex": "#/components/schemas/RenditionReindexProperties" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Document successfully archived as rendition to the given revision.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenditionsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "A reference to the uploaded file resource is not found,\nan invalid File Type Id is provided,\nthe document already contains a rendition of the given File Type Id,\nthe document type is not renditionable,\ninvalid keywords are supplied or\na comment is not supplied when 'Force Comments' is set to true.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "An invalid File Type Id is provided", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to create or reindex a document, when the user is trying to add/modify keywords with an invalid Keyword Guid, or when the user is trying to add/modify read-only keywords without `Access Restricted Keywords`.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to create a document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions/{fileTypeId}": { + "get": { + "summary": "Gets the metadata for a rendition of a revision.", + "description": "Gets the metadata for a rendition of a revision.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.\nUse `default` to retrieve the default rendition.", + "operationId": "GetRenditionByIdForRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Rendition" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-GENERIC-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions/{fileTypeId}/content": { + "get": { + "summary": "Get document content for a rendition of a revision.", + "description": "To retrieve the default rendition of the latest revision,\nuse 'default' for the fileTypeId and 'latest' for the revisionId.\n\nThe `latest` revision will be available regardless of permission to view revisions.\n\nConsumers can `GET` the content resource by supplying the required\nparameters. A response will be returned\nbased on the result of Content Negotiation. For more detailed information\nregarding how the response content type will be determined, please review\nthe Document Retrieval section of the Programmers Guide.\n\nThe `pages` query parameter can be used to retrieve a single page of the document.\nWhen the `pages` query parameter is provided, the total page count for the document\nwill be included on the response in the `Hyland-Item-Count` header.\nThe Range header can be used to retrieve a specific byte range.\n\nThe `Hyland-Item-Count` header will only be included if the `pages` query parameter is used.\n\nWhen the `pages` query parameter and 'Range' request header is omitted, document content is returned\nin its entirety as a single file with a 200 OK Status code.\n\nThe `context` query parameter can be used to provide additional context of what the\nclient is retrieving the page data for. This will perform client privilege checks and\nlog more appropriate messages to the document history indicating what action the client\nwill be performing.\n\nWhen retrieving a byte range of a document, the response will include an ETag\nrepresenting the specific document that the byte range is from. When retrieving\na second byte range from the same document, this ETag should be included in the\nrequest header If-Match. This will ensure that the second byte range is taken\nfrom the same exact document as the first. If this original document does not\nexist anymore, or if it has been changed in the interim, a status code of 412\nPrecondition Failed will be returned.\n\nWhen requesting a byte range that only represents part of a document, a 206 Partial\nContent response will be returned. If a byte range is requested that includes all of\ndocument's bytes, a 200 OK response will be returned instead.\n\nThe `height` and `width` query parameters can be used to retrieve a smaller scale version\nof the resource with the provided dimensions, in pixels. The `fit` query parameter can also be\nincluded to define how the scaling should occur. When the `fit` query parameter is not provided\nthe default value of `Both` is used.", + "operationId": "GetContentForRenditionOfRevisionOfDocument", + "tags": [ + "Document Content" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/pages" + }, + { + "$ref": "#/components/parameters/contentContext" + }, + { + "$ref": "#/components/parameters/height" + }, + { + "$ref": "#/components/parameters/width" + }, + { + "$ref": "#/components/parameters/fit" + }, + { + "$ref": "#/components/parameters/Accept" + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/Range" + } + ], + "responses": { + "200": { + "description": "Response containing document content.", + "headers": { + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "206": { + "description": "Response for content that consists of multiple parts.", + "headers": { + "Content-Range": { + "$ref": "#/components/headers/Content-Range" + }, + "Accept-Ranges": { + "$ref": "#/components/headers/Accept-Ranges" + }, + "ETag": { + "$ref": "#/components/headers/ETag" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "description": "Response for content when the document does not exist a requested\npage does not exist, or the user does not have rights to access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The document does not exist, a requested page does not exist, or the user does not have rights to access.", + "instance": "/example-resource" + } + } + } + }, + "406": { + "$ref": "#/components/responses/406-GENERIC-RESPONSE" + }, + "412": { + "description": "Response for when a user is attempting to retrieve a byte range for\nspecific document and that document no longer exists or has been changed.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/precondition-failed", + "title": "Precondition Failed", + "status": 412, + "detail": "The request `ETag: db43771c6daa4f4da95e6d747483452c` is not valid.", + "instance": "/content" + } + } + } + }, + "416": { + "description": "Response for content when the specified range is not valid for the\ncontent or when the specified range requested is for more than one\npart.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/range-not-satisfiable", + "title": "Range not satisfiable", + "status": 416, + "detail": "The request Range bytes=1000-1100 is not valid.", + "instance": "/content" + } + } + } + } + } + }, + "head": { + "summary": "Preview document content.", + "description": "Consumers can make a `HEAD` request to see the response\nheaders without the response body. This allows previewing\nthe result of Content Negotiation with Content-Type,\nand Hyland-Item-Count headers.", + "operationId": "HeadContentForRenditionOfRevisionOfDocument", + "tags": [ + "Document Content" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/pages" + }, + { + "$ref": "#/components/parameters/contentContext" + }, + { + "$ref": "#/components/parameters/height" + }, + { + "$ref": "#/components/parameters/width" + }, + { + "$ref": "#/components/parameters/fit" + }, + { + "$ref": "#/components/parameters/Accept" + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/Range" + } + ], + "responses": { + "200": { + "description": "Preview the result of the document content.", + "headers": { + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + } + }, + "206": { + "description": "Preview the result of content negotiation when the underlying\ncontent consists of multiple parts.", + "headers": { + "Content-Range": { + "$ref": "#/components/headers/Content-Range" + }, + "Accept-Ranges": { + "$ref": "#/components/headers/Accept-Ranges" + }, + "ETag": { + "$ref": "#/components/headers/ETag" + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "description": "Response for content when the document does not exist, a requested\npage does not exist, or the user does not have rights to access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The document does not exist, a requested page does not exist, or the user does not have rights to access.", + "instance": "/example-resource" + } + } + } + }, + "406": { + "$ref": "#/components/responses/406-GENERIC-RESPONSE" + }, + "412": { + "description": "Response for when a user is attempting to retrieve a byte range for\nspecific document and that document no longer exists or has been changed.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/precondition-failed", + "title": "Precondition Failed", + "status": 412, + "detail": "The request ETag: db43771c6daa4f4da95e6d747483452c is not valid.", + "instance": "/content" + } + } + } + }, + "416": { + "description": "Response for content when the specified range is not valid for the\ncontent or when the specified range requested is for more than one\npart.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/range-not-satisfiable", + "title": "Range not satisfiable", + "status": 416, + "detail": "The request Range bytes=1000-1100 is not valid.", + "instance": "/content" + } + } + } + } + } + } + }, + "/documents/queries": { + "post": { + "summary": "Submits a document query, with the provided search constraints.", + "description": "Submits a document query, with the provided search constraints.\n\nIf `Hyland-Include-Item-Count` header is set to true, the estimated number\nof documents that will be returned by the query will be included on the\nresponse in the `Hyland-Item-Count` header.\nEstimated because the number may vary in accuracy based on how the\nquery is formed, any filtering that takes places after the query is run, and\nif there are any external constraints.", + "operationId": "PostDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/Hyland-Include-Item-Count" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryInformation" + } + } + } + }, + "responses": { + "201": { + "description": "Query created. The location of the results of the query results\nis given in the Location header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueriesPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + }, + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + } + }, + "400": { + "$ref": "#/components/responses/400-GENERIC-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/documents/queries/{queryId}/results": { + "get": { + "summary": "Returns the documents results of a query.", + "description": "Returns the documents results of a query.", + "operationId": "GetResultCollectionForDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/queryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryResults" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/queries/{queryId}/columns": { + "get": { + "summary": "Returns the display column configuration of a query.", + "description": "Returns the display column configuration of a query.", + "operationId": "GetColumnCollectionForDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/queryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DisplayColumnConfigurationCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/uploads": { + "post": { + "summary": "Prepare the staging area to start the upload process.", + "description": "Prepares the staging area to start the upload.\nReturns a reference to the file being uploaded.", + "operationId": "PostFileUploadMetadata", + "tags": [ + "File Upload" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadFileMetaData" + } + } + } + }, + "responses": { + "201": { + "description": "Upload staging area created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "Invalid or missing file metadata. Such as missing extension\nor file or file part size that is less than or equal to zero.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "File Size cannot be negative.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/documents/uploads/{uploadId}": { + "put": { + "summary": "Upload file data.", + "description": "Upload file to a location identified by the unique file reference.\nThis end-point can be called multiple times, to upload multiple files.\nEach file will have it's own unique reference.\nWhen uploading a single file as chunks, upload it to the same file reference.", + "operationId": "PutFileUploadById", + "tags": [ + "File Upload" + ], + "parameters": [ + { + "$ref": "#/components/parameters/uploadId" + }, + { + "$ref": "#/components/parameters/filePart" + } + ], + "requestBody": { + "required": true, + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "responses": { + "204": { + "description": "Uploaded part has been successfully stored." + }, + "400": { + "description": "File part number is provided in incorrect format", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "File part number is provided in incorrect format", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "delete": { + "summary": "Delete file corresponding to the given uploadId", + "description": "Deletes an uploaded file corresponding to the given uploadId.\nThis can be used to cancel the upload.", + "operationId": "DeleteFileUploadById", + "tags": [ + "File Upload" + ], + "parameters": [ + { + "$ref": "#/components/parameters/uploadId" + } + ], + "responses": { + "204": { + "description": "File has been deleted." + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/notes/{noteId}": { + "get": { + "tags": [ + "Notes" + ], + "summary": "Get the information of a given note.", + "operationId": "GetNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "The identifier of the note.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to view this note.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to view this note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "patch": { + "tags": [ + "Notes" + ], + "summary": "Update the information of a given note.", + "operationId": "PatchNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "Id of the note to update.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Model containing the note data to update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotePropertiesModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The note was updated.", + "content": { + "application/json": { + "schema": { + "properties": { + "noteId": { + "description": "Identifier of the note.", + "type": "string" + } + } + } + } + } + }, + "400": { + "description": "The body of the request is not present or the note type of the note is unsupported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to update the note or\nthe document lock prevents the note from being updated or\nthe noteType is not movable.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to update the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + }, + "422": { + "description": "The note type is not movable.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/unprocessable", + "title": "Unprocessable Request", + "status": 422, + "detail": "Cannot change position, size or page number of Note ID on document ID because the noteType ID is not movable." + } + } + } + } + } + }, + "delete": { + "tags": [ + "Notes" + ], + "summary": "Delete a single note.", + "operationId": "DeleteNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "Id of the note to delete.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Note was deleted without any issues." + }, + "400": { + "description": "The note is a note type that is unsupported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to delete the note or\nthe document lock prevents the note from being deleted.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to delete the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/note-types": { + "get": { + "summary": "Get note type metadata for all note types.", + "description": "Get the note type metadata for all note types in\nthe system.", + "operationId": "GetNoteTypeCollection", + "tags": [ + "Note Types" + ], + "parameters": [ + { + "in": "query", + "name": "ids", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of note types. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteTypeCollectionModel" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/note-types/{noteTypeId}": { + "get": { + "summary": "Get note type metadata.", + "description": "Get note type metadata for the specified note type id.", + "operationId": "GetNoteTypeById", + "tags": [ + "Note Types" + ], + "parameters": [ + { + "name": "noteTypeId", + "in": "path", + "description": "The identifier of the note type.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteTypeModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + } + }, + "components": { + "securitySchemes": { + "Bearer": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "FileTypeCollection": { + "description": "An array of file types.", + "properties": { + "items": { + "description": "An array of file types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/FileType" + } + } + } + }, + "FileType": { + "description": "File type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the file type.", + "type": "string" + }, + "name": { + "description": "The localized name of the file type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the file type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + } + } + }, + "DefaultUploadFileType": { + "description": "File type metadata for default upload.", + "properties": { + "id": { + "description": "The unique identifier of the file type.", + "type": "string" + } + } + }, + "KeywordTypeGroupCollectionModel": { + "description": "A representation of keyword type information for a document type", + "properties": { + "keywordOptions": { + "$ref": "#/components/schemas/KeywordOptions" + }, + "items": { + "description": "An array of keyword types grouped by the keyword type group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroupOnDocumentType" + } + } + } + }, + "KeywordOptions": { + "description": "A group containing keyword type options in relation to the document type\nthey belong to.", + "properties": { + "requiredForArchivalKeywordTypeIds": { + "description": "An array of required keyword type ids for a document to be stored.", + "type": "array", + "items": { + "type": "string" + } + }, + "requiredForRetrievalKeywordTypeIds": { + "description": "An array of required keyword type ids for a document to be retrieved.", + "type": "array", + "items": { + "type": "string" + } + }, + "readOnlyKeywordTypeIds": { + "description": "An array of read only keyword type ids for a document type.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "KeywordTypeGroupOnDocumentType": { + "description": "Keyword type group metadata.", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the keyword type group. Omitted id indicates Standalone Keyword Group." + }, + "keywordTypes": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeOnDocumentType" + } + } + } + }, + "KeywordTypeOnDocumentType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "QueryInformation": { + "description": "Represents the information required to execute a query.", + "type": "object", + "properties": { + "queryType": { + "description": "An array of query types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/QueryType" + } + }, + "maxResults": { + "description": "Limits the number of results that the execution of\na query can create.", + "type": "integer", + "format": "int32" + }, + "queryKeywordCollection": { + "description": "An array of keywords used to execute a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/QueryKeyword" + } + }, + "documentDateRangeCollection": { + "description": "An array of date ranges used to execute a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DateRange" + } + }, + "userDisplayColumns": { + "description": "An array of user defined display columns. If the\nquery already has display columns defined, the predefined\ndisplay columns will be ignored and the user defined\ndisplay columns will be used.", + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDefinedDisplayColumn" + } + } + } + }, + "QueryType": { + "type": "object", + "required": [ + "type", + "ids" + ], + "description": "The type of query to execute. DocumentType, DocumentTypeGroup, and CustomQuery type queries are supported.\nSee the /custom-queries documentation for which CustomQuery types are supported.", + "properties": { + "type": { + "description": "The type of query to execute. DocumentType, DocumentTypeGroup, and CustomQuery type queries are supported.\nSee the /custom-queries documentation for which CustomQuery types are supported.", + "type": "string", + "enum": [ + "CustomQuery", + "DocumentType", + "DocumentTypeGroup" + ] + }, + "ids": { + "description": "An array of ids for the query", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "QueryKeyword": { + "type": "object", + "required": [ + "typeId", + "value" + ], + "description": "Represents a keyword required to execute a query.", + "properties": { + "typeId": { + "description": "The keyword type Id for the keyword.", + "type": "string" + }, + "value": { + "description": "The keyword value.", + "type": "string" + }, + "operator": { + "description": "Represents the operator for the keyword value of\nthis query keyword. Defaults to Equal if not present.", + "type": "string", + "enum": [ + "Equal", + "LessThan", + "GreaterThan", + "LessThanEqual", + "GreaterThanEqual", + "NotEqual", + "Literal" + ] + }, + "relation": { + "description": "Represents the relation of this query keyword to\nother query keywords. Defaults to And if not present.", + "type": "string", + "enum": [ + "And", + "Or", + "To" + ] + } + } + }, + "UserDefinedDisplayColumn": { + "type": "object", + "description": "Represents a DisplayColumn that the user has defined for this query.", + "properties": { + "keywordTypeId": { + "description": "The keyword type Id for the DisplayColumn. If the\nDisplayColumn is not of type Keyword, this property can be\nomitted and only the displayColumnType is required.", + "type": "string" + }, + "displayColumnType": { + "description": "The attribute type for the Display Column.", + "type": "string", + "enum": [ + "Keyword", + "DocumentId", + "DocumentName", + "DocumentDate", + "ArchivalDate", + "AuthorId", + "Batch", + "DocumentTypeGroup", + "DocumentTypeName" + ] + } + } + }, + "CurrencyFormat": { + "description": "Currency format metadata", + "properties": { + "id": { + "description": "The unique identifier of the currency format. Will be set to 'default' if\ncurrency is configured to use Workstation Regional Settings.", + "type": "string" + }, + "name": { + "description": "The name of the currency format.", + "type": "string" + }, + "currencySymbol": { + "description": "The symbol to represent the currency. For instance, the '$' in $1,000.00.", + "type": "string" + }, + "decimalPlaces": { + "description": "The number of decimal places represented after the decimal point.", + "type": "integer", + "format": "int64" + }, + "decimalSymbol": { + "description": "The symbol to represent the decimal place. For instance, the '.' in 100.00.", + "type": "string" + }, + "groupingDigits": { + "description": "The number of digits by which to group. Also the number of digits between grouping symbols. For instance, in\n$1,000,000.00 the number of grouping digits is 3.", + "type": "integer", + "format": "int64" + }, + "groupingSymbol": { + "description": "The symbol to represent the grouping of digits. For instance, the ',' in 1,000,000.00.", + "type": "string" + }, + "isoCurrencyName": { + "description": "The ISO name for the currency format if one exists.", + "type": "string" + }, + "hasCurrencySymbol": { + "description": "A value indicating whether the format allows for a currency symbols.", + "type": "boolean" + }, + "hasGroupSeparator": { + "description": "A value indicating whether a grouping symbol is specified. Ex. $9,999.00.", + "type": "boolean" + }, + "hasLeadingZero": { + "description": "A value indicating whether there is a leading zero.", + "type": "boolean" + }, + "hasMinusSign": { + "description": "A value indicating whether there is a a minus sign. If true, negativity is indicated with a minus sign \"-\". If\nfalse, negativity is indicated with parentheses around the value.", + "type": "boolean" + }, + "hasWhitespace": { + "description": "A value indicating whether there is a space between the currency symbol and positive values\nEx. $ 9.99\nEx. 9.99 $", + "type": "boolean" + }, + "hasWhitespaceOnNegative": { + "description": "A value indicating whether there is a space between the currency symbol and negative values. Ex. $ -9.99 Ex. -9.99 $.", + "type": "boolean" + }, + "isMinusSignAfter": { + "description": "A value indicating whether the minus is after the number. Only respected if hasMinusSign is also true.", + "type": "boolean" + }, + "isSymbolAfter": { + "description": "A value indicating whether the currency symbol goes after positive values\nEx. 9.99$.", + "type": "boolean" + }, + "isSymbolAfterOnNegative": { + "description": "A value indicating whether the currency symbol comes after the decimal value. Ex. 9.99$-.", + "type": "boolean" + }, + "isSymbolInsideNegative": { + "description": "A value indicating whether the Symbol goes inside the negative If MinusSign is false, SymbolInsideNegative is\nautomatically on. Ex. ($9.99), not $(9.99) If true, the currency symbol will come before the minus sign. Ex.\n9.99$- If false, the currency symbol will go after the minus sign. Ex. 9.99-$", + "type": "boolean" + } + } + }, + "CurrencyFormatCollection": { + "description": "An array of currency formats.", + "properties": { + "items": { + "description": "An array of currency formats.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CurrencyFormat" + } + } + } + }, + "CustomQuery": { + "description": "Custom query metadata", + "properties": { + "id": { + "description": "The unique identifier of the custom query.", + "type": "string" + }, + "name": { + "description": "The localized name of the custom query object", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the custom query.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "instructions": { + "description": "Information describing the usage and/or purpose of the custom query", + "type": "string" + }, + "dateOptions": { + "$ref": "#/components/schemas/CustomQueryDateSearchOptions" + }, + "queryType": { + "description": "The type of this custom query.\n\n`DocumentType` is a query configured to limit the results to preselected document type(s).\n\n`DocumentTypeGroup` is a query configured to limit the results to preselected document type group(s).\n\n`Keyword` is a query configured to limit the results to preselected keyword type(s).\n\n`SQL` is a query configured with a SQL statement.", + "type": "string", + "enum": [ + "DocumentType", + "DocumentTypeGroup", + "Keyword", + "SQL" + ] + } + } + }, + "CustomQueryDateSearchOptions": { + "description": "Date options set on a custom query", + "properties": { + "dateSearch": { + "description": "Date search option on the custom query", + "type": "string", + "enum": [ + "NoDate", + "SingleDate", + "DateRange" + ] + }, + "defaultDateRange": { + "$ref": "#/components/schemas/CustomQueryDefaultDateRange" + } + } + }, + "CustomQueryDefaultDateRange": { + "description": "Represents default date set on the custom query. This is set when date search option is set to 'SingleDate' or 'DateRange'.", + "properties": { + "start": { + "description": "Default start date.\nformat - date", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "end": { + "description": "Default end date.\nThis is equal to `defaultStartDate` if single date option is set as default.\nformat - date", + "type": "string", + "format": "date", + "example": "2018-02-21" + } + } + }, + "CustomQueryCollection": { + "description": "An array of custom queries.", + "properties": { + "items": { + "description": "An array of custom queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomQuery" + } + } + } + }, + "CustomQueryKeywordTypeCollection": { + "description": "A lightweight array of keyword types for custom queries.", + "properties": { + "items": { + "description": "An array of keyword type identifiers.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomQueryKeywordType" + } + } + } + }, + "CustomQueryKeywordType": { + "description": "Keyword type identifier", + "properties": { + "id": { + "description": "The unique identifier of the keyword type", + "type": "string" + } + } + }, + "DateRange": { + "description": "Represents a range of dates.", + "properties": { + "start": { + "description": "The starting date of the date range.\nIf no start date is present, a default minimum date will be used.", + "type": "string" + }, + "end": { + "description": "The ending date of the date range.\nIf no end date is present, a default maximum date will be used.", + "type": "string" + } + } + }, + "QueriesPostResponse": { + "description": "Query handle information corresponding to a query.", + "type": "object", + "properties": { + "id": { + "description": "Unique handle for the query", + "type": "string" + } + } + }, + "QueryResults": { + "description": "Represents the result of a query", + "properties": { + "items": { + "description": "An array of Documents returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentResult" + } + } + } + }, + "DocumentResult": { + "description": "Document metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document.", + "type": "string" + }, + "displayColumns": { + "description": "An array of Display columns returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DisplayColumn" + } + } + } + }, + "DisplayColumn": { + "description": "Display column values.", + "properties": { + "index": { + "description": "Index representing the Display column configuration\nassociated with this Display column.", + "type": "string" + }, + "values": { + "description": "An array of values for the Display Column.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DisplayColumnConfigurationCollection": { + "description": "Represents a collection of configurations of\na Display Column.", + "properties": { + "items": { + "description": "An array of Display Column Configurations returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DisplayColumnConfiguration" + } + } + } + }, + "DisplayColumnConfiguration": { + "description": "Represents the configuration of a Display Column.", + "properties": { + "index": { + "description": "Index representing the Display column configuration\nassociated with this Display column.", + "type": "integer", + "format": "int32" + }, + "type": { + "description": "Describes the type of Display Column. If the value is `Keyword` than the `keywordTypeId` will be populated as well.", + "type": "string", + "enum": [ + "Keyword", + "Attribute" + ] + }, + "heading": { + "description": "The Header value for the Display Column.", + "type": "string" + }, + "keywordTypeId": { + "description": "The Keyword Type associated with the Display Column.\nOnly necessary if the Display Column Type is \"Keyword\".", + "type": "string" + }, + "dataType": { + "description": "The Data Type of the value of the display column.\nThis is only necessary if the Display Column Type\nis not \"Keyword\". For Keyword Display Columns,\ndata type can be retrieved from the Keyword Type.", + "type": "string", + "enum": [ + "Numeric9", + "Numeric20", + "Alphanumeric", + "Currency", + "SpecificCurrency", + "Date", + "DateTime", + "FloatingPoint" + ] + } + } + }, + "KeywordValueRequest": { + "description": "A list of keyword values. Keyword values are represented as strings\nand blank keyword values are represented by an empty list of values.", + "properties": { + "value": { + "description": "Depending on the underlying keyword type datatype, the specific\nformat of the underlying string adheres to the following formatting\nrules.\n\nValues are normalized and locale specific formatting is not applied.\nFormatting to a specific currency is not applied. Consumers can\napply this formatting through libraries and client locale\npreferences. Determining data type or currency format\nis retrieved from other metadata resources.\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Data Type Format Example
Numeric9 A whole positive number up to 9 digits, or\n negative number up to 8 digits without commas.123456789
-12345678
Numeric20 A whole number up to 20 digits without\n commas, or a negative number with 19 digits without commas.12345678901234567890
-1234567890123456789
Alphanumeric A string value. ABC 123
Currency Positive or negative numeric value with a\n whole number and decimal portion separated by a period.123456.00
SpecificCurrency Positive or negative numeric value\n with a whole number and decimal portion separated by a\n period. 123456.00
Date ISO-8601\n Date 2018-02-21
DateTime ISO-8601 Date and\n time without time zone. 2018-02-21T21:17:28
FloatingPoint Positive or negative numeric value\n with a whole number and decimal portion separated by a\n period. 123456.091231
", + "type": "string" + }, + "currencyFormatId": { + "description": "The Currency Format Id if the Keyword Type's data type is Specific Currency.", + "type": "string" + } + } + }, + "KeywordValueResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/KeywordValueRequest" + } + ], + "properties": { + "formattedValue": { + "description": "A Keyword Value that has been formatted using locale specific formatting\nand Keyword Masking settings.", + "type": "string" + } + } + }, + "KeywordRequest": { + "description": "A keyword value and information about the related keyword type.", + "properties": { + "typeId": { + "description": "The unique identifier of the keyword type for this keyword value.", + "type": "string" + }, + "values": { + "description": "A List of keyword values that contain various formats of the keyword\nvalue.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordValueRequest" + } + } + } + }, + "KeywordResponse": { + "description": "A keyword value and information about the related keyword type.", + "properties": { + "typeId": { + "description": "The unique identifier of the keyword type for this keyword value.", + "type": "string" + }, + "values": { + "description": "A List of keyword values that contain various formats of the keyword\nvalue.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordValueResponse" + } + } + } + }, + "KeywordGroupRequest": { + "description": "A group of keyword values.", + "properties": { + "typeGroupId": { + "description": "The keyword type group identifier. This field will be omitted when\nnot associated with a `SingleInstance` or `MultiInstance` type\ngroup.", + "type": "string" + }, + "groupId": { + "description": "The identifier for the group of keywords. This field will be omitted\nwhen not associated with a `MultiInstance` type group. This field must be omitted\nif creating a new instance of a `MultiInstance` type group.", + "type": "string" + }, + "instanceId": { + "description": "The identifier used to track restricted keyword data and assign it to\nan instance of a 'MultiInstance' type group. This field is required for\nrestricted keyword values existing on a 'MultiInstance' type group and is provided\nby the GET Keywords on a document or GET Default Keywords response.", + "type": "string" + }, + "keywords": { + "description": "An array of keywords in the group.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordRequest" + } + } + }, + "required": [ + "keywords" + ] + }, + "KeywordGroupResponse": { + "description": "A group of keyword values.", + "properties": { + "typeGroupId": { + "description": "The keyword type group identifier. This field will be omitted when\nnot associated with a `SingleInstance` or `MultiInstance` type\ngroup.", + "type": "string" + }, + "groupId": { + "description": "The identifier for the group of keywords. This field will be omitted\nwhen not associated with a `MultiInstance` type group. This field must be omitted\nif creating a new instance of a `MultiInstance` type group.", + "type": "string" + }, + "instanceId": { + "description": "The identifier used to track restricted keyword data and assign it to\nan instance of a 'MultiInstance' type group.", + "type": "string" + }, + "keywords": { + "description": "An array of keywords in the group.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordResponse" + } + } + }, + "required": [ + "keywords" + ] + }, + "KeywordCollectionRequest": { + "description": "Instance data for keywords on a document", + "properties": { + "keywordGuid": { + "description": "Guid string to ensure integrity of restricted keyword values.", + "type": "string" + }, + "items": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordGroupRequest" + } + } + }, + "required": [ + "keywordGuid", + "items" + ] + }, + "KeywordCollectionResponse": { + "description": "Instance data for keywords on a document", + "properties": { + "keywordGuid": { + "description": "Guid string to ensure integrity of restricted keyword values.", + "type": "string" + }, + "items": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordGroupResponse" + } + } + }, + "required": [ + "keywordGuid", + "items" + ] + }, + "DocumentCollection": { + "description": "A list of documents.", + "properties": { + "items": { + "description": "An array of documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "Document": { + "description": "Document metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document.", + "type": "string" + }, + "typeId": { + "description": "The unique identifier of the document type for this document.", + "type": "string" + }, + "name": { + "description": "The auto name string for this document.", + "type": "string" + }, + "createdByUserId": { + "description": "The unique identifier of the user that created this document.", + "type": "string" + }, + "storedDate": { + "description": "The date/time this document was stored.\nISO-8601 Date and\n time without time zone.", + "type": "string", + "example": "2018-02-21T21:17:28" + }, + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "status": { + "description": "The document status of Active, Deleted or Inactive.", + "type": "string", + "enum": [ + "Active", + "Deleted", + "Inactive" + ] + }, + "captureProperties": { + "description": "Meta-data information about the document that was brought in via scanning.", + "$ref": "#/components/schemas/CaptureProperties" + } + } + }, + "DocumentHistory": { + "properties": { + "items": { + "description": "An array of history items.", + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryItem" + } + } + } + }, + "HistoryItem": { + "properties": { + "action": { + "description": "The action taken on the document", + "type": "string" + }, + "logDate": { + "description": "The date/time this document action was logged.\nISO-8601 Date and\n time with milliseconds and without time zone.", + "type": "string", + "example": "2022-08-01T07:36:13.007" + }, + "message": { + "description": "The logged message.", + "type": "string" + }, + "userId": { + "description": "The user under which action was taken.", + "type": "string" + } + } + }, + "DocumentPatchRequest": { + "description": "Metadata that can be modified on a document.", + "properties": { + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + } + } + }, + "CaptureProperties": { + "description": "Meta-data information about the document that was brought in via scanning.", + "properties": { + "unidentified": { + "description": "Indicates if the document is unidentified.", + "type": "boolean" + }, + "reviewStatus": { + "description": "The review status of NeedsAttention, NeedsRescan or NeedsManagerAttention. This should be used in conjunction with the `unidentified` property.", + "type": "string", + "enum": [ + "NeedsAttention", + "NeedsRescan", + "NeedsManagerAttention" + ] + } + } + }, + "DocumentsPostResponse": { + "description": "Document handle information corresponding to a document.", + "type": "object", + "properties": { + "id": { + "description": "Unique handle for the document", + "type": "string" + } + } + }, + "MatchedDocumentCollectionResponse": { + "description": "List of matching documents along with the options available for each when archiving into a Revisable/Renditionable document type.", + "properties": { + "canAddAsNew": { + "description": "Boolean to indicate if the document can be stored as a new document.\nTo continue adding the document as a new document, a POST request to '/documents' end-point must be made with 'storeAsNew' property set to 'true' in 'DocumentArchiveProperties'.", + "type": "boolean" + }, + "items": { + "description": "List of matching documents along with the options available for each.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MatchedDocument" + } + } + } + }, + "MatchedDocument": { + "description": "A Revisable/Renditionable document that matched along with the options available to archive.", + "type": "object", + "properties": { + "id": { + "description": "Id of the Revisable/Renditionable document that matched.", + "type": "string" + }, + "canAddAsRevision": { + "description": "Boolean indicating if the document can be added as a revision.\nTo add the document as a new revision, a POST request to '/documents/{id}/revisions' must me made.", + "type": "boolean" + }, + "canAddAsRendition": { + "description": "Boolean indicating if the document can be added as a rendition.\nTo add the document as a rendition, a POST request to '/documents/{id}/revisions/latest' must be made.", + "type": "boolean" + } + } + }, + "RevisionsPostResponse": { + "description": "Id of the newly created revision.", + "properties": { + "revisionId": { + "description": "Latest revision Id.", + "type": "string" + } + } + }, + "RenditionsPostResponse": { + "description": "Id of the newly created rendition, which is the File Type Id.", + "properties": { + "fileTypeId": { + "description": "File Type Id.", + "type": "string" + } + } + }, + "DocumentType": { + "description": "Document Type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document type.", + "type": "string" + }, + "name": { + "description": "The localized name of the document type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the document type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "defaultFileTypeId": { + "description": "The unique identifier of the default file format for the document type", + "type": "string" + }, + "documentDateDisplayName": { + "description": "The document date display name setting for the document type", + "type": "string" + }, + "autofillKeywordSetId": { + "description": "The Id of the autofill keyset associated with this document type, if any.", + "type": "string" + }, + "documentTypeGroupId": { + "description": "The id of the document type group the document type is assigned to.", + "type": "string" + }, + "revisionRenditionProperties": { + "description": "Revision/Rendition properties of the document type.", + "type": "object", + "$ref": "#/components/schemas/RevisionRenditionProperties" + } + } + }, + "RevisionRenditionProperties": { + "description": "Revision/Rendition settings of the document type.", + "properties": { + "revisable": { + "description": "Indicates if the document type is revisable", + "type": "boolean" + }, + "renditionable": { + "description": "Indicates if the document is renditionable", + "type": "boolean" + }, + "commentSettings": { + "description": "Comment settings on the document type", + "type": "object", + "$ref": "#/components/schemas/DocumentTypeCommentSettings" + } + } + }, + "DocumentTypeCommentSettings": { + "description": "Settings for comments on the document type.", + "properties": { + "allowComments": { + "description": "True if the document type is set to \"Allow Comments\", false otherwise.", + "type": "boolean" + }, + "forceComment": { + "description": "True if the document type is set to \"Force Comment\".", + "type": "boolean" + }, + "firstRevisionNoComment": { + "description": "True if document type is set to \"Save first revision with no comment\"", + "type": "boolean" + } + } + }, + "DocumentTypeCollection": { + "description": "An array of document types.", + "properties": { + "items": { + "description": "An array of document types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentType" + } + } + } + }, + "DocumentTypeGroup": { + "description": "Document Type Group metadata", + "properties": { + "id": { + "description": "The unique identifier of the document type group.", + "type": "string" + }, + "name": { + "description": "The localized name of the document type group.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the document type group.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + } + } + }, + "DocumentTypeGroupCollection": { + "description": "An array of document type groups.", + "properties": { + "items": { + "description": "An array of document type groups", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentTypeGroup" + } + } + } + }, + "DocumentTypeGroupDocumentType": { + "description": "Document type identifier", + "properties": { + "id": { + "description": "The unique identifier of the document type", + "type": "string" + } + } + }, + "DocumentTypeGroupDocumentTypeCollection": { + "description": "A lightweight array of document types associated with a document type group", + "properties": { + "items": { + "description": "An array of document type identifiers.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentTypeGroupDocumentType" + } + } + } + }, + "DocumentReindexProperties": { + "description": "Metadata that can be modified on a document.", + "properties": { + "targetDocumentTypeId": { + "description": "The document type id to be reindexed into.", + "type": "string" + }, + "targetFileTypeId": { + "description": "The file type id to be reindexed into. This is only necessary if attempting to change the\nfile type ID of the default rendition of the latest revision.", + "type": "string" + }, + "storeAsNew": { + "description": "Boolean indicating if the document should be reindexed as specified.\nThis should be used in conjunction with a Revisable/Renditionable document type to\nindicate that the document should be reindexed as specified regardless of the document type\nsettings for revisions and renditions.\nThis would be considered false by default and if it's a Revisable/Renditionable document type,\nexisting documents are checked to find matching documents for which this new document can be\nadded as a Revision/Rendition.", + "type": "boolean" + }, + "comment": { + "description": "The revision comment that will be saved during reindex if the document is\nrevisiable.", + "type": "string" + }, + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "keywordCollection", + "targetDocumentTypeId" + ] + }, + "RevisionReindexProperties": { + "description": "Meta-data information required to reindex as revision", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "The revision comment that will be saved during reindex if the document\nis revisiable.", + "type": "string" + }, + "sourceDocumentId": { + "description": "The document id of the document that is being reindexed as a new revision.", + "type": "string" + }, + "appendNewRevision": { + "description": "A value indicating whether to append the source document at the end of the target document.\nOnly the image file type supports this option.", + "type": "boolean" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "sourceDocumentId", + "keywordCollection" + ] + }, + "RenditionReindexProperties": { + "description": "Meta-data information required to reindex as rendition", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "The rendition comment that will be saved during reindex if the document\nis revisiable.", + "type": "string" + }, + "targetFileTypeId": { + "description": "The file type id that the document will be reindexed to. If the file type does not need to be changed,\nthen this property does not need to be passed in.", + "type": "string" + }, + "sourceDocumentId": { + "description": "The document id of the document that is being reindexed as a new rendition.", + "type": "string" + }, + "appendPages": { + "description": "A value indicating whether to append the source document at the end of the target document.\nOnly the image file type supports this option.", + "type": "boolean" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "sourceDocumentId", + "keywordCollection" + ] + }, + "DocumentArchiveProperties": { + "description": "Meta-data information required to upload documents", + "properties": { + "documentTypeId": { + "description": "The Id of the document type to store the document into", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the file Type for the document.", + "type": "string" + }, + "storeAsNew": { + "description": "Boolean indicating if the document should be stored as a new document.\nThis should be used in conjunction with a Revisable/Renditionable document type to indicate that the document should be stored as a new document regardless of the settings.\nThis would be considered false by default and if it's a Revisable/Renditionable document type, existing documents are checked to find matching documents for which this new document can be added as a Revision/Rendition.", + "type": "boolean" + }, + "comment": { + "description": "Comments if the document type is Revisable/Renditionable.", + "type": "string" + }, + "documentDate": { + "description": "Document's date", + "type": "string", + "format": "date", + "example": "2018-08-21" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "documentTypeId", + "uploads", + "keywordCollection" + ] + }, + "RevisionArchiveProperties": { + "description": "Meta-data information required to upload revision", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "Comment for the revision", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the File Type for the document. If File Type Id is not provided, Document Type's default File Type will be used.", + "type": "string" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "uploads" + ] + }, + "RenditionArchiveProperties": { + "description": "Meta-data information required to upload rendition", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "Comment for the rendition", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the File Type for the document. If a File Type Id is not provided, then the Document Type's default File Type ID will be used. If the revision already contains the File Type Id then 400 Bad Request will be returned.", + "type": "string" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "uploads" + ] + } + ] + }, + "Upload": { + "description": "Reference to an uploaded file.", + "type": "object", + "properties": { + "id": { + "description": "Unique file reference", + "type": "string" + } + } + }, + "UploadsPostResponse": { + "description": "Unique file reference corresponding to the uploaded file.", + "type": "object", + "properties": { + "id": { + "description": "Unique reference for the uploaded file", + "type": "string" + }, + "filePartSize": { + "description": "Size in bytes of the file parts that will be uploaded. All file parts except the last one must be of size filePartSize. Last part will be either less than or equal to filePartSize.", + "type": "integer", + "format": "int32" + }, + "numberOfParts": { + "description": "Total number of parts a file must be divided into when uploading. This must be used in conjunction with filePartSize.", + "type": "integer", + "format": "int32" + } + } + }, + "UploadFileMetaData": { + "description": "Meta-data information about the file being uploaded.", + "properties": { + "fileExtension": { + "description": "Extension of the file being uploaded. The extension does not need a leading period `.`", + "type": "string" + }, + "fileSize": { + "description": "Size of the file in bytes. Recommended maximum size of a file is 4GB, but the maximum size is only limited by the programming language being used and the host's file system.", + "type": "integer", + "format": "int64" + } + }, + "required": [ + "fileExtension", + "fileSize" + ] + }, + "Revision": { + "description": "Revision metadata", + "properties": { + "id": { + "description": "The unique identifier of the revision.", + "type": "string" + }, + "revisionNumber": { + "description": "The revision number for display purposes and provide ordering of revisions.", + "type": "integer", + "format": "int32" + } + } + }, + "RevisionCollection": { + "description": "An Array of revisions.", + "properties": { + "items": { + "description": "The unique identifier of the revisions.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Revision" + } + } + } + }, + "Rendition": { + "description": "Rendition metadata", + "properties": { + "fileTypeId": { + "description": "The unique identifier of the rendition.", + "type": "string" + }, + "created": { + "description": "The date the rendition was stored.", + "type": "string" + }, + "pageCount": { + "description": "The number of pages in the rendition.", + "type": "integer", + "format": "int32" + }, + "createdByUserId": { + "description": "The user ID of the revision creator.", + "type": "string" + }, + "comment": { + "description": "A comment for the revision.", + "type": "string" + } + } + }, + "RenditionCollection": { + "description": "An Array of renditions.", + "properties": { + "items": { + "description": "An array of Renditions", + "type": "array", + "items": { + "$ref": "#/components/schemas/Rendition" + } + } + } + }, + "Problem-Detail-Locking-Error": { + "type": "object", + "description": "The Problem Detail\nformat defines a way to carry machine-readable details of errors in a\nHTTP response to avoid the need to define new error response formats for\nHTTP APIs.\n\nProblem details can be extended and defined for specific\nproblem types.", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "An absolute URI that identifies the problem type. When\ndereferenced, it should provide human-readable documentation\nfor the problem type (e.g., using HTML)." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the problem type. It should\nnot change from occurrence to occurrence of the problem." + }, + "status": { + "type": "integer", + "format": "int32", + "description": "The HTTP status code generated by the origin server for this\noccurrence of the problem.", + "minimum": 100, + "maximum": 600, + "exclusiveMaximum": true + }, + "detail": { + "type": "string", + "description": "A human readable explanation specific to this occurrence of the\nproblem." + }, + "instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of\nthe problem. It may or may not yield further information\nif dereferenced." + }, + "lockInfo": { + "$ref": "#/components/schemas/LockInfo" + } + } + }, + "LockInfo": { + "type": "object", + "description": "Information on a lock that has been put on an item.", + "properties": { + "lockedByUserId": { + "type": "string", + "description": "A unique identifier of the user that holds the lock on this item." + }, + "lockType": { + "$ref": "#/components/schemas/LockType" + }, + "currentLock": { + "$ref": "#/components/schemas/DocumentLockStatus" + } + }, + "example": { + "lockInfo": { + "lockedByUserId": "103", + "lockType": "Keywords", + "currentLock": "DocumentCheckoutInSameSession" + } + } + }, + "LockInfoCollection": { + "description": "A collection of LockInfo objects.", + "properties": { + "items": { + "description": "A collection of LockInfo objects.", + "type": "array", + "items": { + "$ref": "#/components/schemas/LockInfo" + } + } + } + }, + "DocumentLockStatus": { + "description": "The type of lock which is currently locking the document.", + "type": "string", + "enum": [ + "DocumentLock", + "DocumentCheckout", + "DocumentCheckoutInSameSession", + "Persistent", + "Process" + ] + }, + "LockType": { + "description": "The type of lock to retrieve.\nCurrently, only keyword locks are supported.", + "type": "string", + "enum": [ + "Keywords" + ] + }, + "Binary-Content": { + "description": "Binary content in the request or response for file uploads and downloads.", + "type": "string", + "format": "binary" + }, + "KeywordTypeCollection": { + "description": "An array of keyword types.", + "properties": { + "items": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordType" + } + } + } + }, + "KeywordType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the keyword type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the keyword type. This value is localized.", + "type": "string" + }, + "dataType": { + "description": "Describes the type of data represented by the keyword type.\n\n`Numeric9` represents a number up to 9 digits in length.\n\n`Numeric20` represents a number up to 20 digits in length.\n\n`Alphanumeric` represents any value with letters and/or numbers.\n\n`Currency` represents a monetary value. The currency format used is\n'built-in' to the keyword type.\n\n`SpecificCurrency` represents a monetary value and allows multiple\n currency formats to be used with the same keyword type.\n\n`Date` represents a date.\n\n`DateTime` represents both a date and a time.\n\n`FloatingPoint` represents numeric values that have variable decimal\n point locations.", + "type": "string", + "enum": [ + "Numeric9", + "Numeric20", + "Alphanumeric", + "Currency", + "SpecificCurrency", + "Date", + "DateTime", + "FloatingPoint" + ] + }, + "usedForRetrieval": { + "description": "Classification to determine if the keyword type is used for document retrieval.", + "type": "boolean" + }, + "invisible": { + "description": "Indicates if the keyword type should be made invisible in UI contexts.", + "type": "boolean" + }, + "alphanumericSettings": { + "$ref": "#/components/schemas/AlphanumericSettings" + }, + "currencyFormatId": { + "description": "The Currency Format Id if the Keyword Type's data type is Currency. If Specific Currency, this\nwill be the default currency format id set on the Specific Currency Keyword Type. When Regional Workstation\nSettings is used an id of 'default' is used.", + "type": "string" + }, + "isSecurityMasked": { + "description": "A value indicating whether the keyword type is configured for security masking.\nWhen the value is true and the keyword values have not been unmasked,\nthe corresponding keyword value should be treated as readonly.", + "type": "boolean" + }, + "maskSettings": { + "$ref": "#/components/schemas/KeywordTypeMaskSettings" + } + } + }, + "KeywordTypeMaskSettings": { + "description": "Masking settings for a particular keyword type.", + "properties": { + "fullFieldRequired": { + "description": "A value indicating whether the keyword type required the entire field filled out.", + "type": "boolean" + }, + "maskString": { + "description": "A value that specifies the mask string for a masked keyword type.", + "type": "string" + }, + "staticCharacters": { + "description": "The configured static characters for the keyword mask.", + "type": "string" + }, + "storeMask": { + "description": "A value indicating whether the mask should be stored to the database or stripped.", + "type": "boolean" + } + } + }, + "AlphanumericSettings": { + "description": "Configuration settings for alphanumeric keyword types.", + "properties": { + "caseOptions": { + "description": "The character case option for keyword values of this keyword type.\n\n`Uppercase` keyword values are stored using only uppercase characters.\n\n`MixedCase` keyword values are stored using upper and lower case characters.", + "type": "string", + "enum": [ + "Uppercase", + "MixedCase" + ] + }, + "maximumLength": { + "description": "The maximum number of characters allowed by the keyword type.", + "type": "integer", + "format": "int64" + }, + "storageOptions": { + "description": "The database storage method used for keyword values of this keyword type.\n\n`SingleTable` indicates keyword values are stored in a single database table.\n\n`DualTable` indicates keyword values are stored in two database tables.", + "type": "string", + "enum": [ + "SingleTable", + "DualTable" + ] + } + } + }, + "KeywordTypeGroupCollection": { + "description": "An array of keyword type groups.", + "properties": { + "items": { + "description": "An array of keyword type groups.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroup" + } + } + } + }, + "KeywordTypeGroup": { + "description": "Keyword type group metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type group.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the keyword type group.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the keyword type group. This value is localized.", + "type": "string" + }, + "storageType": { + "description": "The type of storage for the keyword type group.\n\n`SingleInstance` represents a set of keyword types that will appear\nonly once and are associated with a specific group type. Each single\ninstance keyword type may have only one value instance.\n\n`MultiInstance` represents a set of keyword types that can appear\nmultiple times as a related instance. Each multiple instance keyword\ntype may have only one value instance within a particular group.", + "type": "string", + "enum": [ + "SingleInstance", + "MultiInstance" + ] + } + } + }, + "KeywordTypeGroupKeywordTypeCollection": { + "description": "A list of keyword types grouped by the keyword type group they belong to.", + "properties": { + "items": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroupKeywordType" + } + } + } + }, + "KeywordTypeGroupKeywordType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "AutoFillKeywordSetCollection": { + "description": "An array of autofill keyword sets.", + "properties": { + "items": { + "description": "An array of autofill keyword sets.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSet" + } + } + } + }, + "AutoFillKeywordSet": { + "description": "Autofill keyword set metadata.", + "properties": { + "id": { + "description": "The unique identifier of the autofill keyword set.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the autofill keyword set.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the autofill keyword set. This value is localized.", + "type": "string" + }, + "primaryKeywordTypeId": { + "description": "The keyword type id of the autofill keyword set's primary key.", + "type": "string" + }, + "external": { + "description": "Indicates that the autofill keyword set is external.", + "type": "boolean" + } + } + }, + "AutoFillKeywordSetKeywordTypeCollection": { + "description": "A representation of keyword type information for a autofill type.", + "properties": { + "items": { + "description": "A lightweight array of keyword types associated with an auto fill keyword set.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeywordType" + } + } + } + }, + "AutoFillKeywordSetKeywordType": { + "description": "Keyword type identifier", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + } + }, + "KeywordSetDataCollection": { + "description": "An array of autofill keyword set data.", + "properties": { + "items": { + "description": "An array of autofill keyword set data.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordSetData" + } + } + } + }, + "KeywordSetData": { + "description": "A collection of autofill keyword set keyword data.", + "properties": { + "id": { + "description": "The unique identifier of the autofill keyword set data.", + "type": "string" + }, + "keywords": { + "description": "An array of keyword values associated with an auto fill keyword set data object.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeyword" + } + } + } + }, + "AutoFillKeywordSetKeyword": { + "description": "Autofill keyword set keyword data.", + "properties": { + "typeId": { + "description": "The keyword type id.", + "type": "string" + }, + "value": { + "description": "The keyword value.", + "type": "string" + } + } + }, + "AutoFillMultipleMatchesResponse": { + "description": "A collection of AutoFill Keyword Set Data Set items that match a Primary\nKeyword value.", + "properties": { + "autoFillKeywordSetData": { + "description": "An array of autofill keyword set data.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordSetData" + } + }, + "selectMultiple": { + "description": "A value indicating whether multiple AutoFill Keyword Set Data Set selection\nis allowed.", + "type": "boolean" + } + } + }, + "IndexingModifiersPostResponse": { + "description": "Result Keyword Collection.", + "properties": { + "keywordCollection": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + }, + "ReindexAutoFillExpansionModifierProperties": { + "description": "The properties required to perform AutoFill Keyword Set expansion.", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "documentId": { + "description": "The ID of the Document containing the keywords.", + "type": "string" + }, + "targetDocumentTypeId": { + "description": "The ID of the target Document Type containing the keywords being modified. This is the\ntarget Document Type during the Reindex process.", + "type": "string" + } + } + }, + { + "$ref": "#/components/schemas/AutoFillExpansionProperties" + } + ], + "required": [ + "documentId", + "targetDocumentTypeId" + ] + }, + "ArchivalAutoFillExpansionModifierProperties": { + "description": "The properties required to perform AutoFill Keyword Set expansion.", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "documentTypeId": { + "description": "The ID of the Document Type containing the keywords being modified. This is the document\ntype that the document is going to be archived into.", + "type": "string" + } + } + }, + { + "$ref": "#/components/schemas/AutoFillExpansionProperties" + } + ], + "required": [ + "documentTypeId" + ] + }, + "AutoFillExpansionProperties": { + "description": "Properties that are required during AutoFill expansion regardless of method of expansion.", + "properties": { + "autoFillKeywordSetDataIds": { + "description": "If selection is required for expansion to occur, the list of AutoFill Keyword\nSet Data Set Ids that the server will expand.", + "type": "array", + "items": { + "description": "AutoFill Keyword Set Data Set Id", + "type": "string" + } + }, + "autoFillKeywordSetPrimaryKeyword": { + "description": "The Primary Keyword value of the AutoFill Keyword Set.", + "$ref": "#/components/schemas/AutoFillKeywordSetKeyword" + }, + "keywordCollection": { + "$ref": "#/components/schemas/KeywordCollectionRequest" + }, + "keywordGroupIndex": { + "description": "If any Keyword Types configured for an AutoFill Keyword Set are part of\na MultiInstance Keyword Group, a index that relates to the order of\nMultiInstance Keyword Group passed in is required. Example. If expanding\ninto a MultiInstance Group that has 3 instances, and the second one is the desired\ngroup to be updated, 2 should be passed in.", + "type": "integer", + "format": "int32" + } + }, + "required": [ + "autoFillKeywordSetPrimaryKeyword", + "keywordCollection" + ] + }, + "AddNotePropertiesModel": { + "properties": { + "noteTypeId": { + "description": "The id of the note type.", + "type": "string" + }, + "page": { + "description": "The page the note is on. This defaults to 1 if not present.", + "type": "integer", + "format": "int64" + }, + "x": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/YCoordinate" + }, + "width": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/NoteHeight" + }, + "text": { + "description": "The text in the note.\nThis defaults to the configured note type default text if not present.", + "type": "string" + } + }, + "required": [ + "noteTypeId" + ] + }, + "UpdateNotePropertiesModel": { + "properties": { + "position": { + "$ref": "#/components/schemas/UpdateNotePositionModel" + }, + "size": { + "$ref": "#/components/schemas/UpdateNoteSizeModel" + }, + "text": { + "description": "The text in the note.", + "type": "string" + } + } + }, + "NotePrivileges": { + "properties": { + "canModify": { + "type": "boolean", + "description": "A value indicating if the note can be updated." + }, + "canDelete": { + "type": "boolean", + "description": "A value indicating if the note can be deleted." + }, + "canUpdatePrivacyOptions": { + "type": "boolean", + "description": "A value indicating if the user is allowed to update privacy options." + } + } + }, + "NoteCollectionModel": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteModel" + } + } + } + }, + "NoteModel": { + "properties": { + "id": { + "description": "The unique id of the note.", + "type": "string" + }, + "noteTypeId": { + "description": "The note type identifier of the note.", + "type": "string" + }, + "title": { + "description": "The title of the note.", + "type": "string" + }, + "text": { + "description": "The text in the note.", + "type": "string" + }, + "createdByUserId": { + "description": "The unique id of the user this note was created by.", + "type": "string" + }, + "created": { + "description": "The date the note was created.", + "type": "string" + }, + "documentId": { + "description": "The unique id of the document the note is affiliated with.", + "type": "string" + }, + "documentRevisionId": { + "description": "The revision number that the note is affiliated with.", + "type": "string" + }, + "page": { + "description": "The page the note is on.", + "type": "integer", + "format": "int64" + }, + "x": { + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "$ref": "#/components/schemas/YCoordinate" + }, + "width": { + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "$ref": "#/components/schemas/NoteHeight" + }, + "privileges": { + "description": "The user's privileges for the note.", + "$ref": "#/components/schemas/NotePrivileges" + }, + "displayFlags": { + "description": "The flag values set for the note.", + "$ref": "#/components/schemas/NoteDisplayFlags" + } + } + }, + "XCoordinate": { + "description": "The x coordinate of the note.\nThe x coordinate on image documents is given in pixels from the left side.\nThe x coordinate on text documents is given in number of characters from the left side.", + "type": "integer", + "format": "int32" + }, + "YCoordinate": { + "description": "The y coordinate of the note.\nThe y coordinate on image documents is given in pixels from the top.\nThe y coordinate on text documents is given in number of lines from the top.", + "type": "integer", + "format": "int32" + }, + "NoteWidth": { + "description": "The width of the note.\nThe width on image documents is given in pixels.\nThe width on text documents is given in number of characters.", + "type": "integer", + "format": "int32" + }, + "NoteHeight": { + "description": "The height of the note.\nThe height on image documents is given in pixels.\nThe height on text documents is given in number of lines.", + "type": "integer", + "format": "int32" + }, + "NoteTypeCollectionModel": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteTypeModel" + } + } + } + }, + "NoteTypeModel": { + "type": "object", + "description": "Note type metadata.", + "properties": { + "color": { + "$ref": "#/components/schemas/Color" + }, + "displayFlags": { + "description": "Note type display metadata.", + "$ref": "#/components/schemas/NoteTypeDisplayFlags" + }, + "flavor": { + "type": "string", + "description": "The style of the note type.", + "enum": [ + "Note", + "Highlight", + "Arrow", + "Ellipse", + "OverlappedText", + "IconStamp" + ] + }, + "fontId": { + "description": "The id of the font used with the note type.", + "type": "string" + }, + "iconId": { + "description": "The id of the icon used with the note type.", + "type": "string" + }, + "id": { + "description": "The id of the note type.", + "type": "string" + }, + "name": { + "description": "The localized name of the note type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the note type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "userPrivileges": { + "description": "User privileges for the note type.", + "$ref": "#/components/schemas/NoteTypeUserPrivileges" + } + } + }, + "Color": { + "type": "object", + "description": "The color of the note type.", + "properties": { + "r": { + "type": "string", + "description": "The red(R) component of a color." + }, + "g": { + "type": "string", + "description": "The green(G) component of a color." + }, + "b": { + "type": "string", + "description": "The blue(B) component of a color." + }, + "a": { + "type": "string", + "description": "The alpha(A) component of a color." + } + } + }, + "NoteTypeDisplayFlags": { + "type": "object", + "description": "Note type display metadata.", + "properties": { + "allPages": { + "type": "boolean", + "description": "A value indicating whether the note type should be repeated on all pages." + }, + "allRevisions": { + "type": "boolean", + "description": "A value indicating whether the note type should appear on all revisions." + }, + "createOpenNoteWindow": { + "type": "boolean", + "description": "A value indicating whether a note created from this note type should display open when creation is completed." + }, + "deleteWithPage": { + "type": "boolean", + "description": "A value indicating whether a note associated with this note type should be deleted when the page the note is on is deleted." + }, + "floatOnWindow": { + "type": "boolean", + "description": "A value indicating that notes associated with this note type should not be bound to the document." + }, + "hideNoteWindow": { + "type": "boolean", + "description": "A value indicating whether a note created from this note type should be hidden." + }, + "moveable": { + "type": "boolean", + "description": "A value indicating the note associated with this note type should be movable." + }, + "noPrivacyOptions": { + "type": "boolean", + "description": "A value indicating the note type should not allow privacy options to be set on a note." + }, + "open": { + "type": "boolean", + "description": "A value indicating the note associated with this note type should be displayed open." + }, + "privacyNoDelete": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can delete the note." + }, + "privacyNoModify": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can modify the note." + }, + "privacyNoView": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can view the note." + }, + "stampKeepOriginalSize": { + "type": "boolean", + "description": "A value indicating that Icon Stamps cannot have their icons resized." + }, + "stampTransparent": { + "type": "boolean", + "description": "A value indicating that Icon Stamps are transparent." + } + } + }, + "NoteTypeUserPrivileges": { + "type": "object", + "properties": { + "create": { + "type": "boolean", + "description": "A value indicating whether the user can create a note of the note type." + }, + "view": { + "type": "boolean", + "description": "A value indicating whether the user can view a note of the note type." + } + } + }, + "NoteDisplayFlags": { + "type": "object", + "description": "Note display metadata.", + "properties": { + "allowView": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can view the note." + }, + "allowModify": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can modify the note." + }, + "allowDelete": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can delete the note." + } + } + }, + "NotesPostResponse": { + "description": "Id of the newly created note.", + "properties": { + "noteId": { + "description": "Identifier of the note.", + "type": "string" + } + } + }, + "UpdateNotePositionModel": { + "description": "Model containing position metadata to update the note with.", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "$ref": "#/components/schemas/YCoordinate" + } + } + }, + "UpdateNoteSizeModel": { + "description": "Model containing size metadata to update the note with.", + "required": [ + "width", + "height" + ], + "properties": { + "width": { + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "$ref": "#/components/schemas/NoteHeight" + } + } + }, + "Problem-Detail": { + "type": "object", + "description": "The Problem Detail\nformat defines a way to carry machine-readable details of errors in a\nHTTP response to avoid the need to define new error response formats for\nHTTP APIs.\n\nProblem details can be extended and defined for specific\nproblem types.", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "An absolute URI that identifies the problem type. When\ndereferenced, it should provide human-readable documentation\nfor the problem type (e.g., using HTML)." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the problem type. It should\nnot change from occurrence to occurrence of the problem." + }, + "status": { + "type": "integer", + "format": "int32", + "description": "The HTTP status code generated by the origin server for this\noccurrence of the problem.", + "minimum": 100, + "maximum": 600, + "exclusiveMaximum": true + }, + "detail": { + "type": "string", + "description": "A human readable explanation specific to this occurrence of the\nproblem." + }, + "instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of\nthe problem. It may or may not yield further information\nif dereferenced." + } + } + }, + "DiscriminatorObject": { + "type": "object", + "description": "The generic type with a discriminator property, which is an object type name\nthat is used to differentiate between other schemas which may satisfy\nthe payload description.", + "properties": { + "objectType": { + "type": "string", + "description": "The object type of the schema specified for the request body or used for the response payload. " + } + } + } + }, + "parameters": { + "acceptImageHeader": { + "name": "Accept", + "in": "header", + "description": "The Accept request HTTP header advertises which content types,\nexpressed as MIME types, the client is able to understand. Using\ncontent negotiation, the server then selects one of the proposals,\nuses it and informs the client of its choice with the `Content-Type`\nresponse header.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "image/png", + "image/jpeg", + "image/tiff", + "image/svg+xml", + "text/plain", + "text/html", + "application/pdf", + "application/x-isys-docpack" + ] + } + }, + "documentTypeId": { + "description": "The unique identifier of a document type.", + "name": "documentTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "documentTypeGroupId": { + "description": "The unique identifier of a document type group", + "name": "documentTypeGroupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "documentId": { + "name": "documentId", + "in": "path", + "description": "The unique identifier of a document.", + "required": true, + "schema": { + "type": "string" + } + }, + "queryId": { + "name": "queryId", + "in": "path", + "description": "The unique identifier of a query.", + "required": true, + "schema": { + "type": "string" + } + }, + "currencyFormatId": { + "name": "currencyFormatId", + "in": "path", + "description": "The unique identifier of a currency format.", + "required": true, + "schema": { + "type": "string" + } + }, + "customQueryId": { + "name": "customQueryId", + "in": "path", + "description": "The unique identifier of a custom query.", + "required": true, + "schema": { + "type": "string" + } + }, + "fileTypeId": { + "description": "The unique identifier of a file type.", + "name": "fileTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "lockTypeParam": { + "description": "The type of lock to retrieve.\nCurrently, only keyword locks are supported.", + "schema": { + "type": "string", + "enum": [ + "Keywords" + ] + }, + "name": "lockType", + "in": "query", + "required": true + }, + "pageId": { + "description": "The unique identifier of a document page.", + "name": "pageId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "pages": { + "description": "The page to be retrieved. Currently only a single\npage number is supported. If a valid page number is provided,\nthe `Hyland-Item-Count` custom header will be included on the response.\n\nIf the page number does not exist or the value provided is not a single\npage number, a 404 Not Found will be returned.\n\nPage number is one-based.", + "name": "pages", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + "contentContext": { + "description": "The context for which the document content is being retrieved. If retrieving the document\nfor client purposes, it is recommended to use the context to verify correct privileges\nand log the most appropriate message in document history.", + "name": "context", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "View", + "Download", + "EmailAttachment" + ] + } + }, + "uploadId": { + "name": "uploadId", + "in": "path", + "description": "The unique reference to the file being uploaded", + "required": true, + "schema": { + "type": "string" + } + }, + "filePart": { + "name": "filePart", + "in": "query", + "required": true, + "description": "part number of the file to upload. Part numbers are sequential and start at 1.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "fit": { + "name": "fit", + "in": "query", + "required": false, + "description": "Options for scaling the resource to the provided dimensions.", + "schema": { + "type": "string", + "enum": [ + "Both", + "Height", + "Stretch", + "Width" + ] + } + }, + "height": { + "name": "height", + "in": "query", + "required": false, + "description": "The height of the resource in pixels.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "width": { + "name": "width", + "in": "query", + "required": false, + "description": "The width of the resource in pixels.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "revisionId": { + "description": "The unique identifier of a document revision.", + "name": "revisionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Hyland-Include-Item-Count": { + "name": "Hyland-Include-Item-Count", + "in": "header", + "description": "The Hyland-Include-Item-Count custom header field can be used by user agents\nto indicate that the item count should be included in the response.", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + "keywordTypeId": { + "description": "The unique identifier of a keyword type.", + "name": "keywordTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "keywordTypeGroupId": { + "description": "The unique identifier of a keyword type group.", + "name": "keywordTypeGroupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "autoFillKeywordSetId": { + "description": "The unique identifier of a autofill keyword set.", + "name": "autoFillKeywordSetId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Accept-Language": { + "name": "Accept-Language", + "in": "header", + "description": "The Accept-Language\nheader field can be used by user agents to\nindicate the set of natural languages that are preferred in the\nresponse. Language tags are defined in RFC 5646. If none of the \nlanguages given are supported, a default language will be returned.", + "required": false, + "schema": { + "type": "string" + }, + "example": "en-US" + }, + "Accept": { + "name": "Accept", + "in": "header", + "description": "The Accept\nheader field can be used by consumers to specify response media types\nthat are preferred.\n\nUpon receiving this header the server will use Proactive\nContent Negotiation to determine the \"best guess\" format for the\nconsumer.\n\nIn cases where the underlying resource can not be returned as a\nrequested format, the server may make a determination of which format\nof the content will be returned.\n\nIn cases where the Accept header is omitted or has the value `*/*`, the\nserver will make a determination of which format of the content will\nbe returned.\n\nConsumers should inspect the `Content-Type` response header to determine\nthe actual format of the content returned.\n\nReview documentation for the specific end point for more detailed information.\non Content Negotiation or how the Accept header.", + "required": false, + "schema": { + "type": "string" + }, + "example": "*/*" + }, + "If-Match": { + "name": "If-Match", + "in": "header", + "description": "The If-Match\nheader field makes the request method conditional on\nthe recipient origin server either having at least one current\nrepresentation of the target resource, when the field-value is \"*\",\nor having a current representation of the target resource that has an\nentity-tag matching a member of the list of entity-tags provided in\nthe field-value.", + "required": false, + "schema": { + "type": "string" + }, + "example": "0731961c81c7403389c42cffd60f209d" + }, + "Range": { + "name": "Range", + "in": "header", + "description": "The Range\nheader field on a request modifies the method semantics to request\ntransfer of only one or more subranges of the selected representation\ndata, rather than the entire selected representation data.\n\nThe Range unit `bytes` is supported to represent byte ranges of the\npage or document of the specific rendition's content. \n\nFor the cases where the Range header is omitted, the full document or page will be \nreturned. ", + "required": false, + "schema": { + "type": "string" + }, + "example": "bytes 1-1000" + } + }, + "headers": { + "Hyland-Item-Count": { + "description": "The Hyland-Item-Count custom\nresponse header indicates the total number of items included in a response.", + "schema": { + "type": "string" + } + }, + "Hyland-Original-Width": { + "description": "Width of original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Height": { + "description": "Height of original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Orientation": { + "description": "The TIFF orientation of the original first page, before any re-orientation", + "schema": { + "type": "string" + } + }, + "Hyland-Original-Media-Type": { + "description": "The original media type of the first page", + "schema": { + "type": "string" + } + }, + "Hyland-Original-X-DPI": { + "description": "The X dpi of the original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Y-DPI": { + "description": "The Y dpi of the original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Width": { + "description": "The width of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Height": { + "description": "The height of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-X-DPI": { + "description": "The X dpi of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Y-DPI": { + "description": "The Y dpi of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Available-Pages": { + "description": "The total number of available pages in the file", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Content-Language": { + "description": "The Content-Language header field describes the natural language(s)\nof the intended audience for the representation. Note that this\nmight not be equivalent to all the languages used within the\nrepresentation.\n\nReference: https://tools.ietf.org/html/rfc7231#section-3.1.3.2", + "schema": { + "type": "string" + }, + "example": "en" + }, + "Location": { + "description": "The \"Location\" header field is used in some responses to refer to a\nspecific resource in relation to the response. The type of\nrelationship is defined by the combination of request method and\nstatus code semantics.\nReference: https://tools.ietf.org/html/rfc7231#section-7.1.2", + "schema": { + "type": "string" + }, + "example": "http://www.example.net/index.html" + }, + "Content-Range": { + "description": "The Content-Range header field is sent in a single part 206 (Partial\nContent) response to indicate the partial range of the selected\nrepresentation enclosed as the message payload, sent in each part of a\nmultipart 206 response to indicate the range enclosed within each body\npart, and sent in 416 (Range Not Satisfiable) responses to provide\ninformation about the selected representation.\nReference: https://tools.ietf.org/html/rfc7233#section-4.2", + "schema": { + "type": "string" + }, + "example": "bytes 1-1000/3000" + }, + "Accept-Ranges": { + "description": "The Accept-Ranges header field allows a server to indicate that it\nsupports range requests for the target resource.\nReference: https://tools.ietf.org/html/rfc7233#section-2.3", + "schema": { + "type": "string" + }, + "example": "bytes" + }, + "ETag": { + "description": "The \"ETag\" header field in a response provides the current entity-tag\nfor the selected representation, as determined at the conclusion of\nhandling the request.\nReference: https://tools.ietf.org/html/rfc7232#section-2.3", + "schema": { + "type": "string" + }, + "example": "0731961c81c7403389c42cffd60f209d" + } + }, + "responses": { + "200-rendering-conversion-content": { + "description": "OK", + "content": { + "image/png": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/tiff": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "text/html": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "application/pdf": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "application/x-isys-docpack": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + }, + "headers": { + "Hyland-Original-Width": { + "$ref": "#/components/headers/Hyland-Original-Width" + }, + "Hyland-Original-Height": { + "$ref": "#/components/headers/Hyland-Original-Height" + }, + "Hyland-Original-Orientation": { + "$ref": "#/components/headers/Hyland-Original-Orientation" + }, + "Hyland-Original-Media-Type": { + "$ref": "#/components/headers/Hyland-Original-Media-Type" + }, + "Hyland-Original-X-DPI": { + "$ref": "#/components/headers/Hyland-Original-X-DPI" + }, + "Hyland-Original-Y-DPI": { + "$ref": "#/components/headers/Hyland-Original-Y-DPI" + }, + "Hyland-Rendition-Width": { + "$ref": "#/components/headers/Hyland-Rendition-Width" + }, + "Hyland-Rendition-Height": { + "$ref": "#/components/headers/Hyland-Rendition-Height" + }, + "Hyland-Rendition-X-DPI": { + "$ref": "#/components/headers/Hyland-Rendition-X-DPI" + }, + "Hyland-Rendition-Y-DPI": { + "$ref": "#/components/headers/Hyland-Rendition-Y-DPI" + }, + "Hyland-Available-Pages": { + "$ref": "#/components/headers/Hyland-Available-Pages" + } + } + }, + "400-COLLECTIONPARAMETERS-RESPONSE": { + "description": "Response when the user tries to combine id and systemName query parameters.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Cannot combine id and systemName query parameters.", + "instance": "/example-resource" + } + } + } + }, + "409-LOCKING-RESPONSE": { + "description": "Response when the user tries to obtain a lock on an item that is already locked.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail-Locking-Error" + }, + "example": { + "type": "https://example.net/conflict", + "title": "Conflict", + "status": 409, + "detail": "Cannot obtain lock. Item is already locked.", + "instance": "/example-resource", + "lockInfo": { + "lockedByUserId": "2", + "lockType": "Keywords", + "currentLock": "DocumentCheckoutInSameSession" + } + } + } + } + }, + "401-GENERIC-RESPONSE": { + "description": "Response when the user does not supply valid authorization credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/unauthorized", + "title": "Unauthorized", + "status": 401, + "detail": "Not authorized to perform this action.", + "instance": "/example-resource" + } + } + } + }, + "404-GENERIC-RESPONSE": { + "description": "Response when the resource does not exist or the user does not have rights\nto the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The requested resource was not found.", + "instance": "/example-resource" + } + } + } + }, + "403-GENERIC-RESPONSE": { + "description": "Response when the user does not have permissions to access the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have permissions to access this resource.", + "instance": "/example-resource" + } + } + } + }, + "400-GENERIC-RESPONSE": { + "description": "Response for when a bad request is provided.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Request is missing required data.", + "instance": "/example-resource" + } + } + } + }, + "406-GENERIC-RESPONSE": { + "description": "Response for when a response matching the list of acceptable values\ndefined in `Accept` cannot be served.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-acceptable", + "title": "Not Acceptable", + "status": 406, + "detail": "The requested media type is not acceptable.", + "instance": "/example-resource" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/client/integration-tests/additional-properties/src/main/resources/application.properties b/client/integration-tests/additional-properties/src/main/resources/application.properties index d0997432d..b64974415 100644 --- a/client/integration-tests/additional-properties/src/main/resources/application.properties +++ b/client/integration-tests/additional-properties/src/main/resources/application.properties @@ -5,10 +5,6 @@ quarkus.openapi-generator.codegen.spec.with_additional_properties_as_attr_yaml.a # with additional properties as attribute = FALSE quarkus.openapi-generator.codegen.spec.no_additional_properties_as_attr_yaml.additional-properties-as-attribute=false - - - - - +quarkus.keycloak.devservices.enabled=false diff --git a/client/integration-tests/array-enum/src/main/resources/application.properties b/client/integration-tests/array-enum/src/main/resources/application.properties index dbf38ebe3..1cb92c2d8 100644 --- a/client/integration-tests/array-enum/src/main/resources/application.properties +++ b/client/integration-tests/array-enum/src/main/resources/application.properties @@ -1 +1,2 @@ -quarkus.rest-client.array_enum_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.array_enum_yaml.url=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/main/resources/application.properties b/client/integration-tests/bean-validation/src/main/resources/application.properties index e3cf8e15d..0078b6e34 100644 --- a/client/integration-tests/bean-validation/src/main/resources/application.properties +++ b/client/integration-tests/bean-validation/src/main/resources/application.properties @@ -1,2 +1,3 @@ quarkus.openapi-generator.codegen.spec.bean_validation_true_yaml.use-bean-validation = true -quarkus.openapi-generator.codegen.spec.bean_validation_false_yaml.use-bean-validation = false \ No newline at end of file +quarkus.openapi-generator.codegen.spec.bean_validation_false_yaml.use-bean-validation = false +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/beanparam/src/main/resources/application.properties b/client/integration-tests/beanparam/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/beanparam/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute index ba096f06d..6e60df751 100644 --- a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute +++ b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute @@ -4,10 +4,10 @@ package {package}; import {imp.import}; {/for} import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -{#if hasAuthMethods || custom-register-providers.orEmpty.size > 0} +{#if openapi:hasAuthMethods(operations) || custom-register-providers.orEmpty.size > 0} import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; {/if} -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import {package}.auth.CompositeAuthenticationProvider; {#if client-headers-factory is 'default'} @@ -34,10 +34,10 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if}configKey="{configKey}") +@Path("{commonPath}") +@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) {#when client-headers-factory} {#is 'default'} @@ -106,13 +106,13 @@ public interface {classname} { {#if is-resteasy-reactive} @jakarta.ws.rs.BeanParam {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include templates.path_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {#else} @org.jboss.resteasy.annotations.providers.multipart.MultipartForm {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} diff --git a/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties b/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties index 1d8f83320..fd3f253cc 100644 --- a/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties +++ b/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties @@ -1,3 +1,4 @@ quarkus.openapi-generator.codegen.template-base-dir=custom/templates quarkus.openapi-generator.codegen.spec.simple_openapi_yaml.base-package=org.simple.openapi -quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/change-directory/src/main/resources/application.properties b/client/integration-tests/change-directory/src/main/resources/application.properties index e28f97b63..a483204b1 100644 --- a/client/integration-tests/change-directory/src/main/resources/application.properties +++ b/client/integration-tests/change-directory/src/main/resources/application.properties @@ -1,3 +1,4 @@ quarkus.openapi-generator.codegen.input-base-dir=openapi-definitions quarkus.openapi-generator.codegen.spec.simple_openapi_yaml.base-package=org.simple.openapi -quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/circuit-breaker/src/main/resources/application.properties b/client/integration-tests/circuit-breaker/src/main/resources/application.properties index a5ac61d5c..334e83247 100644 --- a/client/integration-tests/circuit-breaker/src/main/resources/application.properties +++ b/client/integration-tests/circuit-breaker/src/main/resources/application.properties @@ -7,3 +7,6 @@ org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/requestVolumeThresh org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failureRatio = 3.14 org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/successThreshold = 22 +quarkus.keycloak.devservices.enabled=false + +quarkus.openapi-generator.codegen.spec.simple_openapi_json.base-package=org.acme.openapi.simple diff --git a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java index 8980f481e..73221966b 100644 --- a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java +++ b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java @@ -24,8 +24,8 @@ class SimpleOpenApiTest { @Test void circuitBreaker() throws IOException { - Path generatedRestClient = Paths.get("target", "generated-sources", "open-api-json", "org", "openapi", - "quarkus", "simple_openapi_json", "api", "DefaultApi.java"); + Path generatedRestClient = Paths.get("target", "generated-sources", "open-api-json", "org", "acme", + "openapi", "simple", "api", "DefaultApi.java"); assertThat(generatedRestClient) .exists() diff --git a/client/integration-tests/config-key/src/main/resources/application.properties b/client/integration-tests/config-key/src/main/resources/application.properties index de078f4ae..b0bfd21e4 100644 --- a/client/integration-tests/config-key/src/main/resources/application.properties +++ b/client/integration-tests/config-key/src/main/resources/application.properties @@ -14,3 +14,5 @@ quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.config-key= quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.additional-api-type-annotations=@io.quarkiverse.openapi.generator.configkey.CustomAnnotation quarkus.rest-client.empty_config_key_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/cookie-authentication/src/main/resources/application.properties b/client/integration-tests/cookie-authentication/src/main/resources/application.properties index 517251c08..2cd30cc3d 100644 --- a/client/integration-tests/cookie-authentication/src/main/resources/application.properties +++ b/client/integration-tests/cookie-authentication/src/main/resources/application.properties @@ -1,2 +1,4 @@ quarkus.openapi-generator.codegen.spec.cookie_authentication_json.mutiny=true quarkus.openapi-generator.cookie_authentication_json.auth.cookie.api-key=Quarkus + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/custom-templates/src/main/resources/application.properties b/client/integration-tests/custom-templates/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/custom-templates/src/main/resources/application.properties +++ b/client/integration-tests/custom-templates/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute index ba096f06d..d037a0993 100644 --- a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute +++ b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute @@ -4,10 +4,10 @@ package {package}; import {imp.import}; {/for} import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -{#if hasAuthMethods || custom-register-providers.orEmpty.size > 0} +{#if openapi:hasAuthMethods(operations) || custom-register-providers.orEmpty.size > 0} import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; {/if} -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import {package}.auth.CompositeAuthenticationProvider; {#if client-headers-factory is 'default'} @@ -34,10 +34,10 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if}configKey="{configKey}") +@Path("{commonPath}") +@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) {#when client-headers-factory} {#is 'default'} @@ -106,13 +106,13 @@ public interface {classname} { {#if is-resteasy-reactive} @jakarta.ws.rs.BeanParam {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include templates.path_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {#else} @org.jboss.resteasy.annotations.providers.multipart.MultipartForm {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} diff --git a/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute b/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute index 74d2d1646..6beb12f1e 100644 --- a/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute +++ b/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute @@ -1,21 +1,11 @@ - {#if withXml} - @XmlAccessorType(XmlAccessType.FIELD) - {#if m.hasVars}@XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} - }){#else} - @XmlType(name = "{m.classname}") - {/if} - {#if !m.parent || m.parent.isEmpty}@XmlRootElement(name = "{m.classname}"){/if} - {#else} @JsonIgnoreProperties(ignoreUnknown = true) - {/if} {#if m.description} /** * {m.description} **/ {/if} {#include additionalModelTypeAnnotations.qute m=m/} - public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements Serializable{/if} { + public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements Serializable{/if} { public final int myCustomQueryParamAttribute = 42; @@ -28,9 +18,6 @@ {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if m.description} /** * {m.description} @@ -63,13 +50,11 @@ {/if} * @return {v.name} **/ - {#if !withXml} @JsonProperty("{v.baseName}") - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} - {#if v.useBeanValidation}{#include beanValidation.qute p=v/}{/if} + {#if use-bean-validation}{#include beanValidation.qute p=v/}{/if} {#if v.isEnum && v.isContainer}public {v.datatypeWithEnum} {v.getter}(){ return {v.name}; }{#else if v.isEnum && !v.isArray && !v.isMap}public {v.datatypeWithEnum} {v.getter}() { diff --git a/client/integration-tests/enum-property/src/main/resources/application.properties b/client/integration-tests/enum-property/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/enum-property/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/enum-unexpected/src/main/resources/application.properties b/client/integration-tests/enum-unexpected/src/main/resources/application.properties index 04ab946c7..f41961686 100644 --- a/client/integration-tests/enum-unexpected/src/main/resources/application.properties +++ b/client/integration-tests/enum-unexpected/src/main/resources/application.properties @@ -1,4 +1,5 @@ quarkus.openapi-generator.codegen.spec.with_enum_unexpected_yaml.additional-enum-type-unexpected-member=true - quarkus.openapi-generator.codegen.spec.without_enum_unexpected_yaml.additional-enum-type-unexpected-member=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/exclude/src/main/resources/application.properties b/client/integration-tests/exclude/src/main/resources/application.properties index a5f55c31d..14b0b7b70 100644 --- a/client/integration-tests/exclude/src/main/resources/application.properties +++ b/client/integration-tests/exclude/src/main/resources/application.properties @@ -1 +1,2 @@ quarkus.openapi-generator.codegen.exclude=exclude-openapi.yaml +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/generation-input/src/main/resources/application.properties b/client/integration-tests/generation-input/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/generation-input/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/generation-tests/src/main/resources/application.properties b/client/integration-tests/generation-tests/src/main/resources/application.properties index 6a8f163ae..a312f6f35 100644 --- a/client/integration-tests/generation-tests/src/main/resources/application.properties +++ b/client/integration-tests/generation-tests/src/main/resources/application.properties @@ -14,3 +14,5 @@ quarkus.oidc-client.petstore_auth.grant.type=password quarkus.oidc-client.petstore_auth.grant-options.password.username=alice quarkus.oidc-client.petstore_auth.grant-options.password.password=alice quarkus.oidc-client.petstore_auth.client-id=petstore-app + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/github/src/main/resources/application.properties b/client/integration-tests/github/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/github/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/include/src/main/resources/application.properties b/client/integration-tests/include/src/main/resources/application.properties index 0d10e8524..207a30aef 100644 --- a/client/integration-tests/include/src/main/resources/application.properties +++ b/client/integration-tests/include/src/main/resources/application.properties @@ -1 +1,2 @@ quarkus.openapi-generator.codegen.include=include-openapi.yaml +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/multipart-request/src/main/resources/application.properties b/client/integration-tests/multipart-request/src/main/resources/application.properties index 3ccb9c794..fa64e2ec1 100644 --- a/client/integration-tests/multipart-request/src/main/resources/application.properties +++ b/client/integration-tests/multipart-request/src/main/resources/application.properties @@ -2,3 +2,5 @@ quarkus.openapi-generator.codegen.spec.multipart_requests_yml.base-package=org.a quarkus.openapi-generator.codegen.spec.multipart_requests_yml.additional-model-type-annotations=@io.quarkus.runtime.annotations.RegisterForReflection # By default the openapi-generator doesn't generate models for multipart requests quarkus.openapi-generator.codegen.spec.multipart_requests_yml.skip-form-model=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/mutiny-return-response/src/main/resources/application.properties b/client/integration-tests/mutiny-return-response/src/main/resources/application.properties index 826dba648..ce35b884b 100644 --- a/client/integration-tests/mutiny-return-response/src/main/resources/application.properties +++ b/client/integration-tests/mutiny-return-response/src/main/resources/application.properties @@ -34,3 +34,5 @@ quarkus.openapi-generator.codegen.spec.mutiny_return_response_true_void_simple_o quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny = true quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny.return-response = true quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny.operation-ids.hello = Multi + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/mutiny/src/main/resources/application.properties b/client/integration-tests/mutiny/src/main/resources/application.properties index b1900ad13..7fdc33f2c 100644 --- a/client/integration-tests/mutiny/src/main/resources/application.properties +++ b/client/integration-tests/mutiny/src/main/resources/application.properties @@ -8,4 +8,6 @@ quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_openapi_yaml.m quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny=true quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint1=Multi quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint2=Uni -quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint3=Umi \ No newline at end of file +quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint3=Umi + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/open-api-normalizer/src/main/resources/application.properties b/client/integration-tests/open-api-normalizer/src/main/resources/application.properties index d80d6c847..9a6d0d6a3 100644 --- a/client/integration-tests/open-api-normalizer/src/main/resources/application.properties +++ b/client/integration-tests/open-api-normalizer/src/main/resources/application.properties @@ -1,4 +1,6 @@ quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.base-package=org.acme.openapi.animals quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.type-mappings.DateTime=Instant quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.import-mappings.Instant=java.time.Instant -quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.open-api-normalizer.REF_AS_PARENT_IN_ALLOF=true \ No newline at end of file +quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.open-api-normalizer.REF_AS_PARENT_IN_ALLOF=true + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/part-filename/src/main/resources/application.properties b/client/integration-tests/part-filename/src/main/resources/application.properties index b48826d72..9327f700a 100644 --- a/client/integration-tests/part-filename/src/main/resources/application.properties +++ b/client/integration-tests/part-filename/src/main/resources/application.properties @@ -23,3 +23,5 @@ quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_ym quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.generate-part-filename=true quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.part-filename-value=test.pdf quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.use-field-name-in-part-filename=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/polymorphism/src/main/resources/application.properties b/client/integration-tests/polymorphism/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/polymorphism/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/return-response/src/main/resources/application.properties b/client/integration-tests/return-response/src/main/resources/application.properties index a8e2cac17..ea03ea095 100644 --- a/client/integration-tests/return-response/src/main/resources/application.properties +++ b/client/integration-tests/return-response/src/main/resources/application.properties @@ -11,4 +11,6 @@ quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_ quarkus.openapi-generator.codegen.spec.return_response_false_string_simple_openapi_yaml.mutiny = false quarkus.openapi-generator.codegen.spec.return_response_false_void_simple_openapi_yaml.mutiny = false quarkus.openapi-generator.codegen.spec.return_response_true_string_simple_openapi_yaml.mutiny = false -quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_yaml.mutiny = false \ No newline at end of file +quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_yaml.mutiny = false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/security/src/main/resources/application.properties b/client/integration-tests/security/src/main/resources/application.properties index 03188f952..5422a5e76 100644 --- a/client/integration-tests/security/src/main/resources/application.properties +++ b/client/integration-tests/security/src/main/resources/application.properties @@ -76,4 +76,6 @@ quarkus.oidc-client.service5_oauth2.discovery-enabled=false quarkus.oidc-client.service5_oauth2.client-id=kogito-app quarkus.oidc-client.service5_oauth2.grant.type=client quarkus.oidc-client.service5_oauth2.credentials.client-secret.method=basic -quarkus.oidc-client.service5_oauth2.credentials.client-secret.value=secret \ No newline at end of file +quarkus.oidc-client.service5_oauth2.credentials.client-secret.value=secret + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/simple/src/main/resources/application.properties b/client/integration-tests/simple/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/simple/src/main/resources/application.properties +++ b/client/integration-tests/simple/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/skip-validation/src/main/resources/application.properties b/client/integration-tests/skip-validation/src/main/resources/application.properties index 054894535..8cccb79fe 100644 --- a/client/integration-tests/skip-validation/src/main/resources/application.properties +++ b/client/integration-tests/skip-validation/src/main/resources/application.properties @@ -1 +1,2 @@ -quarkus.openapi-generator.codegen.validateSpec=false \ No newline at end of file +quarkus.openapi-generator.codegen.validateSpec=false +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/suffix-prefix/src/main/resources/application.properties b/client/integration-tests/suffix-prefix/src/main/resources/application.properties index 2655ddeec..3e88e88d6 100644 --- a/client/integration-tests/suffix-prefix/src/main/resources/application.properties +++ b/client/integration-tests/suffix-prefix/src/main/resources/application.properties @@ -1,4 +1,6 @@ quarkus.rest-client.quarkus_suffix_prefix_openapi_yaml.url=http://localhost:8080 quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.api-name-suffix=CustomApiSuffix quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-suffix=CustomModelSuffix -quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-prefix=CustomModelPrefix \ No newline at end of file +quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-prefix=CustomModelPrefix + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/type-mapping/src/main/resources/application.properties b/client/integration-tests/type-mapping/src/main/resources/application.properties index e7665f407..8a347ccf3 100644 --- a/client/integration-tests/type-mapping/src/main/resources/application.properties +++ b/client/integration-tests/type-mapping/src/main/resources/application.properties @@ -2,4 +2,6 @@ quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.U quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.File=InputStream quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.import-mappings.File=java.io.InputStream quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.base-package=org.acme.openapi.typemapping -quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(io.quarkiverse.openapi.generator.it.type.mapping.OffsetDateTimeParamConverterProvider.class) \ No newline at end of file +quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(io.quarkiverse.openapi.generator.it.type.mapping.OffsetDateTimeParamConverterProvider.class) + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/without-oidc/src/main/resources/application.properties b/client/integration-tests/without-oidc/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/without-oidc/src/main/resources/application.properties +++ b/client/integration-tests/without-oidc/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file From e5993bf3adf7c02e9bbeac0f4f2b0482b3df8efd Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:11:57 -0500 Subject: [PATCH 019/166] Fix #824 - Introduce a separated OIDC module to hold security dependencies (#872) * Fix #824 - Introduce a separated OIDC module to hold security dependencies Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> * Fix parent module Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --------- Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- client/deployment/pom.xml | 5 + .../deployment/GeneratorProcessor.java | 208 ++++++------------ .../OpenApiSpecProviderTest.java | 2 +- .../integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 17 +- client/integration-tests/security/pom.xml | 29 +++ .../TokenPropagationExternalServicesMock.java | 26 ++- client/integration-tests/without-oidc/pom.xml | 5 +- .../src/main/resources/application.properties | 2 - client/oidc/pom.xml | 34 +++ ...lassicOidcClientRequestFilterDelegate.java | 12 +- .../oidc/OidcAuthenticationRecorder.java | 33 +++ ...activeOidcClientRequestFilterDelegate.java | 40 ++-- .../OAuth2AuthenticationProvider.java | 4 +- client/pom.xml | 1 + client/runtime/pom.xml | 15 +- .../openapi/generator/AuthConfig.java | 1 - .../generator/AuthenticationRecorder.java | 20 +- .../AbstractOpenApiSpecProviderTest.java | 9 +- .../includes/authentication-support.adoc | 12 +- 21 files changed, 249 insertions(+), 230 deletions(-) create mode 100644 client/oidc/pom.xml rename client/{runtime/src/main/java/io/quarkiverse/openapi/generator => oidc/src/main/java/io/quarkiverse/openapi/generator/oidc}/ClassicOidcClientRequestFilterDelegate.java (82%) create mode 100644 client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java rename client/{runtime/src/main/java/io/quarkiverse/openapi/generator => oidc/src/main/java/io/quarkiverse/openapi/generator/oidc}/ReactiveOidcClientRequestFilterDelegate.java (62%) rename client/{runtime/src/main/java/io/quarkiverse/openapi/generator => oidc/src/main/java/io/quarkiverse/openapi/generator/oidc}/providers/OAuth2AuthenticationProvider.java (91%) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 6c2be76d8..0652da716 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -36,6 +36,11 @@ quarkus-openapi-generator ${project.version} + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + ${project.version} + diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java index 92bff1491..d719673e3 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java @@ -14,23 +14,26 @@ import org.jboss.jandex.ClassType; import org.jboss.jandex.DotName; import org.jboss.jandex.ParameterizedType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import io.quarkiverse.openapi.generator.AuthName; import io.quarkiverse.openapi.generator.AuthenticationRecorder; -import io.quarkiverse.openapi.generator.ClassicOidcClientRequestFilterDelegate; import io.quarkiverse.openapi.generator.OidcClient; import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; import io.quarkiverse.openapi.generator.OpenApiSpec; -import io.quarkiverse.openapi.generator.ReactiveOidcClientRequestFilterDelegate; import io.quarkiverse.openapi.generator.markers.ApiKeyAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.BasicAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.BearerAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.OperationMarker; +import io.quarkiverse.openapi.generator.oidc.ClassicOidcClientRequestFilterDelegate; +import io.quarkiverse.openapi.generator.oidc.OidcAuthenticationRecorder; +import io.quarkiverse.openapi.generator.oidc.ReactiveOidcClientRequestFilterDelegate; +import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyIn; import io.quarkiverse.openapi.generator.providers.AuthProvider; import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.deployment.SyntheticBeanBuildItem; @@ -54,71 +57,79 @@ public class GeneratorProcessor { private static final String ABSTRACT_TOKEN_PRODUCER = "io.quarkus.oidc.client.runtime.AbstractTokensProducer"; + private static final Logger LOGGER = LoggerFactory.getLogger(GeneratorProcessor.class); + + private static String sanitizeAuthName(String schemeName) { + return OpenApiGeneratorConfig.getSanitizedSecuritySchemeName(schemeName); + } + + private static Map> getOperationsBySpec(CombinedIndexBuildItem beanArchiveBuildItem) { + return beanArchiveBuildItem.getIndex().getAnnotationsWithRepeatable(OPERATION_MARKER, beanArchiveBuildItem.getIndex()) + .stream().collect(Collectors.groupingBy( + marker -> marker.value("openApiSpecId").asString() + "_" + marker.value("name").asString())); + } + + private static List getOperations(Map> operationsBySpec, + String openApiSpecId, String name) { + return operationsBySpec.getOrDefault(openApiSpecId + "_" + name, List.of()).stream() + .map(op -> OperationAuthInfo.builder().withPath(op.value("path").asString()) + .withId(op.value("operationId").asString()).withMethod(op.value("method").asString()).build()) + .collect(Collectors.toList()); + } + @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } @BuildStep - void additionalBean( - Capabilities capabilities, - BuildProducer producer) { + void additionalBean(Capabilities capabilities, BuildProducer producer) { if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { + LOGGER.debug("{} class not found in runtime, skipping OidcClientRequestFilterDelegate bean generation", + ABSTRACT_TOKEN_PRODUCER); return; } + LOGGER.debug("{} class found in runtime, producing OidcClientRequestFilterDelegate bean generation", + ABSTRACT_TOKEN_PRODUCER); if (capabilities.isPresent(Capability.REST_CLIENT_REACTIVE)) { - producer.produce( - AdditionalBeanBuildItem.builder().addBeanClass(ReactiveOidcClientRequestFilterDelegate.class) - .setDefaultScope(DotName.createSimple(Dependent.class)) - .setUnremovable() - .build()); + producer.produce(AdditionalBeanBuildItem.builder().addBeanClass(ReactiveOidcClientRequestFilterDelegate.class) + .setDefaultScope(DotName.createSimple(Dependent.class)).setUnremovable().build()); } else { - producer.produce( - AdditionalBeanBuildItem.builder().addBeanClass(ClassicOidcClientRequestFilterDelegate.class) - .setDefaultScope(DotName.createSimple(Dependent.class)) - .setUnremovable() - .build()); + producer.produce(AdditionalBeanBuildItem.builder().addBeanClass(ClassicOidcClientRequestFilterDelegate.class) + .setDefaultScope(DotName.createSimple(Dependent.class)).setUnremovable().build()); } + } @BuildStep @Record(ExecutionTime.STATIC_INIT) - void produceCompositeProviders(AuthenticationRecorder recorder, - List authProviders, + void produceCompositeProviders(AuthenticationRecorder recorder, List authProviders, BuildProducer beanProducer) { Map> providersBySpec = authProviders.stream() .collect(Collectors.groupingBy(AuthProviderBuildItem::getOpenApiSpecId)); providersBySpec.forEach((openApiSpecId, providers) -> { - beanProducer.produce(SyntheticBeanBuildItem.configure(CompositeAuthenticationProvider.class) - .scope(Dependent.class) - .addQualifier() - .annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId) - .done() - .addInjectionPoint( - ParameterizedType.create(Instance.class, ClassType.create(AuthProvider.class)), - AnnotationInstance.builder(OpenApiSpec.class) - .add("openApiSpecId", openApiSpecId) - .build()) - .createWith(recorder.recordCompositeProvider(openApiSpecId)) - .done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(CompositeAuthenticationProvider.class).scope(Dependent.class) + .addQualifier().annotation(OpenApiSpec.class).addValue("openApiSpecId", openApiSpecId).done() + .addInjectionPoint(ParameterizedType.create(Instance.class, ClassType.create(AuthProvider.class)), + AnnotationInstance.builder(OpenApiSpec.class).add("openApiSpecId", openApiSpecId).build()) + .createWith(recorder.recordCompositeProvider(openApiSpecId)).done()); }); } @BuildStep @Record(ExecutionTime.STATIC_INIT) - void produceOauthAuthentication( - CombinedIndexBuildItem beanArchiveBuildItem, - BuildProducer authenticationProviders, - BuildProducer beanProducer, - AuthenticationRecorder recorder) { + void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, + BuildProducer authenticationProviders, BuildProducer beanProducer, + OidcAuthenticationRecorder oidcRecorder) { if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { + LOGGER.debug("{} class not found in runtime, skipping OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); return; } + LOGGER.debug("{} class found in runtime, producing OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); Collection authenticationMarkers = beanArchiveBuildItem.getIndex() .getAnnotationsWithRepeatable(OAUTH_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); @@ -129,34 +140,20 @@ void produceOauthAuthentication( String openApiSpecId = authenticationMarker.value("openApiSpecId").asString(); List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) - .scope(Dependent.class) - .addQualifier() - .annotation(AuthName.class) - .addValue("name", name) - .done() - .addQualifier() - .annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId) - .done() - .addInjectionPoint(ClassType.create(OidcClientRequestFilterDelegate.class), - AnnotationInstance.builder(OidcClient.class) - .add("name", sanitizeAuthName(name)) - .build()) - .createWith(recorder.recordOauthAuthProvider( - sanitizeAuthName(name), - openApiSpecId, - operations)) - .unremovable() - .done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() + .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId).done() + .addInjectionPoint(ClassType.create(OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate.class), + AnnotationInstance.builder(OidcClient.class).add("name", sanitizeAuthName(name)).build()) + .createWith(oidcRecorder.recordOauthAuthProvider(sanitizeAuthName(name), openApiSpecId, operations)) + .unremovable().done()); } } @BuildStep @Record(ExecutionTime.STATIC_INIT) void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, - BuildProducer authenticationProviders, - BuildProducer beanProducer, + BuildProducer authenticationProviders, BuildProducer beanProducer, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() @@ -171,30 +168,18 @@ void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) - .scope(Dependent.class) - .addQualifier() - .annotation(AuthName.class) - .addValue("name", name) - .done() - .addQualifier() - .annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId) - .done() - .createWith(recorder.recordBasicAuthProvider( - sanitizeAuthName(name), - openApiSpecId, - operations)) - .unremovable() - .done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() + .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId).done() + .createWith(recorder.recordBasicAuthProvider(sanitizeAuthName(name), openApiSpecId, operations)) + .unremovable().done()); } } @BuildStep @Record(ExecutionTime.STATIC_INIT) void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, - BuildProducer authenticationProviders, - BuildProducer beanProducer, + BuildProducer authenticationProviders, BuildProducer beanProducer, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() @@ -208,23 +193,11 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) - .scope(Dependent.class) - .addQualifier() - .annotation(AuthName.class) - .addValue("name", name) - .done() - .addQualifier() - .annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId) - .done() - .createWith(recorder.recordBearerAuthProvider( - sanitizeAuthName(name), - scheme, - openApiSpecId, - operations)) - .unremovable() - .done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() + .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId).done() + .createWith(recorder.recordBearerAuthProvider(sanitizeAuthName(name), scheme, openApiSpecId, operations)) + .unremovable().done()); } } @@ -232,8 +205,7 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, @BuildStep @Record(ExecutionTime.STATIC_INIT) void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, - BuildProducer authenticationProviders, - BuildProducer beanProducer, + BuildProducer authenticationProviders, BuildProducer beanProducer, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() @@ -249,48 +221,12 @@ void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) - .scope(Dependent.class) - .addQualifier() - .annotation(AuthName.class) - .addValue("name", name) - .done() - .addQualifier() - .annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId) - .done() - .createWith(recorder.recordApiKeyAuthProvider( - sanitizeAuthName(name), - openApiSpecId, - apiKeyIn, - apiKeyName, - operations)) - .unremovable() - .done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() + .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId).done().createWith(recorder + .recordApiKeyAuthProvider(sanitizeAuthName(name), openApiSpecId, apiKeyIn, apiKeyName, operations)) + .unremovable().done()); } } - - private static String sanitizeAuthName(String schemeName) { - return OpenApiGeneratorConfig.getSanitizedSecuritySchemeName(schemeName); - } - - private static Map> getOperationsBySpec(CombinedIndexBuildItem beanArchiveBuildItem) { - Map> operationsBySpec = beanArchiveBuildItem.getIndex() - .getAnnotationsWithRepeatable(OPERATION_MARKER, beanArchiveBuildItem.getIndex()).stream() - .collect(Collectors.groupingBy( - marker -> marker.value("openApiSpecId").asString() + "_" + marker.value("name").asString())); - return operationsBySpec; - } - - private static List getOperations(Map> operationsBySpec, - String openApiSpecId, String name) { - return operationsBySpec.getOrDefault(openApiSpecId + "_" + name, List.of()).stream() - .map(op -> OperationAuthInfo.builder() - .withPath(op.value("path").asString()) - .withId(op.value("operationId").asString()) - .withMethod(op.value("method").asString()) - .build()) - .collect(Collectors.toList()); - } } diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java index 2c13db0dd..5a0f652c7 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java @@ -17,11 +17,11 @@ import io.quarkiverse.openapi.generator.markers.ApiKeyAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.BasicAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker; +import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.AuthProvider; import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider; import io.quarkus.test.QuarkusUnitTest; public class OpenApiSpecProviderTest { diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 34d9bd4ec..9d3aea7c4 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-enum-unexpected - Quarkus - Openapi Generator - Integration Tests - Enum Unexpected + Quarkus - Openapi Generator - Integration Tests - Client - Enum Unexpected Example project for OpenAPI with enum unexpected value diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 50987d9cd..780db7791 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-polymorphism - Quarkus - Openapi Generator - Integration Tests - Polymorphism + Quarkus - Openapi Generator - Integration Tests - Client - Polymorphism diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index ef2670df3..4f99da25c 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -55,6 +55,11 @@ quarkus-openapi-generator-it-generation-input ${project.version} + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + ${project.version} + @@ -68,14 +73,6 @@ io.quarkus quarkus-resteasy-client-jackson - - io.quarkus - quarkus-resteasy-client-oidc-filter - - - io.quarkus - quarkus-resteasy-multipart - @@ -103,10 +100,6 @@ io.quarkus quarkus-rest-client-jackson - - io.quarkus - quarkus-rest-client-oidc-filter - jakarta.validation jakarta.validation-api diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 11035298f..26ce6f3fd 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -16,6 +16,10 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + io.quarkus quarkus-junit5 @@ -91,5 +95,30 @@ native + + resteasy-reactive + + + io.quarkus + quarkus-rest-client-oidc-filter + + + + + resteasy-classic + + true + + + + io.quarkus + quarkus-resteasy-client-oidc-filter + + + io.quarkus + quarkus-resteasy-multipart + + + \ No newline at end of file diff --git a/client/integration-tests/security/src/test/java/io/quarkiverse/openapi/generator/it/security/TokenPropagationExternalServicesMock.java b/client/integration-tests/security/src/test/java/io/quarkiverse/openapi/generator/it/security/TokenPropagationExternalServicesMock.java index a29ab6b40..43b6289e3 100644 --- a/client/integration-tests/security/src/test/java/io/quarkiverse/openapi/generator/it/security/TokenPropagationExternalServicesMock.java +++ b/client/integration-tests/security/src/test/java/io/quarkiverse/openapi/generator/it/security/TokenPropagationExternalServicesMock.java @@ -14,6 +14,9 @@ import jakarta.ws.rs.core.HttpHeaders; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.github.tomakehurst.wiremock.WireMockServer; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; @@ -25,18 +28,25 @@ public class TokenPropagationExternalServicesMock implements QuarkusTestResource public static final String SERVICE3_AUTHORIZATION_TOKEN = "SERVICE3_AUTHORIZATION_TOKEN"; public static final String SERVICE4_HEADER_TO_PROPAGATE = "SERVICE4_HEADER_TO_PROPAGATE"; public static final String SERVICE4_AUTHORIZATION_TOKEN = "SERVICE4_AUTHORIZATION_TOKEN"; - - private static final String BEARER = "Bearer "; - public static final String TOKEN_PROPAGATION_EXTERNAL_SERVICE_MOCK_URL = "propagation-external-service-mock.url"; - + private static final String BEARER = "Bearer "; + private static final Logger LOGGER = LoggerFactory.getLogger(TokenPropagationExternalServicesMock.class); private WireMockServer wireMockServer; + private static void stubForExternalService(String tokenPropagationExternalServiceUrl, String authorizationToken) { + stubFor(post(tokenPropagationExternalServiceUrl) + .withHeader(HttpHeaders.AUTHORIZATION, equalTo(BEARER + authorizationToken)) + .willReturn(aResponse() + .withHeader(CONTENT_TYPE, APPLICATION_JSON) + .withBody("{}"))); + } + @Override public Map start() { wireMockServer = new WireMockServer(options().dynamicPort()); wireMockServer.start(); configureFor(wireMockServer.port()); + LOGGER.info("Mocked Server started at {}", wireMockServer.baseUrl()); // stub the token-propagation-external-service1 invocation with the expected token stubForExternalService("/token-propagation-external-service1/executeQuery1", AUTHORIZATION_TOKEN); @@ -58,14 +68,6 @@ public Map start() { return Map.of(TOKEN_PROPAGATION_EXTERNAL_SERVICE_MOCK_URL, wireMockServer.baseUrl()); } - private static void stubForExternalService(String tokenPropagationExternalServiceUrl, String authorizationToken) { - stubFor(post(tokenPropagationExternalServiceUrl) - .withHeader(HttpHeaders.AUTHORIZATION, equalTo(BEARER + authorizationToken)) - .willReturn(aResponse() - .withHeader(CONTENT_TYPE, APPLICATION_JSON) - .withBody("{}"))); - } - @Override public void stop() { if (wireMockServer != null) { diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 18c904388..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -1,10 +1,9 @@ - quarkus-openapi-generator-parent + quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator 3.0.0-SNAPSHOT - ../../../pom.xml 4.0.0 @@ -19,7 +18,7 @@ io.quarkus - quarkus-rest-client-jackson + quarkus-hibernate-validator org.assertj diff --git a/client/integration-tests/without-oidc/src/main/resources/application.properties b/client/integration-tests/without-oidc/src/main/resources/application.properties index 07439c101..11a6c1a9f 100644 --- a/client/integration-tests/without-oidc/src/main/resources/application.properties +++ b/client/integration-tests/without-oidc/src/main/resources/application.properties @@ -1,3 +1 @@ quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 - -quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml new file mode 100644 index 000000000..9b4601ab7 --- /dev/null +++ b/client/oidc/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-client-parent + 3.0.0-SNAPSHOT + + + quarkus-openapi-generator-oidc + Quarkus - Openapi Generator - Client - OIDC + OIDC Capabilities for Runtime + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + ${project.version} + + + io.quarkus + quarkus-rest-client-oidc-filter + provided + + + io.quarkus + quarkus-resteasy-client-oidc-filter + provided + + + + \ No newline at end of file diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/ClassicOidcClientRequestFilterDelegate.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java similarity index 82% rename from client/runtime/src/main/java/io/quarkiverse/openapi/generator/ClassicOidcClientRequestFilterDelegate.java rename to client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java index 9f25d1057..f37895c8a 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/ClassicOidcClientRequestFilterDelegate.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java @@ -1,4 +1,4 @@ -package io.quarkiverse.openapi.generator; +package io.quarkiverse.openapi.generator.oidc; import java.io.IOException; @@ -10,7 +10,9 @@ import org.jboss.logging.Logger; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider; +import io.quarkiverse.openapi.generator.OidcClient; +import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; +import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkus.oidc.client.runtime.AbstractTokensProducer; import io.quarkus.oidc.client.runtime.DisabledOidcClientException; @@ -19,15 +21,13 @@ public class ClassicOidcClientRequestFilterDelegate extends AbstractTokensProducer implements ClientRequestFilter, OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate { - private static final Logger LOG = Logger - .getLogger(ClassicOidcClientRequestFilterDelegate.class); + private static final Logger LOG = Logger.getLogger(ClassicOidcClientRequestFilterDelegate.class); final String clientId; ClassicOidcClientRequestFilterDelegate(InjectionPoint injectionPoint) { OidcClient annotation = (OidcClient) injectionPoint.getQualifiers().stream() - .filter(x -> x.annotationType().equals(OidcClient.class)) - .findFirst().orElseThrow(); + .filter(x -> x.annotationType().equals(OidcClient.class)).findFirst().orElseThrow(); this.clientId = OpenApiGeneratorConfig.getSanitizedSecuritySchemeName(annotation.name()); } diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java new file mode 100644 index 000000000..1dbfe705e --- /dev/null +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java @@ -0,0 +1,33 @@ +package io.quarkiverse.openapi.generator.oidc; + +import java.util.List; +import java.util.function.Function; + +import io.quarkiverse.openapi.generator.AuthenticationRecorder; +import io.quarkiverse.openapi.generator.OidcClient; +import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; +import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; +import io.quarkiverse.openapi.generator.providers.AuthProvider; +import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; +import io.quarkus.arc.SyntheticCreationalContext; +import io.quarkus.runtime.annotations.Recorder; + +@Recorder +public class OidcAuthenticationRecorder { + private final OpenApiGeneratorConfig generatorConfig; + + public OidcAuthenticationRecorder(OpenApiGeneratorConfig generatorConfig) { + this.generatorConfig = generatorConfig; + } + + public Function, AuthProvider> recordOauthAuthProvider( + String name, + String openApiSpecId, + List operations) { + return context -> new OAuth2AuthenticationProvider( + AuthenticationRecorder.getAuthConfig(generatorConfig, openApiSpecId, name), name, openApiSpecId, + context.getInjectedReference(OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate.class, + new OidcClient.Literal(name)), + operations); + } +} diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/ReactiveOidcClientRequestFilterDelegate.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java similarity index 62% rename from client/runtime/src/main/java/io/quarkiverse/openapi/generator/ReactiveOidcClientRequestFilterDelegate.java rename to client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java index d4fb3f4df..cdbd57961 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/ReactiveOidcClientRequestFilterDelegate.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java @@ -1,7 +1,6 @@ -package io.quarkiverse.openapi.generator; +package io.quarkiverse.openapi.generator.oidc; import java.io.IOException; -import java.util.function.Consumer; import jakarta.annotation.Priority; import jakarta.enterprise.inject.spi.InjectionPoint; @@ -13,8 +12,9 @@ import org.jboss.resteasy.reactive.client.spi.ResteasyReactiveClientRequestContext; import org.jboss.resteasy.reactive.client.spi.ResteasyReactiveClientRequestFilter; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider; -import io.quarkus.oidc.client.Tokens; +import io.quarkiverse.openapi.generator.OidcClient; +import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; +import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkus.oidc.client.runtime.AbstractTokensProducer; import io.quarkus.oidc.client.runtime.DisabledOidcClientException; import io.quarkus.oidc.common.runtime.OidcConstants; @@ -24,16 +24,14 @@ public class ReactiveOidcClientRequestFilterDelegate extends AbstractTokensProducer implements ResteasyReactiveClientRequestFilter, OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate { - private static final Logger LOG = Logger - .getLogger(ReactiveOidcClientRequestFilterDelegate.class); + private static final Logger LOG = Logger.getLogger(ReactiveOidcClientRequestFilterDelegate.class); private static final String BEARER_SCHEME_WITH_SPACE = OidcConstants.BEARER_SCHEME + " "; final String clientId; ReactiveOidcClientRequestFilterDelegate(InjectionPoint injectionPoint) { OidcClient annotation = (OidcClient) injectionPoint.getQualifiers().stream() - .filter(x -> x.annotationType().equals(OidcClient.class)) - .findFirst().orElseThrow(); + .filter(x -> x.annotationType().equals(OidcClient.class)).findFirst().orElseThrow(); this.clientId = OpenApiGeneratorConfig.getSanitizedSecuritySchemeName(annotation.name()); } @@ -58,23 +56,17 @@ public void filter(ClientRequestContext requestContext) throws IOException { public void filter(ResteasyReactiveClientRequestContext requestContext) { requestContext.suspend(); - super.getTokens().subscribe().with(new Consumer<>() { - @Override - public void accept(Tokens tokens) { - requestContext.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, - BEARER_SCHEME_WITH_SPACE + tokens.getAccessToken()); + super.getTokens().subscribe().with(tokens -> { + requestContext.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, + BEARER_SCHEME_WITH_SPACE + tokens.getAccessToken()); + requestContext.resume(); + }, t -> { + if (t instanceof DisabledOidcClientException) { + LOG.debug("Client is disabled, acquiring and propagating the token is not necessary"); requestContext.resume(); - } - }, new Consumer<>() { - @Override - public void accept(Throwable t) { - if (t instanceof DisabledOidcClientException) { - LOG.debug("Client is disabled, acquiring and propagating the token is not necessary"); - requestContext.resume(); - } else { - LOG.debugf("Access token is not available, cause: %s, aborting the request", t.getMessage()); - requestContext.resume((t instanceof RuntimeException) ? t : new RuntimeException(t)); - } + } else { + LOG.debugf("Access token is not available, cause: %s, aborting the request", t.getMessage()); + requestContext.resume((t instanceof RuntimeException) ? t : new RuntimeException(t)); } }); } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/OAuth2AuthenticationProvider.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java similarity index 91% rename from client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/OAuth2AuthenticationProvider.java rename to client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java index ff5368ced..df87186c1 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/OAuth2AuthenticationProvider.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java @@ -1,4 +1,4 @@ -package io.quarkiverse.openapi.generator.providers; +package io.quarkiverse.openapi.generator.oidc.providers; import static io.quarkiverse.openapi.generator.AuthConfig.TOKEN_PROPAGATION; @@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory; import io.quarkiverse.openapi.generator.AuthConfig; +import io.quarkiverse.openapi.generator.providers.AbstractAuthProvider; +import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.oidc.common.runtime.OidcConstants; public class OAuth2AuthenticationProvider extends AbstractAuthProvider { diff --git a/client/pom.xml b/client/pom.xml index c82086b00..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -15,5 +15,6 @@ deployment runtime test-utils + oidc \ No newline at end of file diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index b0b2ab4aa..d50c39f2c 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -37,16 +37,6 @@ provided - - io.quarkus - quarkus-rest-client-oidc-filter - true - - - io.quarkus - quarkus-resteasy-client-oidc-filter - true - org.assertj assertj-core @@ -67,6 +57,11 @@ quarkus-junit5 test + + org.jboss.resteasy + resteasy-core + test + diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java index 5a1e57987..e768cdd59 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java @@ -17,7 +17,6 @@ public class AuthConfig { public static final String TOKEN_PROPAGATION = "token-propagation"; - public static final String HEADER_NAME = "header-name"; /** * Enables the authentication token propagation for this particular securityScheme. diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java index c94127edc..be8dabbc0 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java @@ -14,8 +14,6 @@ import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BearerAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.SyntheticCreationalContext; import io.quarkus.runtime.annotations.Recorder; @@ -45,7 +43,7 @@ public Function, AuthProvider> recordAp String apiKeyName, List operations) { return context -> new ApiKeyAuthenticationProvider(openApiSpecId, name, apiKeyIn, apiKeyName, - getAuthConfig(openApiSpecId, name), + getAuthConfig(generatorConfig, openApiSpecId, name), operations); } @@ -54,7 +52,8 @@ public Function, AuthProvider> recordBe String scheme, String openApiSpecId, List operations) { - return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, getAuthConfig(openApiSpecId, name), + return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, + getAuthConfig(generatorConfig, openApiSpecId, name), operations); } @@ -62,18 +61,11 @@ public Function, AuthProvider> recordBa String name, String openApiSpecId, List operations) { - return context -> new BasicAuthenticationProvider(openApiSpecId, name, getAuthConfig(openApiSpecId, name), operations); + return context -> new BasicAuthenticationProvider(openApiSpecId, name, + getAuthConfig(generatorConfig, openApiSpecId, name), operations); } - public Function, AuthProvider> recordOauthAuthProvider( - String name, - String openApiSpecId, - List operations) { - return context -> new OAuth2AuthenticationProvider(getAuthConfig(openApiSpecId, name), name, openApiSpecId, - context.getInjectedReference(OidcClientRequestFilterDelegate.class, new OidcClient.Literal(name)), operations); - } - - AuthConfig getAuthConfig(String openApiSpecId, String name) { + public static AuthConfig getAuthConfig(OpenApiGeneratorConfig generatorConfig, String openApiSpecId, String name) { return Objects.requireNonNull(generatorConfig, "generatorConfig can't be null.") .getItemConfig(openApiSpecId) .flatMap(SpecItemConfig::getAuth) diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java index 2387cff63..2e4523efc 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java @@ -1,8 +1,5 @@ package io.quarkiverse.openapi.generator.providers; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.lenient; - import java.util.HashMap; import java.util.Optional; @@ -10,9 +7,11 @@ import jakarta.ws.rs.core.MultivaluedHashMap; import jakarta.ws.rs.core.MultivaluedMap; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import io.quarkiverse.openapi.generator.AuthConfig; @@ -59,11 +58,11 @@ protected void createConfiguration() { specItemConfig.auth.authConfigs.put(AUTH_SCHEME_NAME, authConfig); generatorConfig.itemConfigs.put(OPEN_API_FILE_SPEC_ID, specItemConfig); headers = new MultivaluedHashMap<>(); - lenient().doReturn(headers).when(requestContext).getHeaders(); + Mockito.lenient().doReturn(headers).when(requestContext).getHeaders(); } protected void assertHeader(MultivaluedMap headers, String headerName, String value) { - assertThat(headers.getFirst(headerName)) + Assertions.assertThat(headers.getFirst(headerName)) .isNotNull() .isEqualTo(value); } diff --git a/docs/modules/ROOT/pages/includes/authentication-support.adoc b/docs/modules/ROOT/pages/includes/authentication-support.adoc index a51e9bc1d..4fa038e08 100644 --- a/docs/modules/ROOT/pages/includes/authentication-support.adoc +++ b/docs/modules/ROOT/pages/includes/authentication-support.adoc @@ -134,12 +134,18 @@ quarkus.oidc-client.petstore_auth.client-id=petstore-app The configuration suffix `quarkus.oidc-client.petstore_auth` is exclusive for the schema defined in the specification file and the `schemaName` is sanitized by applying the rules described above. -For this to work you **must** add https://quarkus.io/guides/security-openid-connect-client#oidc-client-filter[Quarkus OIDC Client Filter Extension] to your project: +For this to work you **must** add https://quarkus.io/guides/security-openid-connect-client#oidc-client-filter[Quarkus OIDC Client Filter Extension] to your project. + +IMPORTANT: From version 2.7.0 and onwards you must also add the `quarkus-openapi-generator-oidc` additional dependency. Please see the details below. RESTEasy Classic: [source ,xml] ---- + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + io.quarkus quarkus-oidc-client-filter @@ -150,6 +156,10 @@ RESTEasy Reactive: [source ,xml] ---- + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + io.quarkus quarkus-oidc-client-reactive-filter From 71c998882742250250e5b54ac68d628e6fe16aa3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Nov 2024 08:03:05 -0300 Subject: [PATCH 020/166] Bump quarkus.version from 3.17.0 to 3.17.2 (#877) Bumps `quarkus.version` from 3.17.0 to 3.17.2. Updates `io.quarkus:quarkus-bom` from 3.17.0 to 3.17.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.0...3.17.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.0 to 3.17.2 Updates `io.quarkus:quarkus-extension-processor` from 3.17.0 to 3.17.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.0 to 3.17.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.0...3.17.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5af75c35e..399616b82 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.0 + 3.17.2 1.1.1.Final 3.26.2 3.26.3 From fe4c1f51aa81a8e3be355d643fd32dcd001cf68c Mon Sep 17 00:00:00 2001 From: Richard Alm <44467351+denvitaharen@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:33:31 +0100 Subject: [PATCH 021/166] Added feature to set schema mappings when generation clients. (#846) * Added feature to set schema mappings when generation clients. * Updated Restreactive test with schemamapping * Updated the YearMonth schema to be correct format. * Updated the documentation --------- Co-authored-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- .../generator/deployment/CodegenConfig.java | 1 + .../deployment/CommonItemConfig.java | 7 +++++++ .../codegen/OpenApiGeneratorCodeGenBase.java | 3 +++ .../OpenApiClientGeneratorWrapper.java | 5 +++++ .../main/openapi/type-mappings-testing.yml | 19 +++++++++++++++++++ .../src/main/resources/application.properties | 1 + ...peAndImportMappingRestEasyClassicTest.java | 9 ++++++++- ...eAndImportMappingRestEasyReactiveTest.java | 9 +++++++++ docs/modules/ROOT/pages/client.adoc | 7 +++++-- 9 files changed, 58 insertions(+), 3 deletions(-) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index c913586e8..7e13e55b3 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -58,6 +58,7 @@ public enum ConfigName { ADDITIONAL_API_TYPE_ANNOTATIONS("additional-api-type-annotations"), TYPE_MAPPINGS("type-mappings"), IMPORT_MAPPINGS("import-mappings"), + SCHEMA_MAPPINGS("schema-mappings"), NORMALIZER("open-api-normalizer"), RETURN_RESPONSE("return-response"), ENABLE_SECURITY_GENERATION("enable-security-generation"), diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index 9a6baed5a..a43e7b810 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -36,6 +36,13 @@ public class CommonItemConfig { @ConfigItem(name = "import-mappings") public Map importMappings; + /** + * Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be + * imported when a given schema type (the keys of this map) is used + */ + @ConfigItem(name = "schema-mappings") + public Map schemaMappings; + /** * The specified annotations will be added to the generated model files */ diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index c2b0dd8f0..c2de0465b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -296,6 +296,9 @@ protected void generate(OpenApiGeneratorOptions options) { getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.IMPORT_MAPPINGS, String.class, String.class) .ifPresent(generator::withImportMappings); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.SCHEMA_MAPPINGS, String.class, String.class) + .ifPresent(generator::withSchemaMappings); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.NORMALIZER, String.class, String.class) .ifPresent(generator::withOpenApiNormalizer); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index e8cb162df..569c1be2b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -188,6 +188,11 @@ public OpenApiClientGeneratorWrapper withImportMappings(final Map typeMappings) { + typeMappings.forEach(configurator::addSchemaMapping); + return this; + } + public OpenApiClientGeneratorWrapper withOpenApiNormalizer(final Map openApiNormalizer) { configurator.setOpenapiNormalizer(openApiNormalizer); return this; diff --git a/client/integration-tests/type-mapping/src/main/openapi/type-mappings-testing.yml b/client/integration-tests/type-mapping/src/main/openapi/type-mappings-testing.yml index d48b71c3e..0a54c5c9c 100644 --- a/client/integration-tests/type-mapping/src/main/openapi/type-mappings-testing.yml +++ b/client/integration-tests/type-mapping/src/main/openapi/type-mappings-testing.yml @@ -36,6 +36,23 @@ components: UserId: type: string format: uuid + YearMonth: + type: object + properties: + year: + format: int32 + type: integer + month: + format: int32 + type: integer + prolepticMonth: + format: int64 + type: integer + monthValue: + format: int32 + type: integer + leapYear: + type: boolean MultipartRequestBody: type: object @@ -46,5 +63,7 @@ components: $ref: '#/components/schemas/SomeDateTime' binaryStringFile: $ref: '#/components/schemas/BinaryStringFile' + yearMonth: + $ref: '#/components/schemas/YearMonth' diff --git a/client/integration-tests/type-mapping/src/main/resources/application.properties b/client/integration-tests/type-mapping/src/main/resources/application.properties index 8a347ccf3..dbaee9734 100644 --- a/client/integration-tests/type-mapping/src/main/resources/application.properties +++ b/client/integration-tests/type-mapping/src/main/resources/application.properties @@ -1,6 +1,7 @@ quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.UUID=String quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.File=InputStream quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.import-mappings.File=java.io.InputStream +quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.schema-mappings.YearMonth=java.time.YearMonth quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.base-package=org.acme.openapi.typemapping quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(io.quarkiverse.openapi.generator.it.type.mapping.OffsetDateTimeParamConverterProvider.class) diff --git a/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyClassicTest.java b/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyClassicTest.java index 89d21966e..77ee7be17 100644 --- a/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyClassicTest.java +++ b/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyClassicTest.java @@ -9,6 +9,7 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.time.OffsetDateTime; +import java.time.YearMonth; import java.time.ZoneOffset; import jakarta.inject.Inject; @@ -41,10 +42,12 @@ class TypeAndImportMappingRestEasyClassicTest { public void canMapTypesAndImportToDifferentValues() { final String testUuid = "00112233-4455-6677-8899-aabbccddeeff"; final InputStream testFile = new ByteArrayInputStream("Content of the file".getBytes(StandardCharsets.UTF_8)); + final YearMonth testYearMonth = YearMonth.parse("2024-06"); TypeMappingApi.PostTheDataMultipartForm requestBody = new TypeMappingApi.PostTheDataMultipartForm(); requestBody.id = testUuid; // String instead of UUID requestBody.binaryStringFile = testFile; // InputStream instead of File + requestBody.yearMonth = testYearMonth; // YearMonth instead of String // dateTime remains OffsetDateTime (as is default) requestBody.dateTime = OffsetDateTime.of(2000, 2, 13, 4, 5, 6, 0, ZoneOffset.UTC); @@ -63,6 +66,10 @@ public void canMapTypesAndImportToDifferentValues() { .withName("binaryStringFile") .withHeader("Content-Disposition", containing("filename=")) .withHeader(ContentTypeHeader.KEY, equalTo(MediaType.APPLICATION_OCTET_STREAM)) - .withBody(equalTo("Content of the file")).build())); + .withBody(equalTo("Content of the file")).build()) + .withRequestBodyPart(new MultipartValuePatternBuilder() + .withName("yearMonth") + .withHeader(ContentTypeHeader.KEY, equalTo(MediaType.APPLICATION_JSON)) + .withBody(equalTo("\"2024-06\"")).build())); } } diff --git a/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyReactiveTest.java b/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyReactiveTest.java index f18fc10f7..6909b89fb 100644 --- a/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyReactiveTest.java +++ b/client/integration-tests/type-mapping/src/test/java/io/quarkiverse/openapi/generator/it/type/mapping/TypeAndImportMappingRestEasyReactiveTest.java @@ -5,6 +5,7 @@ import java.io.*; import java.nio.charset.StandardCharsets; import java.time.OffsetDateTime; +import java.time.YearMonth; import java.time.ZoneOffset; import jakarta.inject.Inject; @@ -37,10 +38,12 @@ public class TypeAndImportMappingRestEasyReactiveTest { public void canMapTypesAndImportToDifferentValues() { final String testUuid = "00112233-4455-6677-8899-aabbccddeeff"; final InputStream testFile = new ByteArrayInputStream("Content of the file".getBytes(StandardCharsets.UTF_8)); + final YearMonth testYearMonth = YearMonth.parse("2024-06"); TypeMappingApi.PostTheDataMultipartForm requestBody = new TypeMappingApi.PostTheDataMultipartForm(); requestBody.id = testUuid; // String instead of UUID requestBody.binaryStringFile = testFile; // InputStream instead of File + requestBody.yearMonth = testYearMonth; // YearMonth instead of String // dateTime remains OffsetDateTime (as is default) requestBody.dateTime = OffsetDateTime.of(2000, 2, 13, 4, 5, 6, 0, ZoneOffset.UTC); @@ -52,6 +55,12 @@ public void canMapTypesAndImportToDifferentValues() { .withHeader(ContentTypeHeader.KEY, equalTo(MediaType.TEXT_PLAIN + "; charset=UTF-8")) .withBody(equalTo(testUuid)).build())); + typeMappingServer.verify(postRequestedFor(urlEqualTo("/type-mapping")) + .withRequestBodyPart(new MultipartValuePatternBuilder() + .withName("yearMonth") + .withHeader(ContentTypeHeader.KEY, equalTo(MediaType.APPLICATION_JSON)) + .withBody(equalTo("\"2024-06\"")).build())); + typeMappingServer.verify(postRequestedFor(urlEqualTo("/type-mapping")) .withRequestBodyPart(new MultipartValuePatternBuilder() .withName("dateTime") diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index 95ad693fc..7f14d4e81 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -115,7 +115,7 @@ See the module `integration-tests/register-provider` for an example of how to us Use the property key `quarkus.openapi-generator.codegen.validateSpec=false` to disable validating the input specification file before code generation. By default, invalid specifications will result in an error. -== Type and import mappings +== Type, schema and import mappings It's possible to remap types in the generated files. For example, instead of a `File` you can configure the code generator to use `InputStream` for all file upload parts of multipart request, or you could change all `UUID` types to `String`. You can configure this in your `application.properties` using the following configuration keys: @@ -129,6 +129,9 @@ It's possible to remap types in the generated files. For example, instead of a ` |Import Mapping |`quarkus.openapi-generator.codegen.spec.[filename].import-mappings.[type]` |`quarkus.openapi-generator.codegen.spec.my_spec_yml.import-mappings.File=java.io.InputStream` will replace the default `import java.io.File` with `import java.io.InputStream` +|Schema Mapping +|`quarkus.openapi-generator.codegen.spec.[filename].schema-mappings.[type]` +|`quarkus.openapi-generator.codegen.spec.my_spec_yml.schema-mappings.YearMonth=java.time.YearMonth` will use `java.time.YearMonth` as type for all schemas of the chosen type in the file. |=== Note that these configuration properties are maps. For the type-mapping the keys are OAS data types and the values are Java types. @@ -141,7 +144,7 @@ quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.DateTime=Instan quarkus.openapi-generator.codegen.spec.my_spec_yml.import-mappings.Instant=java.time.Instant ---- -It's also possible to only use a type mapping with a fully qualified name, for instance `quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.File=java.io.InputStream`. For more information and a list of all types see the OpenAPI generator documentation on https://openapi-generator.tech/docs/usage/#type-mappings-and-import-mappings[Type Mappings and Import Mappings]. +It's also possible to only use a type mapping with a fully qualified name, for instance `quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.File=java.io.InputStream`. For more information and a list of all types see the OpenAPI generator documentation on https://openapi-generator.tech/docs/usage/#type-mappings-and-import-mappings[Type Mappings and Import Mappings] and https://openapi-generator.tech/docs/customization#schema-mapping[Schema mapping]. See the module https://github.com/quarkiverse/quarkus-openapi-generator/tree/main/integration-tests/type-mapping[type-mapping] for an example of how to use this feature. From 2711260396200415a193068744334222ce207d7e Mon Sep 17 00:00:00 2001 From: yuhaibohotmail <48646226+yuhaibohotmail@users.noreply.github.com> Date: Fri, 29 Nov 2024 23:48:05 +0800 Subject: [PATCH 022/166] remove operation id prefix (#873) --- .../generator/deployment/CodegenConfig.java | 1 + .../generator/deployment/SpecItemConfig.java | 7 ++ .../codegen/OpenApiGeneratorCodeGenBase.java | 9 ++ .../OpenApiClientGeneratorWrapper.java | 5 + client/integration-tests/pom.xml | 1 + .../remove-operationid-prefix/pom.xml | 91 +++++++++++++++ .../openapi-remove-operation-id-prefix.yaml | 108 ++++++++++++++++++ .../src/main/resources/application.properties | 2 + .../it/RemoveOperationIdPrefixTest.java | 33 ++++++ .../ROOT/pages/includes/getting-started.adoc | 7 ++ 10 files changed, 264 insertions(+) create mode 100644 client/integration-tests/remove-operationid-prefix/pom.xml create mode 100644 client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-remove-operation-id-prefix.yaml create mode 100644 client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties create mode 100644 client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index 7e13e55b3..d6499b352 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -68,6 +68,7 @@ public enum ConfigName { USE_FIELD_NAME_IN_PART_FILENAME("use-field-name-in-part-filename"), ADDITIONAL_PROPERTIES_AS_ATTRIBUTE("additional-properties-as-attribute"), ADDITIONAL_REQUEST_ARGS("additional-request-args"), + REMOVE_OPERATION_ID_PREFIX("remove-operation-id-prefix"), BEAN_VALIDATION("use-bean-validation"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index 36a42cbb4..9be9e42dd 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -38,4 +38,11 @@ public class SpecItemConfig extends CommonItemConfig { */ @ConfigItem(name = "model-name-prefix") public Optional modelNamePrefix; + + /** + * Remove operation id prefix + */ + @ConfigItem(name = "remove-operation-id-prefix") + public Optional removeOperationIdPrefix; + } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index c2de0465b..e7b5a84d1 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -13,6 +13,7 @@ import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.INPUT_BASE_DIR; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_PREFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_SUFFIX; +import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.TEMPLATE_BASE_DIR; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.VALIDATE_SPEC; @@ -228,6 +229,9 @@ protected void generate(OpenApiGeneratorOptions options) { getModelNamePrefix(config, openApiFilePath) .ifPresent(generator::withModelNamePrefix); + getRemoveOperationIdPrefix(config, openApiFilePath) + .ifPresent(generator::withRemoveOperationIdPrefix); + getValues(config, openApiFilePath, CodegenConfig.ConfigName.MUTINY, Boolean.class) .ifPresent(generator::withMutiny); @@ -353,6 +357,11 @@ private Optional getModelNamePrefix(final Config config, final Path open .getOptionalValue(getSpecConfigName(MODEL_NAME_PREFIX, openApiFilePath), String.class); } + private Optional getRemoveOperationIdPrefix(final Config config, final Path openApiFilePath) { + return config + .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX, openApiFilePath), Boolean.class); + } + private Optional getInputBaseDirRelativeToModule(final Path sourceDir, final Config config) { return config.getOptionalValue(getGlobalConfigName(INPUT_BASE_DIR), String.class).map(baseDir -> { int srcIndex = sourceDir.toString().lastIndexOf("src"); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 569c1be2b..746aca903 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -285,6 +285,11 @@ public OpenApiClientGeneratorWrapper withModelNameSuffix(final String modelNameS return this; } + public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefix(final Boolean removeOperationIdPrefix) { + this.configurator.setRemoveOperationIdPrefix(removeOperationIdPrefix); + return this; + } + public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNamePrefix) { this.configurator.setModelNamePrefix(modelNamePrefix); return this; diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 4f99da25c..5af185407 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -33,6 +33,7 @@ part-filename polymorphism return-response + remove-operationid-prefix security simple skip-validation diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml new file mode 100644 index 000000000..480678d50 --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-integration-tests + 3.0.0-SNAPSHOT + + + quarkus-openapi-generator-it-remove-operationid-prefix + Quarkus - Openapi Generator - Integration Tests - Client - remove operation id prefix + Example project for general usage with remove operation id prefix + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-remove-operation-id-prefix.yaml b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-remove-operation-id-prefix.yaml new file mode 100644 index 000000000..270c78d9c --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-remove-operation-id-prefix.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: UserResource_findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: UserResource_add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: UserResource_find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: UserResource_update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: UserResource_delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties new file mode 100644 index 000000000..cef3041dd --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties @@ -0,0 +1,2 @@ +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 +quarkus.openapi-generator.codegen.spec.openapi_remove_operation_id_prefix_yaml.remove-operation-id-prefix=true diff --git a/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java new file mode 100644 index 000000000..64d0b9833 --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java @@ -0,0 +1,33 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.assertj.core.api.Assertions.assertThatCode; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class RemoveOperationIdPrefixTest { + + String apiClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.model.User"; + + @Test + void apiIsBeingGenerated() { + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("findAll")) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("add", Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("update", Integer.class, Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("delete", Integer.class)) + .doesNotThrowAnyException(); + + } +} diff --git a/docs/modules/ROOT/pages/includes/getting-started.adoc b/docs/modules/ROOT/pages/includes/getting-started.adoc index e1cf60fa9..25296f58a 100644 --- a/docs/modules/ROOT/pages/includes/getting-started.adoc +++ b/docs/modules/ROOT/pages/includes/getting-started.adoc @@ -88,6 +88,13 @@ quarkus.openapi-generator.codegen.spec.petstore_json.model-name-suffix=CustomMod quarkus.openapi-generator.codegen.spec.petstore_json.model-name-prefix=CustomModelPrefix ---- +You can remove operationId prefix (e.g. User_findAll=> findAll). To do that, you must define the following properties: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix=true +---- + The same way you can add any additional annotations to the generated api files with `additional-api-type-annotations`. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as: [source,properties] From 2d82c3794fe7b8c6657a2bd3840a8ba009f49171 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Mon, 2 Dec 2024 06:43:43 -0500 Subject: [PATCH 023/166] NO-ISSUE: Upgrade WireMock to `3.9.2`; Add Jboss RestEasy Multipart to IT (#882) * NO-ISSUE: Upgrade WireMock; Add Jboss RestEasy Multipart to IT Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> * Remove leftovers Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --------- Signed-off-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- client/integration-tests/beanparam/pom.xml | 4 ++-- .../change-custom-template-directory/pom.xml | 4 ++-- client/integration-tests/change-directory/pom.xml | 4 ++-- client/integration-tests/cookie-authentication/pom.xml | 4 ++-- client/integration-tests/enum-property/pom.xml | 4 ++-- .../openapi/generator/it/EnumPropertyTest.java | 4 +--- client/integration-tests/enum-unexpected/pom.xml | 4 ++-- .../openapi/generator/it/EnumUnexpectedTest.java | 9 +++------ client/integration-tests/generation-tests/pom.xml | 4 ++-- client/integration-tests/multipart-request/pom.xml | 4 ++-- client/integration-tests/open-api-normalizer/pom.xml | 4 ++-- client/integration-tests/polymorphism/pom.xml | 4 ++-- .../openapi/generator/it/PolymorphismTest.java | 4 +--- client/integration-tests/pom.xml | 10 +++++++--- client/integration-tests/security/pom.xml | 4 ++-- client/integration-tests/skip-validation/pom.xml | 4 ++-- client/integration-tests/type-mapping/pom.xml | 4 ++-- client/test-utils/pom.xml | 4 ++-- pom.xml | 8 ++++---- 19 files changed, 44 insertions(+), 47 deletions(-) diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index a73d12a8a..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -27,8 +27,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 9532fb2bc..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -20,8 +20,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 49bfa265e..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -20,8 +20,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index f5a5a9831..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -28,8 +28,8 @@ - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index d96a13f83..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -27,8 +27,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/enum-property/src/test/java/io/quarkiverse/openapi/generator/it/EnumPropertyTest.java b/client/integration-tests/enum-property/src/test/java/io/quarkiverse/openapi/generator/it/EnumPropertyTest.java index b3f79f406..38a70da7a 100644 --- a/client/integration-tests/enum-property/src/test/java/io/quarkiverse/openapi/generator/it/EnumPropertyTest.java +++ b/client/integration-tests/enum-property/src/test/java/io/quarkiverse/openapi/generator/it/EnumPropertyTest.java @@ -20,7 +20,6 @@ import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; @@ -67,8 +66,7 @@ public Map start() { } private void configureWiremockServer() { - var wireMockConfiguration = WireMockConfiguration.wireMockConfig() - .extensions(new ResponseTemplateTransformer(false)).dynamicPort(); + var wireMockConfiguration = WireMockConfiguration.wireMockConfig().dynamicPort(); wireMockServer = new WireMockServer(wireMockConfiguration); wireMockServer.start(); diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 9d3aea7c4..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -27,8 +27,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/enum-unexpected/src/test/java/io/quarkiverse/openapi/generator/it/EnumUnexpectedTest.java b/client/integration-tests/enum-unexpected/src/test/java/io/quarkiverse/openapi/generator/it/EnumUnexpectedTest.java index 1a0225723..e72f2c830 100644 --- a/client/integration-tests/enum-unexpected/src/test/java/io/quarkiverse/openapi/generator/it/EnumUnexpectedTest.java +++ b/client/integration-tests/enum-unexpected/src/test/java/io/quarkiverse/openapi/generator/it/EnumUnexpectedTest.java @@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.exc.ValueInstantiationException; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; @@ -35,6 +34,8 @@ class EnumUnexpectedTest { @RestClient @Inject org.openapi.quarkus.with_enum_unexpected_yaml.api.DefaultApi api; + @Inject + ObjectMapper objectMapper; @Test void apiIsBeingGenerated() { @@ -45,9 +46,6 @@ void apiIsBeingGenerated() { .isEqualTo(org.openapi.quarkus.with_enum_unexpected_yaml.model.Echo.MsgTypeEnum.UNEXPECTED); } - @Inject - ObjectMapper objectMapper; - @Test void when_additional_enum_type_unexpected_member_is_true_should_have_extra_member() { AssertionsForClassTypes.assertThat(org.openapi.quarkus.with_enum_unexpected_yaml.model.Echo.MsgTypeEnum.class) @@ -89,8 +87,7 @@ public Map start() { } private void configureWiremockServer() { - var wireMockConfiguration = WireMockConfiguration.wireMockConfig() - .extensions(new ResponseTemplateTransformer(false)).dynamicPort(); + var wireMockConfiguration = WireMockConfiguration.wireMockConfig().dynamicPort(); wireMockServer = new WireMockServer(wireMockConfiguration); wireMockServer.start(); diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index e845744ce..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -25,8 +25,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 56283cfe0..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -21,8 +21,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index a8272f284..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -26,8 +26,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 780db7791..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -21,8 +21,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/polymorphism/src/test/java/io/quarkiverse/openapi/generator/it/PolymorphismTest.java b/client/integration-tests/polymorphism/src/test/java/io/quarkiverse/openapi/generator/it/PolymorphismTest.java index fc527cd23..edc8c50de 100644 --- a/client/integration-tests/polymorphism/src/test/java/io/quarkiverse/openapi/generator/it/PolymorphismTest.java +++ b/client/integration-tests/polymorphism/src/test/java/io/quarkiverse/openapi/generator/it/PolymorphismTest.java @@ -15,7 +15,6 @@ import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; @@ -52,8 +51,7 @@ public Map start() { } private void configureWiremockServer() { - var wireMockConfiguration = WireMockConfiguration.wireMockConfig() - .extensions(new ResponseTemplateTransformer(false)).dynamicPort(); + var wireMockConfiguration = WireMockConfiguration.wireMockConfig().dynamicPort(); wireMockServer = new WireMockServer(wireMockConfiguration); wireMockServer.start(); diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 5af185407..db367b2e5 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -46,9 +46,9 @@ - com.github.tomakehurst - wiremock-jre8 - ${version.com.github.tomakehurst} + org.wiremock + wiremock + ${version.org.wiremock} test @@ -74,6 +74,10 @@ io.quarkus quarkus-resteasy-client-jackson + + org.jboss.resteasy + resteasy-multipart-provider + diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 26ce6f3fd..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -26,8 +26,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 8cedef1bf..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -22,8 +22,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 78c5b6372..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -21,8 +21,8 @@ test - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock test diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 354e59fa5..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -22,8 +22,8 @@ compile - com.github.tomakehurst - wiremock-jre8 + org.wiremock + wiremock io.quarkus diff --git a/pom.xml b/pom.xml index 399616b82..39d1acba8 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.26.2 3.26.3 4.1.1 - 2.35.2 + 3.9.2 @@ -63,9 +63,9 @@ ${apicurio.version} - com.github.tomakehurst - wiremock-jre8 - ${version.com.github.tomakehurst} + org.wiremock + wiremock + ${version.org.wiremock} From 02aab42bac0e2f19df4785af0bf0bfccb709ac52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 08:45:40 -0300 Subject: [PATCH 024/166] Bump dawidd6/action-download-artifact from 6 to 7 (#887) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 6 to 7. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 8b865d9a0..ab217045f 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -12,7 +12,7 @@ jobs: if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - name: Download PR Artifact - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v7 with: workflow: ${{ github.event.workflow_run.workflow_id }} workflow_conclusion: success From f335857d7f15edc25255b0d0b735815cdbe2085a Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Tue, 3 Dec 2024 06:01:42 -0500 Subject: [PATCH 025/166] Release 2.7.0 (#891) Merge this after LTS. --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 8b76a1f78..739d752aa 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.6.0 + current-version: 2.7.0 next-version: 3.0.0-SNAPSHOT From 69aa48516fabc96a95324241ce26e77f3738a0c5 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:02:22 +0000 Subject: [PATCH 026/166] Update the latest release version 2.7.0 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index ac5c3cf6f..3dcadcb26 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.6.0 +:project-version: 2.7.0 :examples-dir: ./../examples/ From a86a22b3089b63be1cc239883af9cac6960a496f Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:10:01 +0000 Subject: [PATCH 027/166] [maven-release-plugin] prepare release 2.7.0 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 6 ++---- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 45 files changed, 47 insertions(+), 49 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 0652da716..f9ab73be7 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..451d49d99 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..a3c732f22 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..842b7f6b9 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..0fa70cc0e 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..dfd980567 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..1820ea3d0 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..83f73de82 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..af0e3ee4f 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..3e3a3f857 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..496c57f8f 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..ca0d881d5 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..7e2cdc6f1 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..3693a8726 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..c97be9427 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..3a525144b 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..56b343196 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..94b75c3fa 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..2766ee5bf 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..2a2ef1917 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..800109b30 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..b82728e32 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..af955a93a 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..b26de4cbe 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index db367b2e5..c19ed6db5 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..148faab23 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..8488f3324 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..28c59abdb 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..a2742e691 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..4cf23d6b7 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..7fe6475fb 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..6aca38e26 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..f7244dbf7 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 9b4601ab7..2706dc178 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.0 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..0abf7f99d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index d50c39f2c..278fc82ab 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..01ae2c7f2 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index bc3f73da5..3e2fc7b2a 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 39d1acba8..487cefdb5 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.7.0 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.7.0 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 7c9619120..2fefcf30b 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..38a3a5725 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..ee90c933b 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..82c13214c 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..57e04a733 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 79ce725a3..7e65896f7 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.0 ../pom.xml 4.0.0 From f2e8856c7ab6fdc5f1bb43c7021a292587da65e1 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:10:01 +0000 Subject: [PATCH 028/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 45 files changed, 46 insertions(+), 46 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index f9ab73be7..0652da716 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 451d49d99..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index a3c732f22..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 842b7f6b9..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fa70cc0e..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index dfd980567..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 1820ea3d0..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 83f73de82..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index af0e3ee4f..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 3e3a3f857..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 496c57f8f..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index ca0d881d5..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 7e2cdc6f1..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 3693a8726..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index c97be9427..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 3a525144b..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 56b343196..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 94b75c3fa..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 2766ee5bf..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 2a2ef1917..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index 800109b30..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index b82728e32..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index af955a93a..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index b26de4cbe..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index c19ed6db5..db367b2e5 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 148faab23..480678d50 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 8488f3324..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 28c59abdb..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index a2742e691..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 4cf23d6b7..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 7fe6475fb..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 6aca38e26..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index f7244dbf7..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 2706dc178..85ba7c0ad 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 0abf7f99d..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 278fc82ab..d50c39f2c 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 01ae2c7f2..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 3e2fc7b2a..bc3f73da5 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 487cefdb5..39d1acba8 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.7.0 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.7.0 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 2fefcf30b..7c9619120 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 38a3a5725..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index ee90c933b..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 82c13214c..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 57e04a733..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 7e65896f7..79ce725a3 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 372725d7ea8cc94ccc24a00670d6c6f612e799f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 08:10:54 -0300 Subject: [PATCH 029/166] Bump org.wiremock:wiremock from 3.9.2 to 3.10.0 (#892) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.9.2 to 3.10.0. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.9.2...3.10.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 39d1acba8..fd7129dad 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.26.2 3.26.3 4.1.1 - 3.9.2 + 3.10.0 From babae9b66fdb0413ebecaff2bf4c6fc12c5c4e43 Mon Sep 17 00:00:00 2001 From: yuhaibohotmail <48646226+yuhaibohotmail@users.noreply.github.com> Date: Wed, 4 Dec 2024 06:17:03 +0800 Subject: [PATCH 030/166] Fix path generate (#884) * fix path generate * integration tests * Update application.properties --- .../templates/libraries/microprofile/api.qute | 2 +- client/integration-tests/path/pom.xml | 91 +++++++++++++++ .../openapi-path-with-forward-slash.yaml | 108 ++++++++++++++++++ .../path/src/main/openapi/openapi-path.yaml | 108 ++++++++++++++++++ .../src/main/resources/application.properties | 1 + .../openapi/generator/it/PathTest.java | 106 +++++++++++++++++ client/integration-tests/pom.xml | 1 + 7 files changed, 416 insertions(+), 1 deletion(-) create mode 100644 client/integration-tests/path/pom.xml create mode 100644 client/integration-tests/path/src/main/openapi/openapi-path-with-forward-slash.yaml create mode 100644 client/integration-tests/path/src/main/openapi/openapi-path.yaml create mode 100644 client/integration-tests/path/src/main/resources/application.properties create mode 100644 client/integration-tests/path/src/test/java/io/quarkiverse/openapi/generator/it/PathTest.java 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 d315a412a..218d5a5e4 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -43,7 +43,7 @@ public interface {classname} { @io.quarkiverse.openapi.generator.markers.OperationMarker(name="{defaultSecurityScheme}", openApiSpecId="{quarkus-generator.openApiSpecId}", operationId="{op.operationId}", method="{op.httpMethod}", path="{contextPath}{commonPath}{op.path.orEmpty}") {/if} @jakarta.ws.rs.{op.httpMethod} - {#if op.subresourceOperation} + {#if op.subresourceOperation || op.path eq '/'} @jakarta.ws.rs.Path("{op.path}") {/if} {#if op.hasConsumes} diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml new file mode 100644 index 000000000..c9e9f38dd --- /dev/null +++ b/client/integration-tests/path/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-integration-tests + 3.0.0-SNAPSHOT + + + quarkus-openapi-generator-it-path + Quarkus - Openapi Generator - Integration Tests - Client - path + Test from path + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/path/src/main/openapi/openapi-path-with-forward-slash.yaml b/client/integration-tests/path/src/main/openapi/openapi-path-with-forward-slash.yaml new file mode 100644 index 000000000..50a12a951 --- /dev/null +++ b/client/integration-tests/path/src/main/openapi/openapi-path-with-forward-slash.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users/: + get: + tags: + - User Resource + description: Find All + operationId: UserResource_findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: UserResource_add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: UserResource_find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: UserResource_update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: UserResource_delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/path/src/main/openapi/openapi-path.yaml b/client/integration-tests/path/src/main/openapi/openapi-path.yaml new file mode 100644 index 000000000..270c78d9c --- /dev/null +++ b/client/integration-tests/path/src/main/openapi/openapi-path.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: UserResource_findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: UserResource_add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: UserResource_find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: UserResource_update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: UserResource_delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/path/src/main/resources/application.properties b/client/integration-tests/path/src/main/resources/application.properties new file mode 100644 index 000000000..11a6c1a9f --- /dev/null +++ b/client/integration-tests/path/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 diff --git a/client/integration-tests/path/src/test/java/io/quarkiverse/openapi/generator/it/PathTest.java b/client/integration-tests/path/src/test/java/io/quarkiverse/openapi/generator/it/PathTest.java new file mode 100644 index 000000000..b65b22015 --- /dev/null +++ b/client/integration-tests/path/src/test/java/io/quarkiverse/openapi/generator/it/PathTest.java @@ -0,0 +1,106 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.assertj.core.api.Assertions.assertThat; + +import jakarta.ws.rs.Path; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class PathTest { + + @Test + void testPathGenerated() throws ClassNotFoundException, NoSuchMethodException { + String apiClassName = "org.openapi.quarkus.openapi_path_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_path_yaml.model.User"; + + assertThat( + Class.forName(apiClassName) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/users"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceFind", Integer.class) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceFindAll") + .getAnnotation(Path.class)) + .isNull(); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceAdd", Class.forName(modelClassName)) + .getAnnotation(Path.class)) + .isNull(); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceUpdate", Integer.class, Class.forName(modelClassName)) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceDelete", Integer.class) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + } + + @Test + void testPathWithForwardSlashGenerated() throws ClassNotFoundException, NoSuchMethodException { + String apiClassName = "org.openapi.quarkus.openapi_path_with_forward_slash_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_path_with_forward_slash_yaml.model.User"; + + assertThat( + Class.forName(apiClassName) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/users"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceFind", Integer.class) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceFindAll") + .getAnnotation(Path.class) + .value()) + .isEqualTo("/"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceAdd", Class.forName(modelClassName)) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceUpdate", Integer.class, Class.forName(modelClassName)) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + + assertThat( + Class.forName(apiClassName) + .getMethod("userResourceDelete", Integer.class) + .getAnnotation(Path.class) + .value()) + .isEqualTo("/{id}"); + } + +} diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index db367b2e5..1a69f36e3 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -31,6 +31,7 @@ mutiny-return-response open-api-normalizer part-filename + path polymorphism return-response remove-operationid-prefix From 07198391e682e24fc8f8b044716f97b210de6cd3 Mon Sep 17 00:00:00 2001 From: yuhaibohotmail <48646226+yuhaibohotmail@users.noreply.github.com> Date: Wed, 4 Dec 2024 06:19:22 +0800 Subject: [PATCH 031/166] Improve remove operation id prefix (#886) --- .../generator/deployment/CodegenConfig.java | 2 + .../generator/deployment/SpecItemConfig.java | 13 ++- .../codegen/OpenApiGeneratorCodeGenBase.java | 18 +++ .../OpenApiClientGeneratorWrapper.java | 10 ++ .../main/openapi/openapi-prefix-count.yaml | 108 ++++++++++++++++++ .../openapi/openapi-prefix-delimiter.yaml | 108 ++++++++++++++++++ .../src/main/resources/application.properties | 8 ++ .../it/RemoveOperationIdPrefixTest.java | 50 +++++++- .../ROOT/pages/includes/getting-started.adoc | 14 +++ 9 files changed, 327 insertions(+), 4 deletions(-) create mode 100644 client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml create mode 100644 client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index d6499b352..dd4c77eed 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -69,6 +69,8 @@ public enum ConfigName { ADDITIONAL_PROPERTIES_AS_ATTRIBUTE("additional-properties-as-attribute"), ADDITIONAL_REQUEST_ARGS("additional-request-args"), REMOVE_OPERATION_ID_PREFIX("remove-operation-id-prefix"), + REMOVE_OPERATION_ID_PREFIX_DELIMITER("remove-operation-id-prefix-delimiter"), + REMOVE_OPERATION_ID_PREFIX_COUNT("remove-operation-id-prefix-count"), BEAN_VALIDATION("use-bean-validation"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index 9be9e42dd..3eb45978f 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -43,6 +43,17 @@ public class SpecItemConfig extends CommonItemConfig { * Remove operation id prefix */ @ConfigItem(name = "remove-operation-id-prefix") - public Optional removeOperationIdPrefix; + public Optional removeOperationIdPrefix; + /** + * Remove operation id prefix + */ + @ConfigItem(name = "remove-operation-id-prefix-delimiter") + public Optional removeOperationIdPrefixDelimiter; + + /** + * Remove operation id prefix + */ + @ConfigItem(name = "remove-operation-id-prefix-count") + public Optional removeOperationIdPrefixCount; } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index e7b5a84d1..143527c08 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -14,6 +14,8 @@ import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_PREFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_SUFFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX; +import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX_COUNT; +import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX_DELIMITER; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.TEMPLATE_BASE_DIR; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.VALIDATE_SPEC; @@ -232,6 +234,12 @@ protected void generate(OpenApiGeneratorOptions options) { getRemoveOperationIdPrefix(config, openApiFilePath) .ifPresent(generator::withRemoveOperationIdPrefix); + getRemoveOperationIdPrefixDelimiter(config, openApiFilePath) + .ifPresent(generator::withRemoveOperationIdPrefixDelimiter); + + getRemoveOperationIdPrefixCount(config, openApiFilePath) + .ifPresent(generator::withRemoveOperationIdPrefixCount); + getValues(config, openApiFilePath, CodegenConfig.ConfigName.MUTINY, Boolean.class) .ifPresent(generator::withMutiny); @@ -362,6 +370,16 @@ private Optional getRemoveOperationIdPrefix(final Config config, final .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX, openApiFilePath), Boolean.class); } + private Optional getRemoveOperationIdPrefixDelimiter(final Config config, final Path openApiFilePath) { + return config + .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX_DELIMITER, openApiFilePath), String.class); + } + + private Optional getRemoveOperationIdPrefixCount(final Config config, final Path openApiFilePath) { + return config + .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX_COUNT, openApiFilePath), Integer.class); + } + private Optional getInputBaseDirRelativeToModule(final Path sourceDir, final Config config) { return config.getOptionalValue(getGlobalConfigName(INPUT_BASE_DIR), String.class).map(baseDir -> { int srcIndex = sourceDir.toString().lastIndexOf("src"); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 746aca903..56ca01450 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -290,6 +290,16 @@ public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefix(final Boolean r return this; } + public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefixDelimiter(final String removeOperationIdPrefixDelimiter) { + this.configurator.addAdditionalProperty("removeOperationIdPrefixDelimiter", removeOperationIdPrefixDelimiter); + return this; + } + + public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefixCount(final Integer removeOperationIdPrefixCount) { + this.configurator.addAdditionalProperty("removeOperationIdPrefixCount", removeOperationIdPrefixCount); + return this; + } + public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNamePrefix) { this.configurator.setModelNamePrefix(modelNamePrefix); return this; diff --git a/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml new file mode 100644 index 000000000..0759f940e --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: org.acme.UserResource.findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: org.acme.UserResource.add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: org.acme.UserResource.find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: org.acme.UserResource.update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: org.acme.UserResource.delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml new file mode 100644 index 000000000..a6ac8abb9 --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: UserResource.findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: UserResource.add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: UserResource.find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: UserResource.update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: UserResource.delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties index cef3041dd..ccde9f8d2 100644 --- a/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties +++ b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties @@ -1,2 +1,10 @@ quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + quarkus.openapi-generator.codegen.spec.openapi_remove_operation_id_prefix_yaml.remove-operation-id-prefix=true + +quarkus.openapi-generator.codegen.spec.openapi_prefix_delimiter_yaml.remove-operation-id-prefix=true +quarkus.openapi-generator.codegen.spec.openapi_prefix_delimiter_yaml.remove-operation-id-prefix-delimiter=. + +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix=true +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix-delimiter=. +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix-count=3 diff --git a/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java index 64d0b9833..e108f8791 100644 --- a/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java +++ b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java @@ -9,11 +9,55 @@ @QuarkusTest public class RemoveOperationIdPrefixTest { - String apiClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.api.UserResourceApi"; - String modelClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.model.User"; + @Test + void removeOperationIdPrefixTest() { + String apiClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.model.User"; + + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("findAll")) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("add", Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("update", Integer.class, Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("delete", Integer.class)) + .doesNotThrowAnyException(); + + } + + @Test + void removeOperationIdPrefixDelimiterTest() { + String apiClassName = "org.openapi.quarkus.openapi_prefix_delimiter_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_prefix_delimiter_yaml.model.User"; + + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("findAll")) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("add", Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("update", Integer.class, Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("delete", Integer.class)) + .doesNotThrowAnyException(); + + } @Test - void apiIsBeingGenerated() { + void removeOperationIdPrefixCountTest() { + String apiClassName = "org.openapi.quarkus.openapi_prefix_count_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_prefix_count_yaml.model.User"; + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) .doesNotThrowAnyException(); diff --git a/docs/modules/ROOT/pages/includes/getting-started.adoc b/docs/modules/ROOT/pages/includes/getting-started.adoc index 25296f58a..494c454c1 100644 --- a/docs/modules/ROOT/pages/includes/getting-started.adoc +++ b/docs/modules/ROOT/pages/includes/getting-started.adoc @@ -95,6 +95,20 @@ You can remove operationId prefix (e.g. User_findAll=> findAll). To do that, you quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix=true ---- +Character to use as a delimiter for the prefix. Default is '_'.You can define the prefix delimiter (e.g. User.findAll=> findAll): + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix-delimiter=. +---- + +You can define count of delimiter for the prefix (e.g. org.acme.UserResource.findAll=> findAll). Use -1 for last Default: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix-count=3 +---- + The same way you can add any additional annotations to the generated api files with `additional-api-type-annotations`. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as: [source,properties] From 3b912282080e3736ae7d10eccdc477e9a39b8b44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:03:37 -0500 Subject: [PATCH 032/166] Bump quarkus.version from 3.17.2 to 3.17.3 (#896) Bumps `quarkus.version` from 3.17.2 to 3.17.3. Updates `io.quarkus:quarkus-bom` from 3.17.2 to 3.17.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.2...3.17.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.2 to 3.17.3 Updates `io.quarkus:quarkus-extension-processor` from 3.17.2 to 3.17.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.2 to 3.17.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.2...3.17.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fd7129dad..797197aca 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.2 + 3.17.3 1.1.1.Final 3.26.2 3.26.3 From cdbc976790138d3bf024e988e49e79f5aeffabd1 Mon Sep 17 00:00:00 2001 From: Andy Barilla Date: Fri, 6 Dec 2024 02:54:11 -0700 Subject: [PATCH 033/166] Add generatemodels and generateapis options (#897) --- .../generator/deployment/CodegenConfig.java | 2 + .../deployment/CommonItemConfig.java | 12 +++ .../codegen/OpenApiGeneratorCodeGenBase.java | 6 ++ .../OpenApiClientGeneratorWrapper.java | 10 ++ .../wrapper/QuarkusJavaClientCodegen.java | 10 +- .../OpenApiConfigValidatorTest.java | 2 +- .../integration-tests/generate-flags/pom.xml | 97 +++++++++++++++++++ .../src/main/openapi/generate_apis_false.yaml | 60 ++++++++++++ .../main/openapi/generate_models_false.yaml | 60 ++++++++++++ .../src/main/resources/application.properties | 2 + .../generator/it/GenerateFlagsTest.java | 35 +++++++ client/integration-tests/pom.xml | 1 + docs/modules/ROOT/pages/client.adoc | 10 ++ .../ROOT/pages/includes/generate-apis.adoc | 6 ++ .../ROOT/pages/includes/generate-models.adoc | 6 ++ 15 files changed, 316 insertions(+), 3 deletions(-) create mode 100644 client/integration-tests/generate-flags/pom.xml create mode 100644 client/integration-tests/generate-flags/src/main/openapi/generate_apis_false.yaml create mode 100644 client/integration-tests/generate-flags/src/main/openapi/generate_models_false.yaml create mode 100644 client/integration-tests/generate-flags/src/main/resources/application.properties create mode 100644 client/integration-tests/generate-flags/src/test/java/io/quarkiverse/openapi/generator/it/GenerateFlagsTest.java create mode 100644 docs/modules/ROOT/pages/includes/generate-apis.adoc create mode 100644 docs/modules/ROOT/pages/includes/generate-models.adoc diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index dd4c77eed..f163f25ee 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -71,6 +71,8 @@ public enum ConfigName { REMOVE_OPERATION_ID_PREFIX("remove-operation-id-prefix"), REMOVE_OPERATION_ID_PREFIX_DELIMITER("remove-operation-id-prefix-delimiter"), REMOVE_OPERATION_ID_PREFIX_COUNT("remove-operation-id-prefix-count"), + GENERATE_APIS("generate-apis"), + GENERATE_MODELS("generate-models"), BEAN_VALIDATION("use-bean-validation"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index a43e7b810..926ea95ef 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -160,4 +160,16 @@ public class CommonItemConfig { */ @ConfigItem(name = "use-bean-validation") public Optional useBeanValidation; + + /** + * Enable the generation of APIs. If you set this to {@code false}, APIs will not be generated. + */ + @ConfigItem(name = "generate-apis") + public Optional generateApis; + + /** + * Enable the generation of models. If you set this to {@code false}, models will not be generated. + */ + @ConfigItem(name = "generate-models") + public Optional generateModels; } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index 143527c08..0431e6777 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -300,6 +300,12 @@ protected void generate(OpenApiGeneratorOptions options) { getValues(config, openApiFilePath, CodegenConfig.ConfigName.BEAN_VALIDATION, Boolean.class) .ifPresent(generator::withUseBeanValidation); + getValues(config, openApiFilePath, CodegenConfig.ConfigName.GENERATE_APIS, Boolean.class) + .ifPresent(generator::withGenerateApis); + + getValues(config, openApiFilePath, CodegenConfig.ConfigName.GENERATE_MODELS, Boolean.class) + .ifPresent(generator::withGenerateModels); + SmallRyeConfig smallRyeConfig = config.unwrap(SmallRyeConfig.class); getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.TYPE_MAPPINGS, String.class, String.class) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 56ca01450..7d34db5e4 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -275,6 +275,16 @@ public OpenApiClientGeneratorWrapper withUseBeanValidation(Boolean config) { return this; } + public OpenApiClientGeneratorWrapper withGenerateApis(Boolean config) { + configurator.addAdditionalProperty("generate-apis", config); + return this; + } + + public OpenApiClientGeneratorWrapper withGenerateModels(Boolean config) { + configurator.addAdditionalProperty("generate-models", config); + return this; + } + public OpenApiClientGeneratorWrapper withApiNameSuffix(final String apiNameSuffix) { this.configurator.setApiNameSuffix(apiNameSuffix); return this; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/QuarkusJavaClientCodegen.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/QuarkusJavaClientCodegen.java index 97d87d1a1..cfe51cde9 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/QuarkusJavaClientCodegen.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/QuarkusJavaClientCodegen.java @@ -70,6 +70,8 @@ private void replaceWithQuarkusTemplateFiles() { supportingFiles.clear(); Boolean enableSecurityGeneration = (Boolean) this.additionalProperties.get("enable-security-generation"); + Boolean generateApis = (Boolean) this.additionalProperties.getOrDefault("generate-apis", Boolean.TRUE); + Boolean generateModels = (Boolean) this.additionalProperties.getOrDefault("generate-models", Boolean.TRUE); if (enableSecurityGeneration == null || enableSecurityGeneration) { if (ProcessUtils.hasHttpBasicMethods(this.openAPI) || @@ -92,10 +94,14 @@ private void replaceWithQuarkusTemplateFiles() { } apiTemplateFiles.clear(); - apiTemplateFiles.put("api.qute", ".java"); + if (generateApis) { + apiTemplateFiles.put("api.qute", ".java"); + } modelTemplateFiles.clear(); - modelTemplateFiles.put("model.qute", ".java"); + if (generateModels) { + modelTemplateFiles.put("model.qute", ".java"); + } } public String authFileFolder() { diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/OpenApiConfigValidatorTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/OpenApiConfigValidatorTest.java index 9fb6c26e2..daec221de 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/OpenApiConfigValidatorTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/OpenApiConfigValidatorTest.java @@ -18,7 +18,7 @@ class OpenApiConfigValidatorTest { "quarkus.openapi-generator.codegen.additional-api-type-annotations", "quarkus.openapi-generator.codegen.spec.spec_yaml.enable-security-generation", "quarkus.openapi-generator.codegen.type-mappings.UUID=String", - "quarkus.openapi-generator.codegen.spec.spec_yaml.type-mappings.UUID=String" + "quarkus.openapi-generator.codegen.spec.spec_yaml.type-mappings.UUID=String", }) void test_known_configs_ok(String validConfiguration) { assertThatCode(() -> OpenApiConfigValidator.validateInputConfiguration(List.of(validConfiguration))) diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml new file mode 100644 index 000000000..07dad3649 --- /dev/null +++ b/client/integration-tests/generate-flags/pom.xml @@ -0,0 +1,97 @@ + + + + quarkus-openapi-generator-integration-tests + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-it-generate-flags + Quarkus - Openapi Generator - Integration Tests - Client - Generate Flags + Example project for usage of the generate-models and generate-apis properties + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + io.quarkus + quarkus-hibernate-validator + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + + ${project.build.directory}/${project.build.finalName}-runner + + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/generate-flags/src/main/openapi/generate_apis_false.yaml b/client/integration-tests/generate-flags/src/main/openapi/generate_apis_false.yaml new file mode 100644 index 000000000..e7e1b2247 --- /dev/null +++ b/client/integration-tests/generate-flags/src/main/openapi/generate_apis_false.yaml @@ -0,0 +1,60 @@ +--- +openapi: 3.0.3 +info: + title: Test API + version: "1.0" +paths: + /{pathParam}: + get: + tags: + - NonExistentEndpoint + operationId: test + parameters: + - name: pathParam + in: path + required: true + schema: + type: string + minimum: 5 + - name: headerParam + in: header + required: false + schema: + type: integer + maximum: 5 + - name: cookieParam + in: cookie + required: true + schema: + type: string + minLength: 10 + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string +components: + schemas: + ExistentObject: + type: object + description: Some object not to be validated + required: + - id + - name + - size + properties: + id: + type: integer + minimum: 1 + maximum: 100 + name: + type: string + pattern: "[a-zA-Z]*" + minLength: 1 + maxLength: 10 + size: + type: number + minimum: 1.0 + maximum: 10.0 \ No newline at end of file diff --git a/client/integration-tests/generate-flags/src/main/openapi/generate_models_false.yaml b/client/integration-tests/generate-flags/src/main/openapi/generate_models_false.yaml new file mode 100644 index 000000000..c2b29f207 --- /dev/null +++ b/client/integration-tests/generate-flags/src/main/openapi/generate_models_false.yaml @@ -0,0 +1,60 @@ +--- +openapi: 3.0.3 +info: + title: Test API + version: "1.0" +paths: + /{pathParam}: + get: + tags: + - ExistentEndpoint + operationId: test + parameters: + - name: pathParam + in: path + required: true + schema: + type: string + minimum: 5 + - name: headerParam + in: header + required: false + schema: + type: integer + maximum: 5 + - name: cookieParam + in: cookie + required: true + schema: + type: string + minLength: 10 + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string +components: + schemas: + NonExistentObject: + type: object + description: Some object not to be validated + required: + - id + - name + - size + properties: + id: + type: integer + minimum: 1 + maximum: 100 + name: + type: string + pattern: "[a-zA-Z]*" + minLength: 1 + maxLength: 10 + size: + type: number + minimum: 1.0 + maximum: 10.0 \ No newline at end of file diff --git a/client/integration-tests/generate-flags/src/main/resources/application.properties b/client/integration-tests/generate-flags/src/main/resources/application.properties new file mode 100644 index 000000000..40183424f --- /dev/null +++ b/client/integration-tests/generate-flags/src/main/resources/application.properties @@ -0,0 +1,2 @@ +quarkus.openapi-generator.codegen.spec.generate_models_false_yaml.generate-models = false +quarkus.openapi-generator.codegen.spec.generate_apis_false_yaml.generate-apis = false \ No newline at end of file diff --git a/client/integration-tests/generate-flags/src/test/java/io/quarkiverse/openapi/generator/it/GenerateFlagsTest.java b/client/integration-tests/generate-flags/src/test/java/io/quarkiverse/openapi/generator/it/GenerateFlagsTest.java new file mode 100644 index 000000000..58bab06ff --- /dev/null +++ b/client/integration-tests/generate-flags/src/test/java/io/quarkiverse/openapi/generator/it/GenerateFlagsTest.java @@ -0,0 +1,35 @@ +package io.quarkiverse.openapi.generator.it; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class GenerateFlagsTest { + + @Test + void testEndpointIsInPlace() throws ClassNotFoundException { + Class.forName("org.openapi.quarkus.generate_models_false_yaml.api.ExistentEndpointApi"); + } + + @Test + void testModelIsInPlace() throws ClassNotFoundException { + Class.forName("org.openapi.quarkus.generate_apis_false_yaml.model.ExistentObject"); + } + + @Test + void testEndpointIsNotInPlace() { + Assertions.assertThatThrownBy(() -> { + Class.forName("org.openapi.quarkus.generate_apis_false_yaml.model.NonExistentEndpointApi"); + }).isInstanceOf(ClassNotFoundException.class); + } + + @Test + void testModelIsNotInPlace() { + Assertions.assertThatThrownBy(() -> { + Class.forName("org.openapi.quarkus.generate_models_false_yaml.api.NonExistentObject"); + }).isInstanceOf(ClassNotFoundException.class); + } + +} diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 1a69f36e3..d884219ec 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -23,6 +23,7 @@ enum-property enum-unexpected exclude + generate-flags generation-input generation-tests include diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index 7f14d4e81..fa51d0525 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -173,6 +173,16 @@ include::./includes/additional-request-args.adoc[leveloffset=+1, opts=optional] include::./includes/bean-validation.adoc[leveloffset=+1, opts=optional] +[[generate-apis]] +== Generate APIs + +include::./includes/generate-apis.adoc[leveloffset=+1, opts=optional] + +[[generate-models]] +== Generate Models + +include::./includes/generate-models.adoc[leveloffset=+1, opts=optional] + == Known Limitations === Supported Arguments diff --git a/docs/modules/ROOT/pages/includes/generate-apis.adoc b/docs/modules/ROOT/pages/includes/generate-apis.adoc new file mode 100644 index 000000000..54d2c2611 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/generate-apis.adoc @@ -0,0 +1,6 @@ +APIs are generated by default. To disable them set `generate-apis` to false: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.generate-apis=false +---- \ No newline at end of file diff --git a/docs/modules/ROOT/pages/includes/generate-models.adoc b/docs/modules/ROOT/pages/includes/generate-models.adoc new file mode 100644 index 000000000..336071a55 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/generate-models.adoc @@ -0,0 +1,6 @@ +Models are generated by default. To disable them set `generate-models` to false: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.generate-models=false +---- \ No newline at end of file From d41204354f4519717789f5b29fb839c34de6e135 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 06:55:17 -0300 Subject: [PATCH 034/166] docs: add andybarilla as a contributor for code, test, and doc (#902) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 11 +++++++++++ README.md | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c06b0890e..568b8e093 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -387,6 +387,17 @@ "contributions": [ "code" ] + }, + { + "login": "andybarilla", + "name": "Andy Barilla", + "avatar_url": "https://avatars.githubusercontent.com/u/5983808?v=4", + "profile": "https://kranzilla.com/", + "contributions": [ + "code", + "test", + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index b77e29e95..5a67d863f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-41-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-42-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -98,6 +98,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Michał Kolenda
Michał Kolenda

💻 rednalyn
rednalyn

📖 Marko Bekhta
Marko Bekhta

💻 + Andy Barilla
Andy Barilla

💻 ⚠️ 📖 From 7634262cd757dc882b620f9c0e068675c59a4e47 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 8 Dec 2024 15:15:54 -0300 Subject: [PATCH 035/166] docs: add yuhaibohotmail as a contributor for code, and test (#906) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 10 ++++++++++ README.md | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 568b8e093..3533f818c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -398,6 +398,16 @@ "test", "doc" ] + }, + { + "login": "yuhaibohotmail", + "name": "yuhaibohotmail", + "avatar_url": "https://avatars.githubusercontent.com/u/48646226?v=4", + "profile": "https://github.com/yuhaibohotmail", + "contributions": [ + "code", + "test" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 5a67d863f..0c70d6ca5 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-42-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-43-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -100,6 +100,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Marko Bekhta
Marko Bekhta

💻 Andy Barilla
Andy Barilla

💻 ⚠️ 📖 + + yuhaibohotmail
yuhaibohotmail

💻 ⚠️ + From 1c0a5a402431689015b6b3dabc05f0b6dd593573 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 08:52:39 -0300 Subject: [PATCH 036/166] Bump quarkus.version from 3.17.3 to 3.17.4 (#908) Bumps `quarkus.version` from 3.17.3 to 3.17.4. Updates `io.quarkus:quarkus-bom` from 3.17.3 to 3.17.4 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.3...3.17.4) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.3 to 3.17.4 Updates `io.quarkus:quarkus-extension-processor` from 3.17.3 to 3.17.4 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.3 to 3.17.4 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.3...3.17.4) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 797197aca..0912091cc 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.3 + 3.17.4 1.1.1.Final 3.26.2 3.26.3 From 12825ee254f5f94ce49bbdb2c17946c03e7afba0 Mon Sep 17 00:00:00 2001 From: Richard Alm <44467351+denvitaharen@users.noreply.github.com> Date: Thu, 12 Dec 2024 17:55:58 +0100 Subject: [PATCH 037/166] Exposed the serializable-model when generating client models. (#907) --- .../generator/deployment/CodegenConfig.java | 3 +- .../codegen/OpenApiGeneratorCodeGenBase.java | 3 + .../OpenApiClientGeneratorWrapper.java | 6 +- client/integration-tests/pom.xml | 1 + .../serializable-model/pom.xml | 94 +++++++++++++ .../quarkus-non-serializable-openapi.yaml | 125 ++++++++++++++++++ .../openapi/quarkus-serializable-openapi.yaml | 125 ++++++++++++++++++ .../src/main/resources/application.properties | 6 + .../generator/it/SerializableModelTest.java | 27 ++++ docs/modules/ROOT/pages/client.adoc | 11 ++ 10 files changed, 399 insertions(+), 2 deletions(-) create mode 100644 client/integration-tests/serializable-model/pom.xml create mode 100644 client/integration-tests/serializable-model/src/main/openapi/quarkus-non-serializable-openapi.yaml create mode 100644 client/integration-tests/serializable-model/src/main/openapi/quarkus-serializable-openapi.yaml create mode 100644 client/integration-tests/serializable-model/src/main/resources/application.properties create mode 100644 client/integration-tests/serializable-model/src/test/java/io/quarkiverse/openapi/generator/it/SerializableModelTest.java diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index f163f25ee..aa707bc7e 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -73,7 +73,8 @@ public enum ConfigName { REMOVE_OPERATION_ID_PREFIX_COUNT("remove-operation-id-prefix-count"), GENERATE_APIS("generate-apis"), GENERATE_MODELS("generate-models"), - BEAN_VALIDATION("use-bean-validation"); + BEAN_VALIDATION("use-bean-validation"), + SERIALIZABLE_MODEL("serializable-model"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index 0431e6777..c4f69013b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -317,6 +317,9 @@ protected void generate(OpenApiGeneratorOptions options) { getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.SCHEMA_MAPPINGS, String.class, String.class) .ifPresent(generator::withSchemaMappings); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.SERIALIZABLE_MODEL, Boolean.class) + .ifPresent(generator::withSerialiableModel); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.NORMALIZER, String.class, String.class) .ifPresent(generator::withOpenApiNormalizer); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 7d34db5e4..12147ece2 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -111,7 +111,6 @@ private void setDefaults() { this.configurator.addAdditionalProperty("use-bean-validation", FALSE); this.configurator.addAdditionalProperty("use-field-name-in-part-filename", FALSE); this.configurator.addAdditionalProperty("verbose", FALSE); - // TODO: expose as properties https://github.com/quarkiverse/quarkus-openapi-generator/issues/869 this.configurator.addAdditionalProperty(CodegenConstants.SERIALIZABLE_MODEL, FALSE); } @@ -198,6 +197,11 @@ public OpenApiClientGeneratorWrapper withOpenApiNormalizer(final Mapconfig-key github without-oidc + serializable-model
diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml new file mode 100644 index 000000000..80df64ac6 --- /dev/null +++ b/client/integration-tests/serializable-model/pom.xml @@ -0,0 +1,94 @@ + + + + quarkus-openapi-generator-integration-tests + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-it-serializable-model + Quarkus - Openapi Generator - Integration Tests - Client - Serializable model + Example project for general usage + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + + ${project.build.directory}/${project.build.finalName}-runner + + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/serializable-model/src/main/openapi/quarkus-non-serializable-openapi.yaml b/client/integration-tests/serializable-model/src/main/openapi/quarkus-non-serializable-openapi.yaml new file mode 100644 index 000000000..ec431be5e --- /dev/null +++ b/client/integration-tests/serializable-model/src/main/openapi/quarkus-non-serializable-openapi.yaml @@ -0,0 +1,125 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Animals - OpenAPI 3.0", + "version": "1.0.5" + }, + "servers": [ + { + "url": "/api/v3" + } + ], + "tags": [ + { + "name": "primate", + "description": "Everything about Primates" + } + ], + "paths": { + "/primate/{id}": { + "get": { + "tags": [ + "primate" + ], + "summary": "Find primate by ID", + "description": "Returns a single primate", + "operationId": "getPrimateById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of primate to return", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Primate" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Primate not found" + } + } + } + } + }, + "components": { + "schemas": { + "Animal": { + "type": "object", + "properties": { + "born": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + }, + "deceased": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + } + }, + "xml": { + "name": "animal" + } + }, + "Mammal": { + "type": "object", + "allOf": [ { + "$ref": "#/components/schemas/Animal" + } ], + "properties": { + "gender": { + "type": "string", + "enum": [ + "female", + "male" + ] + } + }, + "xml": { + "name": "mammal" + } + }, + "Primate": { + "required": [ + "name" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Mammal" + } + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "jane doe" + } + }, + "xml": { + "name": "primate" + } + } + } + } +} diff --git a/client/integration-tests/serializable-model/src/main/openapi/quarkus-serializable-openapi.yaml b/client/integration-tests/serializable-model/src/main/openapi/quarkus-serializable-openapi.yaml new file mode 100644 index 000000000..ec431be5e --- /dev/null +++ b/client/integration-tests/serializable-model/src/main/openapi/quarkus-serializable-openapi.yaml @@ -0,0 +1,125 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Animals - OpenAPI 3.0", + "version": "1.0.5" + }, + "servers": [ + { + "url": "/api/v3" + } + ], + "tags": [ + { + "name": "primate", + "description": "Everything about Primates" + } + ], + "paths": { + "/primate/{id}": { + "get": { + "tags": [ + "primate" + ], + "summary": "Find primate by ID", + "description": "Returns a single primate", + "operationId": "getPrimateById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of primate to return", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Primate" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Primate not found" + } + } + } + } + }, + "components": { + "schemas": { + "Animal": { + "type": "object", + "properties": { + "born": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + }, + "deceased": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + } + }, + "xml": { + "name": "animal" + } + }, + "Mammal": { + "type": "object", + "allOf": [ { + "$ref": "#/components/schemas/Animal" + } ], + "properties": { + "gender": { + "type": "string", + "enum": [ + "female", + "male" + ] + } + }, + "xml": { + "name": "mammal" + } + }, + "Primate": { + "required": [ + "name" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Mammal" + } + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "jane doe" + } + }, + "xml": { + "name": "primate" + } + } + } + } +} diff --git a/client/integration-tests/serializable-model/src/main/resources/application.properties b/client/integration-tests/serializable-model/src/main/resources/application.properties new file mode 100644 index 000000000..30fc60530 --- /dev/null +++ b/client/integration-tests/serializable-model/src/main/resources/application.properties @@ -0,0 +1,6 @@ +quarkus.openapi-generator.codegen.spec.quarkus_serializable_openapi_yaml.serializable-model=true +quarkus.openapi-generator.codegen.spec.quarkus_serializable_openapi_yaml.base-package=org.acme.serializable + +quarkus.openapi-generator.codegen.spec.quarkus_non_serializable_openapi_yaml.base-package=org.acme.non.serializable + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/serializable-model/src/test/java/io/quarkiverse/openapi/generator/it/SerializableModelTest.java b/client/integration-tests/serializable-model/src/test/java/io/quarkiverse/openapi/generator/it/SerializableModelTest.java new file mode 100644 index 000000000..4f1937c15 --- /dev/null +++ b/client/integration-tests/serializable-model/src/test/java/io/quarkiverse/openapi/generator/it/SerializableModelTest.java @@ -0,0 +1,27 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.Serializable; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class SerializableModelTest { + + @Test + void verifySerializableIsEnabled() { + var interfaces = org.acme.serializable.model.Animal.class.getInterfaces(); + + assertThat(interfaces).contains(Serializable.class); + } + + @Test + void verifySerializableIsNotEnabled() { + var interfaces = org.acme.non.serializable.model.Animal.class.getInterfaces(); + + assertThat(interfaces).doesNotContain(Serializable.class); + } +} diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index fa51d0525..7ea4386b0 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -183,6 +183,17 @@ include::./includes/generate-apis.adoc[leveloffset=+1, opts=optional] include::./includes/generate-models.adoc[leveloffset=+1, opts=optional] +[[generate-serilazble-models]] +== Generate Serilazable Models + +If you need to have the generated models to implement `java.io.Serializable`-interface then set the `serializable-model` +to true: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.serializable-model=true +---- + == Known Limitations === Supported Arguments From 34a822eddc6802726ffc3047be077440949bf2ba Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Mon, 16 Dec 2024 14:39:02 -0300 Subject: [PATCH 038/166] Release 2.7.1 (#913) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 739d752aa..5c86ea2df 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.7.0 + current-version: 2.7.1 next-version: 3.0.0-SNAPSHOT From 2eea941d8b5bfe6547bb46ea91691a60f622ce65 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:39:45 +0000 Subject: [PATCH 039/166] Update the latest release version 2.7.1 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 3dcadcb26..34aa3a091 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.7.0 +:project-version: 2.7.1 :examples-dir: ./../examples/ From d071c267307a195901bcb37f2d99800164a4b67b Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:47:54 +0000 Subject: [PATCH 040/166] [maven-release-plugin] prepare release 2.7.1 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 5 ++--- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 48 files changed, 50 insertions(+), 51 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 0652da716..2fa0d4c9f 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..99cd580b2 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..7a248722c 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..a00f4732e 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..9413272f6 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..eb1b126a0 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..5226f4d3a 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..f5fb8719d 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..056f22618 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..01fe8ff99 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..122e50c8d 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..e29934079 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..7a9e0a01c 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..aaf66307f 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 07dad3649..9704a571d 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..f45c80f5b 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..aaa6805cd 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..d9fdd79f8 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..39d6e3316 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..991a4037d 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..6445f7158 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..b7f8fd6d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..5ddf5b76c 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..71977a906 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index c9e9f38dd..2b6db97fe 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..3abcdad0e 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e1efcf5b3..d4c8694e0 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..727872136 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..f80608a80 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..fa2ca4e4b 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 80df64ac6..8b387887b 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -1,10 +1,9 @@ - + quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..1d7c167c3 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..1e34e50a3 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..f246824a6 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..ef5f7c82c 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..4c8751c43 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 85ba7c0ad..277af837b 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.1 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..305442bb3 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index d50c39f2c..7d088217b 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..dc8e7124a 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index bc3f73da5..0217a877e 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 0912091cc..bb97f635e 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.7.1 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.7.1 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 7c9619120..c6da7fce1 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..c6a47540c 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..a29852bb1 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..2d4f3e8b0 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..512d58005 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 79ce725a3..184bd4d49 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.7.1 ../pom.xml 4.0.0 From e137f1e2c370cb31029b199b946e5352c4e8904e Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:47:54 +0000 Subject: [PATCH 041/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 48 files changed, 49 insertions(+), 49 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 2fa0d4c9f..0652da716 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 99cd580b2..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 7a248722c..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index a00f4732e..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 9413272f6..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index eb1b126a0..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 5226f4d3a..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index f5fb8719d..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 056f22618..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 01fe8ff99..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 122e50c8d..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index e29934079..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 7a9e0a01c..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index aaf66307f..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 9704a571d..07dad3649 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index f45c80f5b..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index aaa6805cd..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index d9fdd79f8..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 39d6e3316..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 991a4037d..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 6445f7158..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index b7f8fd6d4..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 5ddf5b76c..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 71977a906..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index 2b6db97fe..c9e9f38dd 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 3abcdad0e..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index d4c8694e0..e1efcf5b3 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 727872136..480678d50 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index f80608a80..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index fa2ca4e4b..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 8b387887b..ba9c35ff7 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 1d7c167c3..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 1e34e50a3..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index f246824a6..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index ef5f7c82c..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 4c8751c43..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 277af837b..85ba7c0ad 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 305442bb3..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 7d088217b..d50c39f2c 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index dc8e7124a..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 0217a877e..bc3f73da5 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index bb97f635e..0912091cc 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.7.1 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.7.1 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index c6da7fce1..7c9619120 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index c6a47540c..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index a29852bb1..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 2d4f3e8b0..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 512d58005..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 184bd4d49..79ce725a3 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.7.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 59031b8d544b6bc32e26a9ec76a43cddea737854 Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Mon, 16 Dec 2024 18:45:21 -0300 Subject: [PATCH 042/166] Update snapshot_deploy.yml (#916) Use the new workflow --- .github/workflows/snapshot_deploy.yml | 35 +++++++++------------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/.github/workflows/snapshot_deploy.yml b/.github/workflows/snapshot_deploy.yml index b2df3b887..5ce3af9c7 100644 --- a/.github/workflows/snapshot_deploy.yml +++ b/.github/workflows/snapshot_deploy.yml @@ -3,6 +3,7 @@ name: Snapshot Deploy concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true + on: workflow_dispatch: push: @@ -12,28 +13,16 @@ defaults: run: shell: bash +permissions: + attestations: write + id-token: write + contents: read + jobs: deploy-snapshot: - runs-on: ubuntu-latest - name: Deploy Snapshot artifacts - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - cache: 'maven' - server-id: 'ossrh' - server-username: MAVEN_USERNAME - server-password: MAVEN_PASSWORD - gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg-passphrase: MAVEN_GPG_PASSPHRASE - - - name: Deploy ${{steps.metadata.outputs.next-version}} - run: | - mvn -B clean deploy -DskipTests -DperformRelease=true -Drelease - env: - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} \ No newline at end of file + name: Deploy Snapshots + uses: quarkiverse/.github/.github/workflows/perform-release.yml@main + secrets: inherit + with: + ref: main + version: 3.0.0-SNAPSHOT From 715f25658d31f34d1432bb01d71af9f997b2f708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:21:24 -0300 Subject: [PATCH 043/166] Bump com.github.javaparser:javaparser-core from 3.26.2 to 3.26.3 (#917) Bumps [com.github.javaparser:javaparser-core](https://github.com/javaparser/javaparser) from 3.26.2 to 3.26.3. - [Release notes](https://github.com/javaparser/javaparser/releases) - [Changelog](https://github.com/javaparser/javaparser/blob/master/changelog.md) - [Commits](https://github.com/javaparser/javaparser/compare/javaparser-parent-3.26.2...javaparser-parent-3.26.3) --- updated-dependencies: - dependency-name: com.github.javaparser:javaparser-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0912091cc..0aaedcb0a 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ UTF-8 3.17.4 1.1.1.Final - 3.26.2 + 3.26.3 3.26.3 4.1.1 3.10.0 From 773177cc57c51f6b6a2d681cfd054793e4fde8c0 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Wed, 18 Dec 2024 17:50:07 +0100 Subject: [PATCH 044/166] Added so equals and hashcode is generated in models. --- .../generator/deployment/CodegenConfig.java | 3 +- .../deployment/CommonItemConfig.java | 7 + .../codegen/OpenApiGeneratorCodeGenBase.java | 3 + .../OpenApiClientGeneratorWrapper.java | 6 + .../libraries/microprofile/pojo.qute | 43 ++++++ .../integration-tests/equals-hashcode/pom.xml | 93 +++++++++++++ .../quarkus-equals-hashcode-openapi.yaml | 125 ++++++++++++++++++ .../quarkus-non-equals-hashcode-openapi.yaml | 125 ++++++++++++++++++ .../src/main/resources/application.properties | 6 + .../generator/it/EqualsHashcodeTest.java | 52 ++++++++ .../generator/it/VerifyGenerationTest.java | 47 +++++++ client/integration-tests/pom.xml | 1 + docs/modules/ROOT/pages/client.adoc | 5 + .../ROOT/pages/includes/equals-hashcode.adoc | 9 ++ 14 files changed, 524 insertions(+), 1 deletion(-) create mode 100644 client/integration-tests/equals-hashcode/pom.xml create mode 100644 client/integration-tests/equals-hashcode/src/main/openapi/quarkus-equals-hashcode-openapi.yaml create mode 100644 client/integration-tests/equals-hashcode/src/main/openapi/quarkus-non-equals-hashcode-openapi.yaml create mode 100644 client/integration-tests/equals-hashcode/src/main/resources/application.properties create mode 100644 client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/EqualsHashcodeTest.java create mode 100644 client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java create mode 100644 docs/modules/ROOT/pages/includes/equals-hashcode.adoc diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index aa707bc7e..02192c6a6 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -74,7 +74,8 @@ public enum ConfigName { GENERATE_APIS("generate-apis"), GENERATE_MODELS("generate-models"), BEAN_VALIDATION("use-bean-validation"), - SERIALIZABLE_MODEL("serializable-model"); + SERIALIZABLE_MODEL("serializable-model"), + EQUALS_HASHCODE("equals-hashcode"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index 926ea95ef..6d65cf4b8 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -172,4 +172,11 @@ public class CommonItemConfig { */ @ConfigItem(name = "generate-models") public Optional generateModels; + + /** + * Enable the generation of equals and hashcode in models. If you set this to {@code false}, the models + * will not have equals and hashcode. + */ + @ConfigItem(name = "equals-hashcode") + public Optional equalsHashcode; } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index c4f69013b..619611011 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -320,6 +320,9 @@ protected void generate(OpenApiGeneratorOptions options) { getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.SERIALIZABLE_MODEL, Boolean.class) .ifPresent(generator::withSerialiableModel); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.EQUALS_HASHCODE, Boolean.class) + .ifPresent(generator::withEqualsHashcode); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.NORMALIZER, String.class, String.class) .ifPresent(generator::withOpenApiNormalizer); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 12147ece2..4f06bc514 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -112,6 +112,7 @@ private void setDefaults() { this.configurator.addAdditionalProperty("use-field-name-in-part-filename", FALSE); this.configurator.addAdditionalProperty("verbose", FALSE); this.configurator.addAdditionalProperty(CodegenConstants.SERIALIZABLE_MODEL, FALSE); + this.configurator.addAdditionalProperty("equals-hashcode", TRUE); } /** @@ -202,6 +203,11 @@ public OpenApiClientGeneratorWrapper withSerialiableModel(final Boolean serialia return this; } + public OpenApiClientGeneratorWrapper withEqualsHashcode(final Boolean equalsHashcode) { + this.configurator.addAdditionalProperty("equals-hashcode", equalsHashcode); + return this; + } + /** * Sets the global 'additionalModelTypeAnnotations' setting. If not set this setting will default to empty. * diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index ae5542c1e..a15175f4c 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -1,5 +1,6 @@ {@org.openapitools.codegen.CodegenModel m} import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Objects; {#if m.description} /** @@ -134,6 +135,48 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl sb.append("}"); return sb.toString(); } + {#if equals-hashcode} + {#if m.vars.size > 0} + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + {m.classname} model = ({m.classname}) o; + + {#if m.vars.size == 1} + return Objects.equals({m.vars.0.name}, model.{m.vars.0.name}); + {#else} + {#for v in m.vars} + {#if v_isFirst} + return Objects.equals({v.name}, model.{v.name}) && + {#else if v_isLast} + Objects.equals({v.name}, model.{v.name}); + {#else} + Objects.equals({v.name}, model.{v.name}) && + {/if} + {/for} + {/if} + } + + @Override + public int hashCode() { + {#if m.vars.size == 1} + return Objects.hash({m.vars.0.name}); + {#else} + {#for v in m.vars} + {#if v_isFirst} + return Objects.hash({v.name}, + {#else if v_isLast} + {v.name}); + {#else} + {v.name}, + {/if} + {/for} + {/if} + } + {/if} + {/if} /** * Convert the given object to string with each line indented by 4 spaces diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml new file mode 100644 index 000000000..80d46519a --- /dev/null +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -0,0 +1,93 @@ + + + + quarkus-openapi-generator-integration-tests + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-it-equals-hashcode + Quarkus - Openapi Generator - Integration Tests - Client - Equals hashcode + Example project for general usage + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + + ${project.build.directory}/${project.build.finalName}-runner + + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-equals-hashcode-openapi.yaml b/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-equals-hashcode-openapi.yaml new file mode 100644 index 000000000..ec431be5e --- /dev/null +++ b/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-equals-hashcode-openapi.yaml @@ -0,0 +1,125 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Animals - OpenAPI 3.0", + "version": "1.0.5" + }, + "servers": [ + { + "url": "/api/v3" + } + ], + "tags": [ + { + "name": "primate", + "description": "Everything about Primates" + } + ], + "paths": { + "/primate/{id}": { + "get": { + "tags": [ + "primate" + ], + "summary": "Find primate by ID", + "description": "Returns a single primate", + "operationId": "getPrimateById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of primate to return", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Primate" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Primate not found" + } + } + } + } + }, + "components": { + "schemas": { + "Animal": { + "type": "object", + "properties": { + "born": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + }, + "deceased": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + } + }, + "xml": { + "name": "animal" + } + }, + "Mammal": { + "type": "object", + "allOf": [ { + "$ref": "#/components/schemas/Animal" + } ], + "properties": { + "gender": { + "type": "string", + "enum": [ + "female", + "male" + ] + } + }, + "xml": { + "name": "mammal" + } + }, + "Primate": { + "required": [ + "name" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Mammal" + } + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "jane doe" + } + }, + "xml": { + "name": "primate" + } + } + } + } +} diff --git a/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-non-equals-hashcode-openapi.yaml b/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-non-equals-hashcode-openapi.yaml new file mode 100644 index 000000000..ec431be5e --- /dev/null +++ b/client/integration-tests/equals-hashcode/src/main/openapi/quarkus-non-equals-hashcode-openapi.yaml @@ -0,0 +1,125 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Animals - OpenAPI 3.0", + "version": "1.0.5" + }, + "servers": [ + { + "url": "/api/v3" + } + ], + "tags": [ + { + "name": "primate", + "description": "Everything about Primates" + } + ], + "paths": { + "/primate/{id}": { + "get": { + "tags": [ + "primate" + ], + "summary": "Find primate by ID", + "description": "Returns a single primate", + "operationId": "getPrimateById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of primate to return", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Primate" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Primate not found" + } + } + } + } + }, + "components": { + "schemas": { + "Animal": { + "type": "object", + "properties": { + "born": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + }, + "deceased": { + "type": "string", + "description": "Dated Base extension.", + "format": "date-time" + } + }, + "xml": { + "name": "animal" + } + }, + "Mammal": { + "type": "object", + "allOf": [ { + "$ref": "#/components/schemas/Animal" + } ], + "properties": { + "gender": { + "type": "string", + "enum": [ + "female", + "male" + ] + } + }, + "xml": { + "name": "mammal" + } + }, + "Primate": { + "required": [ + "name" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Mammal" + } + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "jane doe" + } + }, + "xml": { + "name": "primate" + } + } + } + } +} diff --git a/client/integration-tests/equals-hashcode/src/main/resources/application.properties b/client/integration-tests/equals-hashcode/src/main/resources/application.properties new file mode 100644 index 000000000..929c6beeb --- /dev/null +++ b/client/integration-tests/equals-hashcode/src/main/resources/application.properties @@ -0,0 +1,6 @@ +quarkus.openapi-generator.codegen.spec.quarkus_equals_hashcode_openapi_yaml.base-package=org.acme.equals.hashcode + +quarkus.openapi-generator.codegen.spec.quarkus_non_equals_hashcode_openapi_yaml.base-package=org.acme.non.equals.hashcode +quarkus.openapi-generator.codegen.spec.quarkus_non_equals_hashcode_openapi_yaml.equals-hashcode=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/EqualsHashcodeTest.java b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/EqualsHashcodeTest.java new file mode 100644 index 000000000..c9bf43842 --- /dev/null +++ b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/EqualsHashcodeTest.java @@ -0,0 +1,52 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.time.OffsetDateTime; + +import org.acme.equals.hashcode.model.Animal; +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class EqualsHashcodeTest { + + @Test + void verifyModelNotEquals() { + var object1 = new Animal(); + object1.setDeceased(OffsetDateTime.now().minusHours(2)); + + var object2 = new Animal(); + object2.setBorn(OffsetDateTime.now().minusYears(1)); + + assertNotEquals(object1, object2); + } + + @Test + void verifyModelEquals() { + var offset = OffsetDateTime.now().minusHours(2); + + var object1 = new Animal(); + object1.setDeceased(offset); + + var object2 = new Animal(); + object2.setDeceased(offset); + + assertEquals(object1, object2); + } + + @Test + void verifyModelHasHashCode() { + var offset = OffsetDateTime.now().minusHours(2); + + var object1 = new Animal(); + object1.setDeceased(offset); + + var object2 = new Animal(); + object2.setDeceased(offset); + + assertEquals(object1.hashCode(), object2.hashCode()); + } +} diff --git a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java new file mode 100644 index 000000000..22a73cdd9 --- /dev/null +++ b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java @@ -0,0 +1,47 @@ +package io.quarkiverse.openapi.generator.it; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.stream.Stream; + +import org.acme.non.equals.hashcode.model.Animal; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class VerifyGenerationTest { + + @ParameterizedTest + @MethodSource("provideStringsForIsBlank") + void verify(Class clazz, String methodName, Class expectedDeclaringClass) { + var equalsMethod = getMethod(clazz, methodName); + + Class declaringClass = equalsMethod.getDeclaringClass(); + + assertEquals(declaringClass, expectedDeclaringClass); + } + + private static Stream provideStringsForIsBlank() { + return Stream.of( + Arguments.of(Animal.class, "equals", Object.class), + Arguments.of(Animal.class, "hashCode", Object.class), + Arguments.of(org.acme.equals.hashcode.model.Animal.class, "equals", + org.acme.equals.hashcode.model.Animal.class), + Arguments.of(org.acme.equals.hashcode.model.Animal.class, "hashCode", + org.acme.equals.hashcode.model.Animal.class)); + } + + public static Method getMethod(Class clazz, String methodName) { + var methods = clazz.getMethods(); + + return Arrays.stream(methods) + .filter(method -> method.getName().equals(methodName)) + .findAny() + .orElseThrow(); + } +} diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e1efcf5b3..e164c1a39 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -45,6 +45,7 @@ github without-oidc serializable-model + equals-hashcode diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index 7ea4386b0..aa6bf61c2 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -194,6 +194,11 @@ to true: quarkus.openapi-generator.codegen.spec.my_openapi_yaml.serializable-model=true ---- +[[equals-hashcode]] +== Equals and hashcode + +include::./includes/equals-hashcode.adoc[leveloffset=+1, opts=optional] + == Known Limitations === Supported Arguments diff --git a/docs/modules/ROOT/pages/includes/equals-hashcode.adoc b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc new file mode 100644 index 000000000..3189b7ab8 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc @@ -0,0 +1,9 @@ +`Hashcode` and `equals` are by default generated. It adds all the variables in the model +to the model to the methods. + +To disable set `equals-hashcode` to false: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.equals-hashcode=false +---- \ No newline at end of file From 9e302e4fa6fa26df86569fd9e85ab37426d2a734 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Wed, 18 Dec 2024 18:08:17 +0100 Subject: [PATCH 045/166] Added extra empty row between toString and equals --- .../main/resources/templates/libraries/microprofile/pojo.qute | 1 + 1 file changed, 1 insertion(+) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index a15175f4c..76e11a659 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -135,6 +135,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl sb.append("}"); return sb.toString(); } + {#if equals-hashcode} {#if m.vars.size > 0} @Override From a5cd95b450b7044c35e4c6ee329c68886048464c Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Wed, 18 Dec 2024 23:14:57 +0100 Subject: [PATCH 046/166] Updated the documentation --- docs/modules/ROOT/pages/includes/equals-hashcode.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/modules/ROOT/pages/includes/equals-hashcode.adoc b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc index 3189b7ab8..e35d3704f 100644 --- a/docs/modules/ROOT/pages/includes/equals-hashcode.adoc +++ b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc @@ -1,5 +1,5 @@ -`Hashcode` and `equals` are by default generated. It adds all the variables in the model -to the model to the methods. +`hashcode` and `equals` are by default generated to all models. `hashcode` and `equals` is based on all the variables +in the model and can't be customized. To disable set `equals-hashcode` to false: From 3d02cc2e7d8293643ed06835976ace4724565b39 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Wed, 18 Dec 2024 23:15:11 +0100 Subject: [PATCH 047/166] Added javadoc to the equals and hashcode methods --- .../libraries/microprofile/pojo.qute | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index 76e11a659..e9e3204eb 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -138,12 +138,22 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {#if equals-hashcode} {#if m.vars.size > 0} + /** + * Compares this object to the specified object. The result is + * \{@code true\} if and only if the argument is not + * \{@code null\} and is a \{@code {m.classname}\} object that + * contains the same values as this object. + * + * @param obj the object to compare with. + * @return \{@code true\} if the objects are the same; + * \{@code false\} otherwise. + **/ @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; - {m.classname} model = ({m.classname}) o; + {m.classname} model = ({m.classname}) obj; {#if m.vars.size == 1} return Objects.equals({m.vars.0.name}, model.{m.vars.0.name}); @@ -160,6 +170,11 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {/if} } + /** + * Returns a hash code for a \{@code {m.classname}\}. + * + * @return a hash code value for a \{@code {m.classname}\}. + **/ @Override public int hashCode() { {#if m.vars.size == 1} From 020241f6037fdc4d7eb9756ebe949c97880550e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 07:53:39 -0300 Subject: [PATCH 048/166] Bump quarkus.version from 3.17.4 to 3.17.5 (#921) Bumps `quarkus.version` from 3.17.4 to 3.17.5. Updates `io.quarkus:quarkus-bom` from 3.17.4 to 3.17.5 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.4...3.17.5) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.4 to 3.17.5 Updates `io.quarkus:quarkus-extension-processor` from 3.17.4 to 3.17.5 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.4 to 3.17.5 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.4...3.17.5) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0aaedcb0a..2efd72c15 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.4 + 3.17.5 1.1.1.Final 3.26.3 3.26.3 From ff0130e6696a5fefc839afd6fee1368e5b3274ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 07:54:28 -0300 Subject: [PATCH 049/166] Bump org.assertj:assertj-core from 3.26.3 to 3.27.0 (#922) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2efd72c15..f9c60b152 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 3.17.5 1.1.1.Final 3.26.3 - 3.26.3 + 3.27.0 4.1.1 3.10.0 From ac665fe184af7b49dda157a8c5fbdf89e7b8d52c Mon Sep 17 00:00:00 2001 From: Richard Alm <44467351+denvitaharen@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:11:55 +0100 Subject: [PATCH 050/166] Update docs/modules/ROOT/pages/includes/equals-hashcode.adoc Co-authored-by: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> --- docs/modules/ROOT/pages/includes/equals-hashcode.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/modules/ROOT/pages/includes/equals-hashcode.adoc b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc index e35d3704f..b916c4c8f 100644 --- a/docs/modules/ROOT/pages/includes/equals-hashcode.adoc +++ b/docs/modules/ROOT/pages/includes/equals-hashcode.adoc @@ -1,5 +1,4 @@ -`hashcode` and `equals` are by default generated to all models. `hashcode` and `equals` is based on all the variables -in the model and can't be customized. +By default, `hashcode` and `equals` methods are automatically generated for all models. These methods are based on all the variables in the model and can not be customized. To disable set `equals-hashcode` to false: From 53db5f994b6fbacca5968007dd0c41920e391e08 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Fri, 20 Dec 2024 15:26:35 +0100 Subject: [PATCH 051/166] Changed so we use FCQN instead of importin java.util.Objects. --- .../templates/libraries/microprofile/pojo.qute | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index e9e3204eb..8a0c4ec3a 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -1,6 +1,5 @@ {@org.openapitools.codegen.CodegenModel m} import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Objects; {#if m.description} /** @@ -156,15 +155,15 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {m.classname} model = ({m.classname}) obj; {#if m.vars.size == 1} - return Objects.equals({m.vars.0.name}, model.{m.vars.0.name}); + return java.util.Objects.equals({m.vars.0.name}, model.{m.vars.0.name}); {#else} {#for v in m.vars} {#if v_isFirst} - return Objects.equals({v.name}, model.{v.name}) && + return java.util.Objects.equals({v.name}, model.{v.name}) && {#else if v_isLast} - Objects.equals({v.name}, model.{v.name}); + java.util.Objects.equals({v.name}, model.{v.name}); {#else} - Objects.equals({v.name}, model.{v.name}) && + java.util.Objects.equals({v.name}, model.{v.name}) && {/if} {/for} {/if} @@ -178,11 +177,11 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl @Override public int hashCode() { {#if m.vars.size == 1} - return Objects.hash({m.vars.0.name}); + return java.util.Objects.hash({m.vars.0.name}); {#else} {#for v in m.vars} {#if v_isFirst} - return Objects.hash({v.name}, + return java.util.Objects.hash({v.name}, {#else if v_isLast} {v.name}); {#else} From cd63c11125f3907c70d6637597f9a7481aec0923 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Fri, 20 Dec 2024 15:50:22 +0100 Subject: [PATCH 052/166] Refactored VerifyGenerationTest so it tests the generation better. --- .../generator/it/VerifyGenerationTest.java | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java index 22a73cdd9..ccc3fb489 100644 --- a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java +++ b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java @@ -1,42 +1,37 @@ package io.quarkiverse.openapi.generator.it; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.lang.reflect.Method; import java.util.Arrays; -import java.util.stream.Stream; -import org.acme.non.equals.hashcode.model.Animal; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; @QuarkusTest class VerifyGenerationTest { - @ParameterizedTest - @MethodSource("provideStringsForIsBlank") - void verify(Class clazz, String methodName, Class expectedDeclaringClass) { - var equalsMethod = getMethod(clazz, methodName); + @Test + void verifyThatGeneratedModelDoesntHaveMethods() { + var equalsMethod = getMethod(org.acme.equals.hashcode.model.Animal.class, "equals"); + var hashCodeMethod = getMethod(org.acme.equals.hashcode.model.Animal.class, "hashCode"); - Class declaringClass = equalsMethod.getDeclaringClass(); - - assertEquals(declaringClass, expectedDeclaringClass); + assertEquals(equalsMethod.getDeclaringClass(), org.acme.equals.hashcode.model.Animal.class); + assertEquals(hashCodeMethod.getDeclaringClass(), org.acme.equals.hashcode.model.Animal.class); } - private static Stream provideStringsForIsBlank() { - return Stream.of( - Arguments.of(Animal.class, "equals", Object.class), - Arguments.of(Animal.class, "hashCode", Object.class), - Arguments.of(org.acme.equals.hashcode.model.Animal.class, "equals", - org.acme.equals.hashcode.model.Animal.class), - Arguments.of(org.acme.equals.hashcode.model.Animal.class, "hashCode", - org.acme.equals.hashcode.model.Animal.class)); + @Test + void verifyThatGeneratedModelDoesHaveMethods() { + var equalsMethod = getMethod(org.acme.non.equals.hashcode.model.Animal.class, "equals"); + var hashCodeMethod = getMethod(org.acme.non.equals.hashcode.model.Animal.class, "hashCode"); + + assertNotEquals(equalsMethod.getDeclaringClass(), org.acme.equals.hashcode.model.Animal.class); + assertNotEquals(hashCodeMethod.getDeclaringClass(), org.acme.equals.hashcode.model.Animal.class); } - public static Method getMethod(Class clazz, String methodName) { + private static Method getMethod(Class clazz, String methodName) { var methods = clazz.getMethods(); return Arrays.stream(methods) From 5121a39a66965125be387fbb43a32c3612e69e81 Mon Sep 17 00:00:00 2001 From: Richard Alm Date: Sun, 22 Dec 2024 10:29:05 +0100 Subject: [PATCH 053/166] Corrected name of methods in VerifyGenerationTest. --- .../openapi/generator/it/VerifyGenerationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java index ccc3fb489..30224b75a 100644 --- a/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java +++ b/client/integration-tests/equals-hashcode/src/test/java/io/quarkiverse/openapi/generator/it/VerifyGenerationTest.java @@ -14,7 +14,7 @@ class VerifyGenerationTest { @Test - void verifyThatGeneratedModelDoesntHaveMethods() { + void verifyThatGeneratedModelDoesHaveMethods() { var equalsMethod = getMethod(org.acme.equals.hashcode.model.Animal.class, "equals"); var hashCodeMethod = getMethod(org.acme.equals.hashcode.model.Animal.class, "hashCode"); @@ -23,7 +23,7 @@ void verifyThatGeneratedModelDoesntHaveMethods() { } @Test - void verifyThatGeneratedModelDoesHaveMethods() { + void verifyThatGeneratedModelDoesntHaveMethods() { var equalsMethod = getMethod(org.acme.non.equals.hashcode.model.Animal.class, "equals"); var hashCodeMethod = getMethod(org.acme.non.equals.hashcode.model.Animal.class, "hashCode"); From 513c6c6026dab4274cc0da99731d83c26cb11bd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 09:00:59 -0300 Subject: [PATCH 054/166] Bump org.assertj:assertj-core from 3.27.0 to 3.27.1 (#929) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.1. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.1) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9c60b152..659846076 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 3.17.5 1.1.1.Final 3.26.3 - 3.27.0 + 3.27.1 4.1.1 3.10.0
From a3f138529c375916fac4ee899484bfef3c81bddd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 09:10:40 -0300 Subject: [PATCH 055/166] Bump org.assertj:assertj-core from 3.27.1 to 3.27.2 (#931) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.1 to 3.27.2. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.1...assertj-build-3.27.2) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 659846076..e67836150 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 3.17.5 1.1.1.Final 3.26.3 - 3.27.1 + 3.27.2 4.1.1 3.10.0 From 1498727b67d3ff546ad6ad3e92bfa1361378a781 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 08:23:14 -0300 Subject: [PATCH 056/166] Bump quarkus.version from 3.17.5 to 3.17.6 (#934) Bumps `quarkus.version` from 3.17.5 to 3.17.6. Updates `io.quarkus:quarkus-bom` from 3.17.5 to 3.17.6 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.5...3.17.6) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.5 to 3.17.6 Updates `io.quarkus:quarkus-extension-processor` from 3.17.5 to 3.17.6 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.5 to 3.17.6 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.5...3.17.6) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e67836150..2a3d8332d 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.5 + 3.17.6 1.1.1.Final 3.26.3 3.27.2 From 54222dce7da30236de93299421c24993a6b67c5d Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Thu, 9 Jan 2025 23:10:35 -0300 Subject: [PATCH 057/166] Remove yq from quarkus-snapshot.yaml (#935) --- .github/workflows/quarkus-snapshot.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/quarkus-snapshot.yaml b/.github/workflows/quarkus-snapshot.yaml index 07a116ad6..e9b14c6c5 100644 --- a/.github/workflows/quarkus-snapshot.yaml +++ b/.github/workflows/quarkus-snapshot.yaml @@ -26,9 +26,6 @@ jobs: if: github.actor == 'quarkusbot' || github.actor == 'quarkiversebot' || github.actor == '' steps: - - name: Install yq - run: sudo add-apt-repository ppa:rmescandon/yq && sudo apt update && sudo apt install yq -y - - name: Set up Java uses: actions/setup-java@v4 with: From 64835e463e32f8175304f6479044d2ccff33c4aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 08:06:07 -0300 Subject: [PATCH 058/166] Bump quarkus.version from 3.17.6 to 3.17.7 (#938) Bumps `quarkus.version` from 3.17.6 to 3.17.7. Updates `io.quarkus:quarkus-bom` from 3.17.6 to 3.17.7 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.6...3.17.7) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.6 to 3.17.7 Updates `io.quarkus:quarkus-extension-processor` from 3.17.6 to 3.17.7 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.6 to 3.17.7 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.6...3.17.7) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2a3d8332d..cf98780ba 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.6 + 3.17.7 1.1.1.Final 3.26.3 3.27.2 From 570c9b93aa58b045f5a68c0fd180efaedf9b283b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:01:52 -0300 Subject: [PATCH 059/166] Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 (#945) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.2 to 3.27.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.2...assertj-build-3.27.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cf98780ba..20820a7d6 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 3.17.7 1.1.1.Final 3.26.3 - 3.27.2 + 3.27.3 4.1.1 3.10.0 From 1be3aaab9aed57cd69408c29782c3abcc52f3f26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:02:21 -0300 Subject: [PATCH 060/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.24 to 2.1.25 (#946) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.24 to 2.1.25. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.24...v2.1.25) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 0652da716..4457e0450 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -14,7 +14,7 @@ 7.10.0 2.0.16 4.3.1 - 2.1.24 + 2.1.25 From 891b6f3b984278bb9abfca3816b0573c4119c4c0 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Mon, 20 Jan 2025 13:52:05 -0300 Subject: [PATCH 061/166] Support dash (-) on RegisterRestClient#configKey (#927) --- .../codegen/OpenApiConfigValidator.java | 2 +- .../OpenApiClientGeneratorWrapper.java | 8 +- .../main/openapi/config-key-with-dash.yaml | 274 ++++++++++++++++++ .../src/main/resources/application.properties | 6 +- .../QuarkusConfigKeyWithDashOpenApiTest.java | 31 ++ 5 files changed, 316 insertions(+), 5 deletions(-) create mode 100644 client/integration-tests/config-key/src/main/openapi/config-key-with-dash.yaml create mode 100644 client/integration-tests/config-key/src/test/java/io/quarkiverse/openapi/generator/configkey/QuarkusConfigKeyWithDashOpenApiTest.java diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java index 96386230d..e4c55cade 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiConfigValidator.java @@ -18,7 +18,7 @@ public final class OpenApiConfigValidator { private static final Logger LOGGER = LoggerFactory.getLogger(OpenApiConfigValidator.class); static final Pattern CONFIG_PATTERN = Pattern.compile( - "quarkus\\.openapi-generator\\.codegen\\.(spec.(?\\w*)\\.)?(?[A-Za-z0-9_\\-]*)\\.?(?.+)?"); + "quarkus\\.openapi-generator\\.codegen\\.(spec.(?[\\w\\-]*)\\.)?(?[A-Za-z0-9_\\-]*)\\.?(?.+)?"); private OpenApiConfigValidator() { } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 4f06bc514..3ce73326a 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -21,8 +21,6 @@ import org.openapitools.codegen.DefaultGenerator; import org.openapitools.codegen.config.GlobalSettings; -import io.smallrye.config.common.utils.StringUtil; - /** * Wrapper for the OpenAPIGen tool. * This is the same as calling the Maven plugin or the CLI. @@ -356,11 +354,15 @@ private void consolidatePackageNames() { public void withConfigKey(final String config) { if (config != null && !config.isBlank()) { - this.configurator.addAdditionalProperty("configKey", StringUtil.replaceNonAlphanumericByUnderscores(config)); + this.configurator.addAdditionalProperty("configKey", transformToSafeConfigKey(config)); } } public void withAdditionalPropertiesAsAttribute(final Boolean enable) { this.configurator.addAdditionalProperty("additionalPropertiesAsAttribute", Optional.ofNullable(enable).orElse(FALSE)); } + + public static String transformToSafeConfigKey(String input) { + return input.replaceAll("[^a-zA-Z0-9\\-_]", "_"); + } } diff --git a/client/integration-tests/config-key/src/main/openapi/config-key-with-dash.yaml b/client/integration-tests/config-key/src/main/openapi/config-key-with-dash.yaml new file mode 100644 index 000000000..4a853fe0b --- /dev/null +++ b/client/integration-tests/config-key/src/main/openapi/config-key-with-dash.yaml @@ -0,0 +1,274 @@ +--- +openapi: 3.0.3 +info: + title: greeting-flow API + version: "1.0" +paths: + /: + post: + requestBody: + content: + '*/*': + schema: + $ref: '#/components/schemas/CloudEvent' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Response' + /hello: + get: + tags: + - Reactive Greeting Resource + operationId: hello + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + /messaging/topics: + get: + tags: + - Quarkus Topics Information Resource + responses: + "200": + description: OK +components: + schemas: + CloudEvent: + type: object + properties: + specVersion: + $ref: '#/components/schemas/SpecVersion' + id: + type: string + type: + type: string + source: + format: uri + type: string + dataContentType: + type: string + dataSchema: + format: uri + type: string + subject: + type: string + time: + format: date-time + type: string + attributeNames: + uniqueItems: true + type: array + items: + type: string + extensionNames: + uniqueItems: true + type: array + items: + type: string + data: + $ref: '#/components/schemas/CloudEventData' + CloudEventData: + type: object + EntityTag: + type: object + properties: + value: + type: string + weak: + type: boolean + Family: + enum: + - INFORMATIONAL + - SUCCESSFUL + - REDIRECTION + - CLIENT_ERROR + - SERVER_ERROR + - OTHER + type: string + Link: + type: object + properties: + uri: + format: uri + type: string + uriBuilder: + $ref: '#/components/schemas/UriBuilder' + rel: + type: string + rels: + type: array + items: + type: string + title: + type: string + type: + type: string + params: + type: object + additionalProperties: + type: string + Locale: + type: object + properties: + language: + type: string + script: + type: string + country: + type: string + variant: + type: string + extensionKeys: + uniqueItems: true + type: array + items: + format: byte + type: string + unicodeLocaleAttributes: + uniqueItems: true + type: array + items: + type: string + unicodeLocaleKeys: + uniqueItems: true + type: array + items: + type: string + iSO3Language: + type: string + iSO3Country: + type: string + displayLanguage: + type: string + displayScript: + type: string + displayCountry: + type: string + displayVariant: + type: string + displayName: + type: string + MediaType: + type: object + properties: + type: + type: string + subtype: + type: string + parameters: + type: object + additionalProperties: + type: string + wildcardType: + type: boolean + wildcardSubtype: + type: boolean + MultivaluedMapStringObject: + type: object + additionalProperties: + type: array + items: + type: object + MultivaluedMapStringString: + type: object + additionalProperties: + type: array + items: + type: string + NewCookie: + type: object + properties: + name: + type: string + value: + type: string + version: + format: int32 + type: integer + path: + type: string + domain: + type: string + comment: + type: string + maxAge: + format: int32 + type: integer + expiry: + format: date + type: string + secure: + type: boolean + httpOnly: + type: boolean + Response: + type: object + properties: + status: + format: int32 + type: integer + statusInfo: + $ref: '#/components/schemas/StatusType' + entity: + type: object + mediaType: + $ref: '#/components/schemas/MediaType' + language: + $ref: '#/components/schemas/Locale' + length: + format: int32 + type: integer + allowedMethods: + uniqueItems: true + type: array + items: + type: string + cookies: + type: object + additionalProperties: + $ref: '#/components/schemas/NewCookie' + entityTag: + $ref: '#/components/schemas/EntityTag' + date: + format: date + type: string + lastModified: + format: date + type: string + location: + format: uri + type: string + links: + uniqueItems: true + type: array + items: + $ref: '#/components/schemas/Link' + metadata: + $ref: '#/components/schemas/MultivaluedMapStringObject' + headers: + $ref: '#/components/schemas/MultivaluedMapStringObject' + stringHeaders: + $ref: '#/components/schemas/MultivaluedMapStringString' + SpecVersion: + enum: + - V03 + - V1 + type: string + StatusType: + type: object + properties: + statusCode: + format: int32 + type: integer + family: + $ref: '#/components/schemas/Family' + reasonPhrase: + type: string + UriBuilder: + type: object diff --git a/client/integration-tests/config-key/src/main/resources/application.properties b/client/integration-tests/config-key/src/main/resources/application.properties index b0bfd21e4..8db83ec60 100644 --- a/client/integration-tests/config-key/src/main/resources/application.properties +++ b/client/integration-tests/config-key/src/main/resources/application.properties @@ -15,4 +15,8 @@ quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.config-key= quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.additional-api-type-annotations=@io.quarkiverse.openapi.generator.configkey.CustomAnnotation quarkus.rest-client.empty_config_key_yaml.url=http://localhost:8080 -quarkus.keycloak.devservices.enabled=false \ No newline at end of file +quarkus.keycloak.devservices.enabled=false + +# config-key with `-` +quarkus.openapi-generator.codegen.spec.config_key_with_dash_yaml.config-key=my-api +quarkus.rest-client.my-api.url=http://localhost:8080 diff --git a/client/integration-tests/config-key/src/test/java/io/quarkiverse/openapi/generator/configkey/QuarkusConfigKeyWithDashOpenApiTest.java b/client/integration-tests/config-key/src/test/java/io/quarkiverse/openapi/generator/configkey/QuarkusConfigKeyWithDashOpenApiTest.java new file mode 100644 index 000000000..4efa7e4e9 --- /dev/null +++ b/client/integration-tests/config-key/src/test/java/io/quarkiverse/openapi/generator/configkey/QuarkusConfigKeyWithDashOpenApiTest.java @@ -0,0 +1,31 @@ +package io.quarkiverse.openapi.generator.configkey; + +import static org.assertj.core.api.Assertions.assertThat; + +import jakarta.inject.Inject; + +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.junit.jupiter.api.Test; +import org.openapi.quarkus.config_key_with_dash_yaml.api.DefaultApi; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class QuarkusConfigKeyWithDashOpenApiTest { + + @RestClient + @Inject + DefaultApi defaultApi; + + @Test + void apiIsBeingGenerated() { + assertThat(defaultApi).isNotNull(); + } + + @Test + void config_key_should_have_dash() { + assertThat(DefaultApi.class.getAnnotation(RegisterRestClient.class)).isNotNull(); + assertThat(DefaultApi.class.getAnnotation(RegisterRestClient.class).configKey()).isEqualTo("my-api"); + } +} From c311e94332c189013b22d036944211910693ddee Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Mon, 20 Jan 2025 12:25:14 -0500 Subject: [PATCH 062/166] Fix #933 - Filter oauth security definitions from spec when generating `CompositeAuthenticationProvider` (#942) * Fix #933 - Filter oauth security definitions from spec when generating Signed-off-by: Ricardo Zanini * Make 'resolve' more complex by searching for assignable parameters Signed-off-by: Ricardo Zanini * Incorporating @hbelmiro's review Signed-off-by: Ricardo Zanini --------- Signed-off-by: Ricardo Zanini --- .../template/OpenApiNamespaceResolver.java | 68 ++++++++++++++++++- .../auth/compositeAuthenticationProvider.qute | 4 +- .../OpenApiClientGeneratorWrapperTest.java | 34 ++++++++++ .../resources/openapi/issue-933-security.yaml | 47 +++++++++++++ 4 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 client/deployment/src/test/resources/openapi/issue-933-security.yaml diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java index 0cb8f2b8b..7576290dd 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java @@ -1,12 +1,19 @@ package io.quarkiverse.openapi.generator.deployment.template; import java.io.File; +import java.lang.reflect.Method; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; +import org.openapitools.codegen.CodegenSecurity; import org.openapitools.codegen.model.OperationMap; import io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorOutputPaths; @@ -32,6 +39,7 @@ private OpenApiNamespaceResolver() { * @param codegenConfig Map with the model codegen properties * @return true if the given model class should generate the deprecated attributes */ + @SuppressWarnings("unused") public boolean genDeprecatedModelAttr(final String pkg, final String classname, final HashMap codegenConfig) { final String key = String.format("%s.%s.%s", pkg, classname, GENERATE_DEPRECATED_PROP); @@ -44,38 +52,92 @@ public boolean genDeprecatedModelAttr(final String pkg, final String classname, * @param codegenConfig Map with the model codegen properties * @return true if the given model class should generate the deprecated attributes */ + @SuppressWarnings("unused") public boolean genDeprecatedApiAttr(final String pkg, final String classname, final HashMap codegenConfig) { final String key = String.format("%s.%s.%s", pkg, classname, GENERATE_DEPRECATED_PROP); return Boolean.parseBoolean(codegenConfig.getOrDefault(key, "true").toString()); } + @SuppressWarnings("unused") public String parseUri(String uri) { return OpenApiGeneratorOutputPaths.getRelativePath(Path.of(uri)).toString().replace(File.separatorChar, '/'); } + @SuppressWarnings("unused") public boolean hasAuthMethods(OperationMap operations) { return operations != null && operations.getOperation().stream().anyMatch(operation -> operation.hasAuthMethods); } + /** + * Ignore the OAuth flows by filtering every oauth instance by name. The inner openapi-generator library duplicates the + * OAuth instances per flow in the openapi spec. + * So a specification file with more than one flow defined has two entries in the list. For now, we do not use this + * information in runtime so it can be safely filtered and ignored. + * + * @param oauthOperations passed through the Qute template + * @see "resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute" + * @return The list filtered by unique auth name + */ + @SuppressWarnings("unused") + public List getUniqueOAuthOperations(List oauthOperations) { + if (oauthOperations != null) { + return new ArrayList<>(oauthOperations.stream() + .collect(Collectors.toMap(security -> security.name, security -> security, + (existing, replacement) -> existing, LinkedHashMap::new)) + .values()); + } + return Collections.emptyList(); + } + @Override public CompletionStage resolve(EvalContext context) { try { - Class[] classArgs = new Class[context.getParams().size()]; Object[] args = new Object[context.getParams().size()]; + Class[] classArgs = new Class[context.getParams().size()]; + int i = 0; for (Expression expr : context.getParams()) { args[i] = context.evaluate(expr).toCompletableFuture().get(); classArgs[i] = args[i].getClass(); i++; } - return CompletableFuture - .completedFuture(this.getClass().getMethod(context.getName(), classArgs).invoke(this, args)); + + Method targetMethod = findCompatibleMethod(context.getName(), classArgs); + if (targetMethod == null) { + throw new NoSuchMethodException("No compatible method found for: " + context.getName()); + } + + return CompletableFuture.completedFuture(targetMethod.invoke(this, args)); } catch (ReflectiveOperationException | InterruptedException | ExecutionException ex) { return CompletableFuture.failedStage(ex); } } + private Method findCompatibleMethod(String methodName, Class[] argTypes) { + for (Method method : this.getClass().getMethods()) { + if (method.getName().equals(methodName)) { + Class[] paramTypes = method.getParameterTypes(); + if (isAssignable(paramTypes, argTypes)) { + return method; + } + } + } + return null; + } + + private boolean isAssignable(Class[] paramTypes, Class[] argTypes) { + if (paramTypes.length != argTypes.length) { + return false; + } + for (int i = 0; i < paramTypes.length; i++) { + if (!paramTypes[i].isAssignableFrom(argTypes[i])) { + return false; + } + } + return true; + } + @Override public String getNamespace() { return "openapi"; diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute index 836d2e711..ca6085c27 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute @@ -1,8 +1,8 @@ package {apiPackage}.auth; @jakarta.annotation.Priority(jakarta.ws.rs.Priorities.AUTHENTICATION) -{#for auth in oauthMethods.orEmpty} -@io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker(name="{auth.name}", openApiSpecId="{configKey}") +{#for auth in openapi:getUniqueOAuthOperations(oauthMethods.orEmpty)} +@io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker(name="{auth.name}", openApiSpecId="{quarkus-generator.openApiSpecId}") {/for} {#for auth in httpBasicMethods.orEmpty} @io.quarkiverse.openapi.generator.markers.BasicAuthenticationMarker(name="{auth.name}", openApiSpecId="{quarkus-generator.openApiSpecId}") 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 248ef41f5..9702518cd 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 @@ -33,6 +33,8 @@ import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.expr.AnnotationExpr; +import com.github.javaparser.ast.expr.Expression; +import com.github.javaparser.ast.expr.MemberValuePair; import com.github.javaparser.ast.expr.SimpleName; import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr; import com.github.javaparser.ast.nodeTypes.NodeWithName; @@ -50,6 +52,38 @@ private static Optional getMethodDeclarationByIdentifier(List return methodDeclarations.stream().filter(md -> md.getName().getIdentifier().equals(methodName)).findAny(); } + @Test + void verifyOAuthDuplicateAnnotationOnCompositeAuthProvider() throws URISyntaxException, FileNotFoundException { + OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-933-security.yaml"); + final List generatedFiles = generatorWrapper.generate("org.issue933"); + + assertNotNull(generatedFiles); + assertFalse(generatedFiles.isEmpty()); + + final Optional authProviderFile = generatedFiles.stream() + .filter(f -> f.getName().endsWith("CompositeAuthenticationProvider.java")).findFirst(); + assertThat(authProviderFile).isPresent(); + + CompilationUnit compilationUnit = StaticJavaParser.parse(authProviderFile.orElseThrow()); + // Get the class declaration + ClassOrInterfaceDeclaration classDeclaration = compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) + .orElseThrow(() -> new AssertionError("Class not found in the file")); + + // Collect all OauthAuthenticationMarker annotations + long oauthAnnotationsCount = classDeclaration.getAnnotations().stream() + .filter(annotation -> annotation.getNameAsString() + .equals("io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker")) + .filter(Expression::isNormalAnnotationExpr) + .filter(annotation -> annotation + .findFirst(MemberValuePair.class, + pair -> pair.getNameAsString().equals("name") && pair.getValue().toString().equals("\"oauth\"")) + .isPresent()) + .count(); + + // Assert that there's exactly one annotation with name=oauth + assertThat(oauthAnnotationsCount).isEqualTo(1); + } + @Test void verifyDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-852.json"); diff --git a/client/deployment/src/test/resources/openapi/issue-933-security.yaml b/client/deployment/src/test/resources/openapi/issue-933-security.yaml new file mode 100644 index 000000000..a5fd0ee8d --- /dev/null +++ b/client/deployment/src/test/resources/openapi/issue-933-security.yaml @@ -0,0 +1,47 @@ +openapi: 3.0.3 +info: + title: Generated API + version: "1.0" +paths: + /: + post: + operationId: doOperation + security: + - client_id: [ ] + - oauth: [ read, write ] + - bearerAuth: [ ] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MultiplicationOperation' + responses: + "200": + description: OK +components: + schemas: + MultiplicationOperation: + type: object + securitySchemes: + client_id: + type: apiKey + in: header + name: X-Client-Id + x-key-type: clientId + bearerAuth: + type: http + scheme: bearer + oauth: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://example.com/oauth/authorize + tokenUrl: https://example.com/oauth/token + scopes: + read: Grants read access + write: Grants write access + admin: Grants read and write access to administrative information + clientCredentials: + tokenUrl: http://localhost:8382/oauth/token + scopes: + read: read \ No newline at end of file From f6a217c1bbf9c874cefc2a97fffee7c7abc928dc Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:43:38 -0500 Subject: [PATCH 063/166] Fix #940 - Change authorization properties configuration to RUNTIME (#943) * Fix #940 - Change authorization properties configuration to RUNTIME Signed-off-by: Ricardo Zanini * Add generated configuration properties Signed-off-by: Ricardo Zanini * Fix runtime unit tests Signed-off-by: Ricardo Zanini * Incorporating @mcruzdev's review Signed-off-by: Ricardo Zanini * incorporating @hbelmiro's review Signed-off-by: Ricardo Zanini --------- Signed-off-by: Ricardo Zanini --- .../DummyApiKeyAuthenticationProvider.java | 8 - .../oidc/OidcAuthenticationRecorder.java | 10 +- .../OAuth2AuthenticationProvider.java | 5 +- .../openapi/generator/AuthConfig.java | 1 + .../generator/AuthenticationRecorder.java | 25 +- .../generator/OpenApiGeneratorConfig.java | 2 +- .../providers/AbstractAuthProvider.java | 44 +- .../ApiKeyAuthenticationProvider.java | 18 +- .../BasicAuthenticationProvider.java | 14 +- .../BearerAuthenticationProvider.java | 9 +- .../AbstractOpenApiSpecProviderTest.java | 35 +- .../ApiKeyOpenApiSpecProviderTest.java | 85 +- .../BasicOpenApiSpecProviderTest.java | 28 +- .../BearerOpenApiSpecProviderTest.java | 33 +- .../src/test/resources/application.properties | 4 + docs/modules/ROOT/pages/client.adoc | 6 +- .../quarkus-openapi-generator-server.adoc | 13 + ...napi-generator-server_quarkus.quarkus.adoc | 13 + .../includes/quarkus-openapi-generator.adoc | 1002 +++++++++++++++- ...i-generator_quarkus.openapi-generator.adoc | 1038 +++++++++++++++++ docs/pom.xml | 13 +- pom.xml | 5 + 22 files changed, 2193 insertions(+), 218 deletions(-) create mode 100644 client/runtime/src/test/resources/application.properties create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.quarkus.adoc create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc diff --git a/client/integration-tests/security/src/main/java/io/quarkiverse/openapi/generator/it/security/auth/DummyApiKeyAuthenticationProvider.java b/client/integration-tests/security/src/main/java/io/quarkiverse/openapi/generator/it/security/auth/DummyApiKeyAuthenticationProvider.java index 3e353d93d..1096cca18 100644 --- a/client/integration-tests/security/src/main/java/io/quarkiverse/openapi/generator/it/security/auth/DummyApiKeyAuthenticationProvider.java +++ b/client/integration-tests/security/src/main/java/io/quarkiverse/openapi/generator/it/security/auth/DummyApiKeyAuthenticationProvider.java @@ -5,13 +5,10 @@ import jakarta.annotation.PostConstruct; import jakarta.annotation.Priority; -import jakarta.inject.Inject; import jakarta.ws.rs.Priorities; import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.client.ClientRequestFilter; -import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; -import io.quarkiverse.openapi.generator.SpecItemConfig; import io.quarkiverse.openapi.generator.providers.ApiKeyAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyIn; import io.quarkiverse.openapi.generator.providers.AuthProvider; @@ -19,16 +16,11 @@ @Priority(Priorities.AUTHENTICATION) public class DummyApiKeyAuthenticationProvider implements ClientRequestFilter { - @Inject - OpenApiGeneratorConfig generatorConfig; - private AuthProvider authProvider; @PostConstruct public void init() { authProvider = new ApiKeyAuthenticationProvider("open_weather_custom_security_yaml", "app_id", ApiKeyIn.query, "appid", - generatorConfig.getItemConfig("open_weather_custom_security_yaml") - .flatMap(SpecItemConfig::getAuth).flatMap(x -> x.getItemConfig("app_id")).orElse(null), List.of()); } diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java index 1dbfe705e..2ed758540 100644 --- a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/OidcAuthenticationRecorder.java @@ -3,9 +3,7 @@ import java.util.List; import java.util.function.Function; -import io.quarkiverse.openapi.generator.AuthenticationRecorder; import io.quarkiverse.openapi.generator.OidcClient; -import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkiverse.openapi.generator.providers.AuthProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; @@ -14,18 +12,12 @@ @Recorder public class OidcAuthenticationRecorder { - private final OpenApiGeneratorConfig generatorConfig; - - public OidcAuthenticationRecorder(OpenApiGeneratorConfig generatorConfig) { - this.generatorConfig = generatorConfig; - } public Function, AuthProvider> recordOauthAuthProvider( String name, String openApiSpecId, List operations) { - return context -> new OAuth2AuthenticationProvider( - AuthenticationRecorder.getAuthConfig(generatorConfig, openApiSpecId, name), name, openApiSpecId, + return context -> new OAuth2AuthenticationProvider(name, openApiSpecId, context.getInjectedReference(OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate.class, new OidcClient.Literal(name)), operations); diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java index df87186c1..211e3bb2a 100644 --- a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java @@ -11,7 +11,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkiverse.openapi.generator.AuthConfig; import io.quarkiverse.openapi.generator.providers.AbstractAuthProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.oidc.common.runtime.OidcConstants; @@ -22,9 +21,9 @@ public class OAuth2AuthenticationProvider extends AbstractAuthProvider { private final OidcClientRequestFilterDelegate delegate; - public OAuth2AuthenticationProvider(final AuthConfig authConfig, String name, + public OAuth2AuthenticationProvider(String name, String openApiSpecId, OidcClientRequestFilterDelegate delegate, List operations) { - super(authConfig, name, openApiSpecId, operations); + super(name, openApiSpecId, operations); this.delegate = delegate; validateConfig(); } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java index e768cdd59..5a1e57987 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java @@ -17,6 +17,7 @@ public class AuthConfig { public static final String TOKEN_PROPAGATION = "token-propagation"; + public static final String HEADER_NAME = "header-name"; /** * Enables the authentication token propagation for this particular securityScheme. diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java index be8dabbc0..a5f599297 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java @@ -1,7 +1,6 @@ package io.quarkiverse.openapi.generator; import java.util.List; -import java.util.Objects; import java.util.function.Function; import jakarta.enterprise.inject.Instance; @@ -21,12 +20,6 @@ @Recorder public class AuthenticationRecorder { - final OpenApiGeneratorConfig generatorConfig; - - public AuthenticationRecorder(OpenApiGeneratorConfig generatorConfig) { - this.generatorConfig = generatorConfig; - } - public Function, CompositeAuthenticationProvider> recordCompositeProvider( String openApiSpec) { return ctx -> { @@ -42,9 +35,7 @@ public Function, AuthProvider> recordAp ApiKeyIn apiKeyIn, String apiKeyName, List operations) { - return context -> new ApiKeyAuthenticationProvider(openApiSpecId, name, apiKeyIn, apiKeyName, - getAuthConfig(generatorConfig, openApiSpecId, name), - operations); + return context -> new ApiKeyAuthenticationProvider(openApiSpecId, name, apiKeyIn, apiKeyName, operations); } public Function, AuthProvider> recordBearerAuthProvider( @@ -52,24 +43,14 @@ public Function, AuthProvider> recordBe String scheme, String openApiSpecId, List operations) { - return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, - getAuthConfig(generatorConfig, openApiSpecId, name), - operations); + return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, operations); } public Function, AuthProvider> recordBasicAuthProvider( String name, String openApiSpecId, List operations) { - return context -> new BasicAuthenticationProvider(openApiSpecId, name, - getAuthConfig(generatorConfig, openApiSpecId, name), operations); + return context -> new BasicAuthenticationProvider(openApiSpecId, name, operations); } - public static AuthConfig getAuthConfig(OpenApiGeneratorConfig generatorConfig, String openApiSpecId, String name) { - return Objects.requireNonNull(generatorConfig, "generatorConfig can't be null.") - .getItemConfig(openApiSpecId) - .flatMap(SpecItemConfig::getAuth) - .flatMap(authsConfig -> authsConfig.getItemConfig(name)) - .orElse(null); - } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java index 88454d1fa..6b297f577 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java @@ -11,7 +11,7 @@ /** * This class represents the runtime configurations for the openapi-generator extension. */ -@ConfigRoot(name = OpenApiGeneratorConfig.RUNTIME_TIME_CONFIG_PREFIX, phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) +@ConfigRoot(name = OpenApiGeneratorConfig.RUNTIME_TIME_CONFIG_PREFIX, phase = ConfigPhase.RUN_TIME) public class OpenApiGeneratorConfig { public static final String RUNTIME_TIME_CONFIG_PREFIX = "openapi-generator"; diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java index 1ede697f4..8d10fae3b 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java @@ -10,27 +10,33 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MultivaluedMap; +import org.eclipse.microprofile.config.ConfigProvider; + import io.quarkiverse.openapi.generator.AuthConfig; public abstract class AbstractAuthProvider implements AuthProvider { private static final String BEARER_WITH_SPACE = "Bearer "; - private static final String CANONICAL_AUTH_CONFIG_PROPERTY_NAME = "quarkus." + - RUNTIME_TIME_CONFIG_PREFIX + ".%s.auth.%s.%s"; + private static final String CANONICAL_AUTH_CONFIG_PROPERTY_NAME = "quarkus." + RUNTIME_TIME_CONFIG_PREFIX + + ".%s.auth.%s.%s"; private final String openApiSpecId; private final String name; - private final AuthConfig authConfig; private final List applyToOperations = new ArrayList<>(); - protected AbstractAuthProvider(AuthConfig authConfig, String name, String openApiSpecId, - List operations) { + protected AbstractAuthProvider(String name, String openApiSpecId, List operations) { this.name = name; this.openApiSpecId = openApiSpecId; - this.authConfig = authConfig; this.applyToOperations.addAll(operations); } + protected static String sanitizeBearerToken(String token) { + if (token != null && token.toLowerCase().startsWith(BEARER_WITH_SPACE.toLowerCase())) { + return token.substring(BEARER_WITH_SPACE.length()); + } + return token; + } + public String getOpenApiSpecId() { return openApiSpecId; } @@ -41,7 +47,9 @@ public String getName() { } public boolean isTokenPropagation() { - return authConfig != null && authConfig.getTokenPropagation().orElse(false); + return ConfigProvider.getConfig() + .getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), Boolean.class) + .orElse(false); } public String getTokenForPropagation(MultivaluedMap httpHeaders) { @@ -51,10 +59,8 @@ public String getTokenForPropagation(MultivaluedMap httpHeaders) } public String getHeaderName() { - if (authConfig != null) { - return authConfig.getHeaderName().orElse(null); - } - return null; + return ConfigProvider.getConfig() + .getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME), String.class).orElse(null); } @Override @@ -62,21 +68,7 @@ public List operationsToFilter() { return applyToOperations; } - public String getAuthConfigParam(String paramName, String defaultValue) { - if (authConfig != null) { - return authConfig.getConfigParam(paramName).orElse(defaultValue); - } - return defaultValue; - } - - protected static String sanitizeBearerToken(String token) { - if (token != null && token.toLowerCase().startsWith(BEARER_WITH_SPACE.toLowerCase())) { - return token.substring(BEARER_WITH_SPACE.length()); - } - return token; - } - - protected String getCanonicalAuthConfigPropertyName(String authPropertyName) { + public final String getCanonicalAuthConfigPropertyName(String authPropertyName) { return String.format(CANONICAL_AUTH_CONFIG_PROPERTY_NAME, getOpenApiSpecId(), getName(), authPropertyName); } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java index 03a55f6e5..eefe00f56 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java @@ -10,10 +10,10 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.UriBuilder; +import org.eclipse.microprofile.config.ConfigProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkiverse.openapi.generator.AuthConfig; import io.quarkiverse.openapi.generator.OpenApiGeneratorException; /** @@ -30,9 +30,8 @@ public class ApiKeyAuthenticationProvider extends AbstractAuthProvider { private final String apiKeyName; public ApiKeyAuthenticationProvider(final String openApiSpecId, final String name, final ApiKeyIn apiKeyIn, - final String apiKeyName, - final AuthConfig authConfig, List operations) { - super(authConfig, name, openApiSpecId, operations); + final String apiKeyName, List operations) { + super(name, openApiSpecId, operations); this.apiKeyIn = apiKeyIn; this.apiKeyName = apiKeyName; validateConfig(); @@ -59,16 +58,19 @@ && isUseAuthorizationHeaderValue()) { } private String getApiKey() { - final String key = getAuthConfigParam(API_KEY, ""); + final String key = ConfigProvider.getConfig() + .getOptionalValue(getCanonicalAuthConfigPropertyName(API_KEY), String.class).orElse(""); if (key.isEmpty()) { - LOGGER.warn("configured " + API_KEY + " property (see application.properties) is empty. hint: configure it."); + LOGGER.warn("configured {} property (see application.properties) is empty. hint: configure it.", + getCanonicalAuthConfigPropertyName(API_KEY)); } return key; } private boolean isUseAuthorizationHeaderValue() { - final String value = getAuthConfigParam(USE_AUTHORIZATION_HEADER_VALUE, "true"); - return "true".equals(value); + return ConfigProvider.getConfig() + .getOptionalValue(getCanonicalAuthConfigPropertyName(USE_AUTHORIZATION_HEADER_VALUE), Boolean.class) + .orElse(true); } private void validateConfig() { diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java index 219828b33..6158a1787 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java @@ -8,7 +8,8 @@ import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.HttpHeaders; -import io.quarkiverse.openapi.generator.AuthConfig; +import org.eclipse.microprofile.config.ConfigProvider; + import io.quarkiverse.openapi.generator.OpenApiGeneratorException; /** @@ -21,18 +22,19 @@ public class BasicAuthenticationProvider extends AbstractAuthProvider { static final String USER_NAME = "username"; static final String PASSWORD = "password"; - public BasicAuthenticationProvider(final String openApiSpecId, String name, final AuthConfig authConfig, - List operations) { - super(authConfig, name, openApiSpecId, operations); + public BasicAuthenticationProvider(final String openApiSpecId, String name, List operations) { + super(name, openApiSpecId, operations); validateConfig(); } private String getUsername() { - return getAuthConfigParam(USER_NAME, ""); + return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(USER_NAME), String.class) + .orElse(""); } private String getPassword() { - return getAuthConfigParam(PASSWORD, ""); + return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(PASSWORD), String.class) + .orElse(""); } @Override diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java index 0e80ab2a5..da3d1e334 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java @@ -6,7 +6,7 @@ import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.HttpHeaders; -import io.quarkiverse.openapi.generator.AuthConfig; +import org.eclipse.microprofile.config.ConfigProvider; /** * Provides bearer token authentication or any other valid scheme. @@ -20,8 +20,8 @@ public class BearerAuthenticationProvider extends AbstractAuthProvider { private final String scheme; public BearerAuthenticationProvider(final String openApiSpecId, final String name, final String scheme, - final AuthConfig authConfig, List operations) { - super(authConfig, name, openApiSpecId, operations); + List operations) { + super(name, openApiSpecId, operations); this.scheme = scheme; } @@ -41,6 +41,7 @@ public void filter(ClientRequestContext requestContext) throws IOException { } private String getBearerToken() { - return getAuthConfigParam(BEARER_TOKEN, ""); + return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(BEARER_TOKEN), String.class) + .orElse(""); } } diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java index 2e4523efc..c303ace93 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/AbstractOpenApiSpecProviderTest.java @@ -1,8 +1,5 @@ package io.quarkiverse.openapi.generator.providers; -import java.util.HashMap; -import java.util.Optional; - import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.MultivaluedHashMap; import jakarta.ws.rs.core.MultivaluedMap; @@ -14,53 +11,27 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import io.quarkiverse.openapi.generator.AuthConfig; -import io.quarkiverse.openapi.generator.AuthsConfig; -import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig; -import io.quarkiverse.openapi.generator.SpecItemConfig; - @ExtendWith(MockitoExtension.class) abstract class AbstractOpenApiSpecProviderTest { protected static final String OPEN_API_FILE_SPEC_ID = "open_api_file_spec_id_json"; protected static final String AUTH_SCHEME_NAME = "auth_scheme_name"; - protected OpenApiGeneratorConfig generatorConfig; - - protected AuthConfig authConfig; - @Mock protected ClientRequestContext requestContext; - protected MultivaluedMap headers; protected T provider; @BeforeEach void setUp() { - createConfiguration(); - provider = createProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, authConfig); - } - - protected abstract T createProvider(String openApiSpecId, String authSchemeName, - AuthConfig authConfig); - - protected void createConfiguration() { - generatorConfig = new OpenApiGeneratorConfig(); - generatorConfig.itemConfigs = new HashMap<>(); - SpecItemConfig specItemConfig = new SpecItemConfig(); - specItemConfig.auth = new AuthsConfig(); - specItemConfig.auth.authConfigs = new HashMap<>(); - authConfig = new AuthConfig(); - authConfig.headerName = Optional.empty(); - authConfig.tokenPropagation = Optional.of(false); - authConfig.authConfigParams = new HashMap<>(); - specItemConfig.auth.authConfigs.put(AUTH_SCHEME_NAME, authConfig); - generatorConfig.itemConfigs.put(OPEN_API_FILE_SPEC_ID, specItemConfig); headers = new MultivaluedHashMap<>(); Mockito.lenient().doReturn(headers).when(requestContext).getHeaders(); + provider = createProvider(); } + protected abstract T createProvider(); + protected void assertHeader(MultivaluedMap headers, String headerName, String value) { Assertions.assertThat(headers.getFirst(headerName)) .isNotNull() diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java index 89f1d9758..da7b221c4 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.io.IOException; import java.net.URI; @@ -16,10 +17,14 @@ import jakarta.ws.rs.core.MultivaluedMap; import org.assertj.core.api.InstanceOfAssertFactories; +import org.eclipse.microprofile.config.Config; +import org.eclipse.microprofile.config.ConfigProvider; import org.jboss.resteasy.specimpl.MultivaluedTreeMap; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import io.quarkiverse.openapi.generator.AuthConfig; @@ -35,16 +40,9 @@ class ApiKeyOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest uriCaptor; @Override - protected void createConfiguration() { - super.createConfiguration(); - authConfig.authConfigParams.put(ApiKeyAuthenticationProvider.API_KEY, API_KEY_VALUE); - } - - @Override - protected ApiKeyAuthenticationProvider createProvider(String openApiSpecId, String authSchemeName, - AuthConfig authConfig) { - return new ApiKeyAuthenticationProvider(openApiSpecId, authSchemeName, ApiKeyIn.header, API_KEY_NAME, - authConfig, List.of()); + protected ApiKeyAuthenticationProvider createProvider() { + return new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.header, API_KEY_NAME, + List.of()); } @Test @@ -56,20 +54,28 @@ void filterHeaderFromAuthorizationHeaderDefaultCase() throws IOException { @Test void filterHeaderFromAuthorizationHeaderCase() throws IOException { - authConfig.authConfigParams.put(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE, "true"); doReturn(API_KEY_AUTH_HEADER_VALUE).when(requestContext).getHeaderString("Authorization"); provider.filter(requestContext); assertHeader(headers, API_KEY_NAME, API_KEY_AUTH_HEADER_VALUE); - authConfig.authConfigParams.remove(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE); } @Test void filterHeaderNotFromAuthorizationHeaderCase() throws IOException { - authConfig.authConfigParams.put(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE, "false"); - doReturn(API_KEY_AUTH_HEADER_VALUE).when(requestContext).getHeaderString("Authorization"); - provider.filter(requestContext); - assertHeader(headers, API_KEY_NAME, API_KEY_VALUE); - authConfig.authConfigParams.remove(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE); + try (MockedStatic configProviderMocked = Mockito.mockStatic(ConfigProvider.class)) { + Config mockedConfig = Mockito.mock(Config.class); + configProviderMocked.when(ConfigProvider::getConfig).thenReturn(mockedConfig); + + when(mockedConfig.getOptionalValue( + provider.getCanonicalAuthConfigPropertyName(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE), + Boolean.class)).thenReturn(Optional.of(false)); + when(mockedConfig.getOptionalValue( + provider.getCanonicalAuthConfigPropertyName(ApiKeyAuthenticationProvider.API_KEY), String.class)) + .thenReturn(Optional.of(API_KEY_VALUE)); + doReturn(API_KEY_AUTH_HEADER_VALUE).when(requestContext).getHeaderString("Authorization"); + + provider.filter(requestContext); + assertHeader(headers, API_KEY_NAME, API_KEY_VALUE); + } } @Test @@ -82,12 +88,10 @@ void filterHeaderCase() throws IOException { void filterQueryCase() throws IOException { doReturn(INVOKED_URI).when(requestContext).getUri(); provider = new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.query, API_KEY_NAME, - authConfig, List.of()); + List.of()); provider.filter(requestContext); verify(requestContext).setUri(uriCaptor.capture()); - assertThat(uriCaptor.getValue()) - .isNotNull() - .hasParameter(API_KEY_NAME, API_KEY_VALUE); + assertThat(uriCaptor.getValue()).isNotNull().hasParameter(API_KEY_NAME, API_KEY_VALUE); } @Test @@ -95,12 +99,10 @@ void filterCookieCaseEmpty() throws IOException { final MultivaluedMap headers = new MultivaluedTreeMap<>(); doReturn(headers).when(requestContext).getHeaders(); provider = new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.cookie, API_KEY_NAME, - authConfig, List.of()); + List.of()); provider.filter(requestContext); final List cookies = headers.get(HttpHeaders.COOKIE); - assertThat(cookies) - .singleElement() - .satisfies(cookie -> assertCookie(cookie, API_KEY_NAME, API_KEY_VALUE)); + assertThat(cookies).singleElement().satisfies(cookie -> assertCookie(cookie, API_KEY_NAME, API_KEY_VALUE)); } @Test @@ -108,34 +110,33 @@ void filterCookieCaseExisting() throws IOException { final MultivaluedMap headers = new MultivaluedTreeMap<>(); final String existingCookieName = "quarkus"; final String existingCookieValue = "rocks"; - final Cookie existingCookie = new Cookie.Builder(existingCookieName) - .value(existingCookieValue) - .build(); + final Cookie existingCookie = new Cookie.Builder(existingCookieName).value(existingCookieValue).build(); headers.add(HttpHeaders.COOKIE, existingCookie); doReturn(headers).when(requestContext).getHeaders(); provider = new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.cookie, API_KEY_NAME, - authConfig, List.of()); + List.of()); provider.filter(requestContext); final List cookies = headers.get(HttpHeaders.COOKIE); - assertThat(cookies) - .satisfiesExactlyInAnyOrder( - cookie -> assertCookie(cookie, existingCookieName, existingCookieValue), - cookie -> assertCookie(cookie, API_KEY_NAME, API_KEY_VALUE)); + assertThat(cookies).satisfiesExactlyInAnyOrder(cookie -> assertCookie(cookie, existingCookieName, existingCookieValue), + cookie -> assertCookie(cookie, API_KEY_NAME, API_KEY_VALUE)); } @Test void tokenPropagationNotSupported() { - authConfig.tokenPropagation = Optional.of(true); - assertThatThrownBy(() -> new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.header, - API_KEY_NAME, authConfig, List.of())) - .hasMessageContaining("quarkus.openapi-generator.%s.auth.%s.token-propagation", OPEN_API_FILE_SPEC_ID, - AUTH_SCHEME_NAME); + try (MockedStatic configProviderMocked = Mockito.mockStatic(ConfigProvider.class)) { + Config mockedConfig = Mockito.mock(Config.class); + configProviderMocked.when(ConfigProvider::getConfig).thenReturn(mockedConfig); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), + Boolean.class)).thenReturn(Optional.of(true)); + + assertThatThrownBy(() -> new ApiKeyAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, ApiKeyIn.header, + API_KEY_NAME, List.of())).hasMessageContaining("quarkus.openapi-generator.%s.auth.%s.token-propagation", + OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME); + } } private void assertCookie(final Object cookie, final String name, final String value) { - assertThat(cookie) - .asInstanceOf(InstanceOfAssertFactories.type(Cookie.class)) - .matches(c -> Objects.equals(c.getName(), name)) - .matches(c -> Objects.equals(c.getValue(), value)); + assertThat(cookie).asInstanceOf(InstanceOfAssertFactories.type(Cookie.class)) + .matches(c -> Objects.equals(c.getName(), name)).matches(c -> Objects.equals(c.getValue(), value)); } } diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java index 479f5a71f..86716bb85 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java @@ -1,6 +1,7 @@ package io.quarkiverse.openapi.generator.providers; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.when; import java.io.IOException; import java.util.Base64; @@ -9,7 +10,11 @@ import jakarta.ws.rs.core.HttpHeaders; +import org.eclipse.microprofile.config.Config; +import org.eclipse.microprofile.config.ConfigProvider; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import io.quarkiverse.openapi.generator.AuthConfig; @@ -22,25 +27,28 @@ class BasicOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest new BasicAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, authConfig, List.of())) - .hasMessageContaining("quarkus.openapi-generator.%s.auth.%s.token-propagation", OPEN_API_FILE_SPEC_ID, - AUTH_SCHEME_NAME); + try (MockedStatic configProviderMocked = Mockito.mockStatic(ConfigProvider.class)) { + Config mockedConfig = Mockito.mock(Config.class); + configProviderMocked.when(ConfigProvider::getConfig).thenReturn(mockedConfig); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), + Boolean.class)).thenReturn(Optional.of(true)); + + assertThatThrownBy(() -> new BasicAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, List.of())) + .hasMessageContaining("quarkus.openapi-generator.%s.auth.%s.token-propagation", OPEN_API_FILE_SPEC_ID, + AUTH_SCHEME_NAME); + } + } } diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java index 1e39c96a9..e1fa92a55 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.util.List; -import java.util.Optional; import java.util.stream.Stream; import jakarta.ws.rs.core.HttpHeaders; @@ -14,11 +13,8 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import io.quarkiverse.openapi.generator.AuthConfig; - class BearerOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest { - private static final String TOKEN = "TOKEN"; private static final String INCOMING_TOKEN = "INCOMING_TOKEN"; private static final String BEARER_SCHEMA = "bearer"; @@ -26,31 +22,29 @@ class BearerOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest filterWithPropagationTestValues() { return Stream.of( - Arguments.of(null, INCOMING_TOKEN, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(null, INCOMING_TOKEN, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, INCOMING_TOKEN, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, INCOMING_TOKEN, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN)); + Arguments.of(null, "bearer", "Bearer " + INCOMING_TOKEN), + Arguments.of(null, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN), + Arguments.of(HEADER_NAME, "bearer", "Bearer " + INCOMING_TOKEN), + Arguments.of(HEADER_NAME, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN)); } } diff --git a/client/runtime/src/test/resources/application.properties b/client/runtime/src/test/resources/application.properties new file mode 100644 index 000000000..9863c1aa8 --- /dev/null +++ b/client/runtime/src/test/resources/application.properties @@ -0,0 +1,4 @@ +quarkus.openapi-generator.open_api_file_spec_id_json.auth.auth_scheme_name.api-key=API_KEY_VALUE +quarkus.openapi-generator.open_api_file_spec_id_json.auth.auth_scheme_name.username=USER +quarkus.openapi-generator.open_api_file_spec_id_json.auth.auth_scheme_name.password=PASSWORD +quarkus.openapi-generator.open_api_file_spec_id_json.auth.auth_scheme_name.bearer-token=INCOMING_TOKEN \ No newline at end of file diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index aa6bf61c2..4e8ecd509 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -225,4 +225,8 @@ These are the known limitations of this pre-release version: * Only Jackson support -We will work in the next few releases to address these use cases, until there please provide feedback for the current state of this extension. We also love contributions icon:heart[1x,role=red]. \ No newline at end of file +We will work in the next few releases to address these use cases, until there please provide feedback for the current state of this extension. We also love contributions icon:heart[1x,role=red]. + +== Configuration Properties + +include::./includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc[opts=optional, leveloffset=+1] diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc new file mode 100644 index 000000000..8410f0a8c --- /dev/null +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc @@ -0,0 +1,13 @@ +[.configuration-legend] +icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime +[.configuration-reference.searchable, cols="80,.^10,.^10"] +|=== + +h|[.header-title]##Configuration property## +h|Type +h|Default + +3+|No configuration properties found. + +|=== + diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.quarkus.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.quarkus.adoc new file mode 100644 index 000000000..8410f0a8c --- /dev/null +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.quarkus.adoc @@ -0,0 +1,13 @@ +[.configuration-legend] +icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime +[.configuration-reference.searchable, cols="80,.^10,.^10"] +|=== + +h|[.header-title]##Configuration property## +h|Type +h|Default + +3+|No configuration properties found. + +|=== + diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index c0650ac1b..7581aa6be 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -1,17 +1,977 @@ +[.configuration-legend] +icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime +[.configuration-reference.searchable, cols="80,.^10,.^10"] +|=== + +h|[.header-title]##Configuration property## +h|Type +h|Default + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model[`quarkus.openapi-generator.codegen.skip-form-model`]## + +[.description] +-- +Whether to skip the generation of models for form parameters + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SKIP_FORM_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SKIP_FORM_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.type-mappings."type-mappings"`]## + +[.description] +-- +Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a given OAS datatype (the keys of this map) + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TYPE_MAPPINGS__TYPE_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TYPE_MAPPINGS__TYPE_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.import-mappings."import-mappings"`]## + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"`]## + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations[`quarkus.openapi-generator.codegen.additional-model-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member`]## + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations[`quarkus.openapi-generator.codegen.additional-api-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args[`quarkus.openapi-generator.codegen.additional-request-args`]## + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response[`quarkus.openapi-generator.codegen.return-response`]## + +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation[`quarkus.openapi-generator.codegen.enable-security-generation`]## + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"`]## + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny[`quarkus.openapi-generator.codegen.mutiny`]## + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response[`quarkus.openapi-generator.codegen.mutiny.return-response`]## + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"`]## + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename[`quarkus.openapi-generator.codegen.generate-part-filename`]## + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value[`quarkus.openapi-generator.codegen.part-filename-value`]## + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.use-field-name-in-part-filename`]## + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation[`quarkus.openapi-generator.codegen.use-bean-validation`]## + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis[`quarkus.openapi-generator.codegen.generate-apis`]## + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models[`quarkus.openapi-generator.codegen.generate-models`]## + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode[`quarkus.openapi-generator.codegen.equals-hashcode`]## + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## + +[.description] +-- +Whether to log the internal generator codegen process in the default output or not. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VERBOSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VERBOSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir[`quarkus.openapi-generator.codegen.input-base-dir`]## + +[.description] +-- +Option to change the directory where OpenAPI files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INPUT_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INPUT_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir[`quarkus.openapi-generator.codegen.template-base-dir`]## + +[.description] +-- +Option to change the directory where template files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TEMPLATE_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TEMPLATE_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec[`quarkus.openapi-generator.codegen.validateSpec`]## + +[.description] +-- +Whether or not to skip validating the input spec prior to generation. By default, invalid specifications will result in an error. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VALIDATESPEC+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VALIDATESPEC+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`true` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-include]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-include[`quarkus.openapi-generator.codegen.include`]## + +[.description] +-- +Option to specify files for which generation should be executed only + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude[`quarkus.openapi-generator.codegen.exclude`]## + +[.description] +-- +Option to exclude file from generation + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EXCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EXCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme[`quarkus.openapi-generator.codegen.default-security-scheme`]## + +[.description] +-- +Create security for the referenced security scheme + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_DEFAULT_SECURITY_SCHEME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_DEFAULT_SECURITY_SCHEME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model[`quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model`]## + +[.description] +-- +Whether to skip the generation of models for form parameters + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"`]## + +[.description] +-- +Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a given OAS datatype (the keys of this map) + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"`]## + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"`]## + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member`]## + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args[`quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args`]## + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".return-response`]## -:summaryTableId: quarkus-openapi-generator -[.configuration-legend] -icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime -[.configuration-reference.searchable, cols="80,.^10,.^10"] -|=== +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. -h|[[quarkus-openapi-generator_configuration]]link:#quarkus-openapi-generator_configuration[Configuration property] -h|Type -h|Default +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation[`quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation`]## + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"`]## + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny`]## + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response`]## + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"`]## + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename`]## + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value[`quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value`]## + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename`]## + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation[`quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation`]## + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis[`quarkus.openapi-generator.codegen.spec."spec-item".generate-apis`]## + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models[`quarkus.openapi-generator.codegen.spec."spec-item".generate-models`]## + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode[`quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode`]## + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## + +[.description] +-- +Base package for where the generated code for the given OpenAPI specification will be added. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__BASE_PACKAGE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__BASE_PACKAGE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## + +[.description] +-- +Suffix name for generated api classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix`]## + +[.description] +-- +Suffix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix`]## + +[.description] +-- +Prefix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix`]## + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter`]## + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count`]## + +[.description] +-- +Remove operation id prefix + -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]]`link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation]` +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++` +endif::add-copy-button-to-env-var[] +-- +|int +| +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## [.description] -- @@ -21,18 +981,18 @@ For example, given a file named petstore.json with a securityScheme named "petst quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true + ifdef::add-copy-button-to-env-var[] Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] endif::add-copy-button-to-env-var[] ifndef::add-copy-button-to-env-var[] Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` endif::add-copy-button-to-env-var[] ---|boolean +-- +|boolean |`false` - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]]`link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[quarkus.openapi-generator."item-configs".auth."auth-configs".header-name]` - +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## [.description] -- @@ -42,18 +1002,18 @@ For example, given a file named petstore.json with a securityScheme named "petst quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName + ifdef::add-copy-button-to-env-var[] Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] endif::add-copy-button-to-env-var[] ifndef::add-copy-button-to-env-var[] Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` endif::add-copy-button-to-env-var[] ---|string +-- +|string | - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params]]`link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params[quarkus.openapi-generator."item-configs".auth."auth-configs"."auth-config-params"]` - +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params[`quarkus.openapi-generator."item-configs".auth."auth-configs"."auth-config-params"`]## [.description] -- @@ -63,14 +1023,16 @@ For example, given a file named petstore.json with a securityScheme named "petst quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword + ifdef::add-copy-button-to-env-var[] Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++[] endif::add-copy-button-to-env-var[] ifndef::add-copy-button-to-env-var[] Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++` endif::add-copy-button-to-env-var[] ---|link:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html[String] - +-- +|Map | -|=== \ No newline at end of file +|=== + diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc new file mode 100644 index 000000000..7581aa6be --- /dev/null +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -0,0 +1,1038 @@ +[.configuration-legend] +icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime +[.configuration-reference.searchable, cols="80,.^10,.^10"] +|=== + +h|[.header-title]##Configuration property## +h|Type +h|Default + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model[`quarkus.openapi-generator.codegen.skip-form-model`]## + +[.description] +-- +Whether to skip the generation of models for form parameters + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SKIP_FORM_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SKIP_FORM_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.type-mappings."type-mappings"`]## + +[.description] +-- +Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a given OAS datatype (the keys of this map) + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TYPE_MAPPINGS__TYPE_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TYPE_MAPPINGS__TYPE_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.import-mappings."import-mappings"`]## + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"`]## + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations[`quarkus.openapi-generator.codegen.additional-model-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member`]## + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations[`quarkus.openapi-generator.codegen.additional-api-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args[`quarkus.openapi-generator.codegen.additional-request-args`]## + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response[`quarkus.openapi-generator.codegen.return-response`]## + +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation[`quarkus.openapi-generator.codegen.enable-security-generation`]## + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"`]## + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny[`quarkus.openapi-generator.codegen.mutiny`]## + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response[`quarkus.openapi-generator.codegen.mutiny.return-response`]## + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"`]## + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename[`quarkus.openapi-generator.codegen.generate-part-filename`]## + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value[`quarkus.openapi-generator.codegen.part-filename-value`]## + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.use-field-name-in-part-filename`]## + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation[`quarkus.openapi-generator.codegen.use-bean-validation`]## + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis[`quarkus.openapi-generator.codegen.generate-apis`]## + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models[`quarkus.openapi-generator.codegen.generate-models`]## + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode[`quarkus.openapi-generator.codegen.equals-hashcode`]## + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## + +[.description] +-- +Whether to log the internal generator codegen process in the default output or not. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VERBOSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VERBOSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir[`quarkus.openapi-generator.codegen.input-base-dir`]## + +[.description] +-- +Option to change the directory where OpenAPI files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INPUT_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INPUT_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir[`quarkus.openapi-generator.codegen.template-base-dir`]## + +[.description] +-- +Option to change the directory where template files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TEMPLATE_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_TEMPLATE_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec[`quarkus.openapi-generator.codegen.validateSpec`]## + +[.description] +-- +Whether or not to skip validating the input spec prior to generation. By default, invalid specifications will result in an error. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VALIDATESPEC+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_VALIDATESPEC+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`true` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-include]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-include[`quarkus.openapi-generator.codegen.include`]## + +[.description] +-- +Option to specify files for which generation should be executed only + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude[`quarkus.openapi-generator.codegen.exclude`]## + +[.description] +-- +Option to exclude file from generation + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EXCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_EXCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme[`quarkus.openapi-generator.codegen.default-security-scheme`]## + +[.description] +-- +Create security for the referenced security scheme + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_DEFAULT_SECURITY_SCHEME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_DEFAULT_SECURITY_SCHEME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model[`quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model`]## + +[.description] +-- +Whether to skip the generation of models for form parameters + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"`]## + +[.description] +-- +Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a given OAS datatype (the keys of this map) + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"`]## + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"`]## + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member`]## + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations`]## + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args[`quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args`]## + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".return-response`]## + +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation[`quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation`]## + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"`]## + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny`]## + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response`]## + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"`]## + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename`]## + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value[`quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value`]## + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename`]## + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation[`quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation`]## + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis[`quarkus.openapi-generator.codegen.spec."spec-item".generate-apis`]## + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models[`quarkus.openapi-generator.codegen.spec."spec-item".generate-models`]## + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode[`quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode`]## + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## + +[.description] +-- +Base package for where the generated code for the given OpenAPI specification will be added. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__BASE_PACKAGE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__BASE_PACKAGE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## + +[.description] +-- +Suffix name for generated api classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix`]## + +[.description] +-- +Suffix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix`]## + +[.description] +-- +Prefix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix`]## + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter`]## + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count`]## + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++` +endif::add-copy-button-to-env-var[] +-- +|int +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## + +[.description] +-- +Enables the authentication token propagation for this particular securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## + +[.description] +-- +Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params[`quarkus.openapi-generator."item-configs".auth."auth-configs"."auth-config-params"`]## + +[.description] +-- +Configures a particular parameter value to be used by any of the different internal authentication filters that processes the different securityScheme definitions. + +For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user and password to be used. must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +|=== + diff --git a/docs/pom.xml b/docs/pom.xml index bc3f73da5..56a0f7165 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -51,11 +51,6 @@ ${project.basedir}/modules/ROOT/pages/includes/ - - ${project.basedir}/../target/asciidoc/generated/config/ - quarkus-openapi-generator.adoc - false - ${project.basedir}/templates/includes attributes.adoc @@ -70,6 +65,14 @@ org.asciidoctor asciidoctor-maven-plugin + + io.quarkus + quarkus-config-doc-maven-plugin + true + + ${project.basedir}/modules/ROOT/pages/includes/ + + diff --git a/pom.xml b/pom.xml index 20820a7d6..49d4c56c6 100644 --- a/pom.xml +++ b/pom.xml @@ -118,6 +118,11 @@ -Xdoclint:none + + io.quarkus + quarkus-config-doc-maven-plugin + ${quarkus.version} + From d976cd39d1ae08388ffcc17b67e71bcdeb711d34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:56:04 -0300 Subject: [PATCH 064/166] Bump org.openapitools:openapi-generator from 7.10.0 to 7.11.0 (#951) Bumps [org.openapitools:openapi-generator](https://github.com/openapitools/openapi-generator) from 7.10.0 to 7.11.0. - [Release notes](https://github.com/openapitools/openapi-generator/releases) - [Changelog](https://github.com/OpenAPITools/openapi-generator/blob/master/docs/3.0.0-release-note.md) - [Commits](https://github.com/openapitools/openapi-generator/compare/v7.10.0...v7.11.0) --- updated-dependencies: - dependency-name: org.openapitools:openapi-generator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 4457e0450..68c372563 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -11,7 +11,7 @@ Quarkus - Openapi Generator - Client - Deployment - 7.10.0 + 7.11.0 2.0.16 4.3.1 2.1.25 From b9d49cf2d5dcf42701081954dddadd3e561b3f0b Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:04:08 -0300 Subject: [PATCH 065/166] Add validation when the input-base-dir is not present (#928) * Add some validations for server configs * Update server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java Co-authored-by: Helber Belmiro * Update server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java Co-authored-by: Helber Belmiro * Update server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java Co-authored-by: Helber Belmiro --------- Co-authored-by: Helber Belmiro --- .../codegen/ApicurioOpenApiServerCodegen.java | 25 ++++++++++++++++--- .../generator/deployment/CodegenTest.java | 11 ++++++++ .../doesNotExistDir.application.properties | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100755 server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java index 0f2e64ca6..a645032d0 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java @@ -46,16 +46,20 @@ private Path getInputBaseDir(final Path sourceDir, final Config config) { @Override public boolean shouldRun(Path sourceDir, Config config) { - if (config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isEmpty()) { - return false; + boolean specIsPresent = config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isPresent(); + if (!specIsPresent) { + log.warn("The {} property is not present, the code generation will be ignored", + CodegenConfig.getSpecPropertyName()); } - Path path = getInputBaseDir(sourceDir, config); - return Files.isDirectory(path); + return specIsPresent; } @Override public boolean trigger(CodeGenContext context) throws CodeGenException { final Path openApiDir = getInputBaseDir(context.inputDir(), context.config()); + + validateOpenApiDir(context, openApiDir); + final Path outDir = context.outDir(); final ApicurioCodegenWrapper apicurioCodegenWrapper = new ApicurioCodegenWrapper( context.config(), outDir.toFile()); @@ -92,6 +96,19 @@ public boolean trigger(CodeGenContext context) throws CodeGenException { return true; } + private static void validateOpenApiDir(CodeGenContext context, Path openApiDir) throws CodeGenException { + if (!Files.exists(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory does not exist. Please create the directory at " + context.inputDir()); + } + + if (!Files.isDirectory(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory is not a directory. Please create the directory at " + + context.inputDir()); + } + } + private File convertToJSON(Path yamlPath) throws CodeGenException { try { ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory()); diff --git a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java index b642475d1..bf781f86e 100755 --- a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java +++ b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java @@ -9,6 +9,7 @@ import org.apache.commons.io.FileUtils; import org.eclipse.microprofile.config.Config; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -60,4 +61,14 @@ public void testInputDir() throws CodeGenException { Path.of("target/generated-test-sources/inputDir/io/petstore/PetResource.java"))); } + @Test + public void shouldGenerateAnErrorWhenInputDirIsNotExist() { + Config config = MockConfigUtils.getTestConfig("doesNotExistDir.application.properties"); + CodeGenContext codeGenContext = new CodeGenContext(null, Path.of(OUT_DIR, "inputDir"), WORK_DIR, + INPUT_DIR, false, config, true); + ApicurioOpenApiServerCodegen apicurioOpenApiServerCodegen = new ApicurioOpenApiServerCodegen(); + + Assertions.assertThrows(CodeGenException.class, () -> apicurioOpenApiServerCodegen.trigger(codeGenContext)); + } + } diff --git a/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties new file mode 100755 index 000000000..a0c722e68 --- /dev/null +++ b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties @@ -0,0 +1,2 @@ +quarkus.openapi.generator.spec=petstore-openapi-2.json +quarkus.openapi.generator.base-package=io.petstore \ No newline at end of file From a940d8239770ce3272200c2d4edca62e0f1dab92 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:40:02 -0300 Subject: [PATCH 066/166] Convert client and server modules to use @ConfigMapping (#944) --- client/deployment/pom.xml | 3 - .../generator/deployment/CodegenConfig.java | 44 ++++----- .../deployment/CommonItemConfig.java | 90 +++++++++---------- .../deployment/GlobalCodegenConfig.java | 37 ++++---- .../generator/deployment/SpecItemConfig.java | 35 ++++---- client/runtime/pom.xml | 3 - .../openapi/generator/AuthsConfig.java | 21 ++--- .../generator/OpenApiGeneratorConfig.java | 27 +++--- .../openapi/generator/SpecItemConfig.java | 22 ++--- server/deployment/pom.xml | 3 - .../generator/deployment/CodegenConfig.java | 24 ++--- 11 files changed, 138 insertions(+), 171 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 68c372563..5fb3f85ca 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -169,9 +169,6 @@ ${quarkus.version} - - -AlegacyConfigRoot=true - diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index 02192c6a6..883a6cf95 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -7,30 +7,32 @@ import java.util.stream.Collectors; import io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorOutputPaths; -import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithName; import io.smallrye.config.common.utils.StringUtil; // This configuration is read in codegen phase (before build time), the annotation is for document purposes and avoiding quarkus warns -@ConfigRoot(name = CodegenConfig.CODEGEN_TIME_CONFIG_PREFIX, phase = ConfigPhase.BUILD_TIME) -public class CodegenConfig extends GlobalCodegenConfig { +@ConfigRoot(phase = ConfigPhase.BUILD_TIME) +@ConfigMapping(prefix = "quarkus." + CodegenConfig.CODEGEN_TIME_CONFIG_PREFIX) +public interface CodegenConfig extends GlobalCodegenConfig { - static final String CODEGEN_TIME_CONFIG_PREFIX = "openapi-generator.codegen"; + String CODEGEN_TIME_CONFIG_PREFIX = "openapi-generator.codegen"; - public static final String API_PKG_SUFFIX = ".api"; - public static final String MODEL_PKG_SUFFIX = ".model"; + String API_PKG_SUFFIX = ".api"; + String MODEL_PKG_SUFFIX = ".model"; - public static final String ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER_NAME_DEFAULT = "UNEXPECTED"; - public static final String ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER_STRING_VALUE_DEFAULT = "unexpected"; + String ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER_NAME_DEFAULT = "UNEXPECTED"; + String ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER_STRING_VALUE_DEFAULT = "unexpected"; // package visibility for unit tests - static final String BUILD_TIME_GLOBAL_PREFIX_FORMAT = "quarkus." + CODEGEN_TIME_CONFIG_PREFIX + ".%s"; - static final String BUILD_TIME_SPEC_PREFIX_FORMAT = "quarkus." + CODEGEN_TIME_CONFIG_PREFIX + ".spec.%s"; + String BUILD_TIME_GLOBAL_PREFIX_FORMAT = "quarkus." + CODEGEN_TIME_CONFIG_PREFIX + ".%s"; + String BUILD_TIME_SPEC_PREFIX_FORMAT = "quarkus." + CODEGEN_TIME_CONFIG_PREFIX + ".spec.%s"; - public static final List SUPPORTED_CONFIGURATIONS = Arrays.stream(ConfigName.values()).map(cn -> cn.name) + List SUPPORTED_CONFIGURATIONS = Arrays.stream(ConfigName.values()).map(cn -> cn.name) .collect(Collectors.toList()); - public enum ConfigName { + enum ConfigName { //global configs VERBOSE("verbose"), INPUT_BASE_DIR("input-base-dir"), @@ -88,28 +90,28 @@ public enum ConfigName { /** * OpenAPI Spec details for codegen configuration. */ - @ConfigItem(name = "spec") - public Map specItem; + @WithName("spec") + Map specItem(); - public static String resolveApiPackage(final String basePackage) { + static String resolveApiPackage(final String basePackage) { return String.format("%s%s", basePackage, API_PKG_SUFFIX); } - public static String resolveModelPackage(final String basePackage) { + static String resolveModelPackage(final String basePackage) { return String.format("%s%s", basePackage, MODEL_PKG_SUFFIX); } /** * Return global config name, openapi-generator.codegen.config-name */ - public static String getGlobalConfigName(ConfigName configName) { + static String getGlobalConfigName(ConfigName configName) { return String.format(BUILD_TIME_GLOBAL_PREFIX_FORMAT, configName.name); } /** * Return spec config name openapi-generator.codegen.spec.%s.config-name */ - public static String getSpecConfigName(ConfigName configName, final Path openApiFilePath) { + static String getSpecConfigName(ConfigName configName, final Path openApiFilePath) { return String.format("%s.%s", getBuildTimeSpecPropertyPrefix(openApiFilePath), configName.name); } @@ -119,7 +121,7 @@ public static String getSpecConfigName(ConfigName configName, final Path openApi * returned value is * openapi.generator.codegen.spec.petstore.mutiny. */ - public static String getSpecConfigNameByConfigKey(final String configKey, final ConfigName configName) { + static String getSpecConfigNameByConfigKey(final String configKey, final ConfigName configName) { String buildTimeSpecPropertyPrefix = String.format(BUILD_TIME_SPEC_PREFIX_FORMAT, configKey); return String.format("%s.%s", buildTimeSpecPropertyPrefix, configName.name); } @@ -130,11 +132,11 @@ public static String getSpecConfigNameByConfigKey(final String configKey, final * `quarkus.openapi-generator."petstore_json"`. * Every the periods (.) in the file name will be replaced by underscore (_). */ - public static String getBuildTimeSpecPropertyPrefix(final Path openApiFilePath) { + static String getBuildTimeSpecPropertyPrefix(final Path openApiFilePath) { return String.format(BUILD_TIME_SPEC_PREFIX_FORMAT, getSanitizedFileName(openApiFilePath)); } - public static String getSanitizedFileName(final Path openApiFilePath) { + static String getSanitizedFileName(final Path openApiFilePath) { return StringUtil .replaceNonAlphanumericByUnderscores(OpenApiGeneratorOutputPaths.getRelativePath(openApiFilePath).toString()); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index 6d65cf4b8..487403b55 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -3,8 +3,7 @@ import java.util.Map; import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; +import io.smallrye.config.WithName; /* * Model for the configuration of this extension. @@ -13,92 +12,91 @@ * Not meant to be used outside this scope. * Config items can be applied on spec and globally as well */ -@ConfigGroup -public class CommonItemConfig { +public interface CommonItemConfig { /** * Whether to skip the generation of models for form parameters */ - @ConfigItem(name = "skip-form-model") - public Optional skipFormModel; + @WithName("skip-form-model") + Optional skipFormModel(); /** * Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a * given OAS datatype (the keys of this map) */ - @ConfigItem(name = "type-mappings") - public Map typeMappings; + @WithName("type-mappings") + Map typeMappings(); /** * Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be * imported when a given OAS datatype (the keys of this map) is used */ - @ConfigItem(name = "import-mappings") - public Map importMappings; + @WithName("import-mappings") + Map importMappings(); /** * Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be * imported when a given schema type (the keys of this map) is used */ - @ConfigItem(name = "schema-mappings") - public Map schemaMappings; + @WithName("schema-mappings") + Map schemaMappings(); /** * The specified annotations will be added to the generated model files */ - @ConfigItem(name = "additional-model-type-annotations") - public Optional additionalModelTypeAnnotations; + @WithName("additional-model-type-annotations") + Optional additionalModelTypeAnnotations(); /** * Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is * {@code false}. */ - @ConfigItem(name = "additional-enum-type-unexpected-member") - public Optional additionalEnumTypeUnexpectedMemberAnnotations; + @WithName("additional-enum-type-unexpected-member") + Optional additionalEnumTypeUnexpectedMemberAnnotations(); /** * The specified annotations will be added to the generated api files */ - @ConfigItem(name = "additional-api-type-annotations") - public Optional additionalApiTypeAnnotations; + @WithName("additional-api-type-annotations") + Optional additionalApiTypeAnnotations(); /** * Add custom/additional HTTP Headers or other args to every request */ - @ConfigItem(name = "additional-request-args") - public Optional additionalRequestArgs; + @WithName("additional-request-args") + Optional additionalRequestArgs(); /** * Defines if the methods should return {@link jakarta.ws.rs.core.Response} or a model. Default is {@code false}. */ - @ConfigItem(name = "return-response") - public Optional returnResponse; + @WithName("return-response") + Optional returnResponse(); /** * Defines if security support classes should be generated */ - @ConfigItem(name = "enable-security-generation") - public Optional enableSecurityGeneration; + @WithName("enable-security-generation") + Optional enableSecurityGeneration(); /** * Defines the normalizer options. */ - @ConfigItem(name = "open-api-normalizer") - public Map normalizer; + @WithName("open-api-normalizer") + Map normalizer(); /** * Enable SmallRye Mutiny support. If you set this to {@code true}, all return types will be wrapped in * {@link io.smallrye.mutiny.Uni}. */ - @ConfigItem(name = "mutiny") - public Optional supportMutiny; + @WithName("mutiny") + Optional supportMutiny(); /** * Defines with SmallRye Mutiny enabled if methods should return {@link jakarta.ws.rs.core.Response} or a model. Default is * {@code false}. */ - @ConfigItem(name = "mutiny.return-response") - public Optional mutinyReturnResponse; + @WithName("mutiny.return-response") + Optional mutinyReturnResponse(); /** * Handles the return type for each operation, depending on the configuration. @@ -125,16 +123,16 @@ public class CommonItemConfig { * - If the operation has a void return type, it will return {@link io.smallrye.mutiny.Uni}. * - Otherwise, it will return {@link io.smallrye.mutiny.Uni}`. */ - @ConfigItem(name = "mutiny.operation-ids") - public Optional> mutinyMultiOperationIds; + @WithName("mutiny.operation-ids") + Map mutinyMultiOperationIds(); /** * Defines, whether the `PartFilename` ({@link org.jboss.resteasy.reactive.PartFilename} or * {@link org.jboss.resteasy.annotations.providers.multipart.PartFilename}) annotation should be generated for * MultipartForm POJOs. By setting to {@code false}, the annotation will not be generated. */ - @ConfigItem(name = "generate-part-filename") - public Optional generatePartFilename; + @WithName("generate-part-filename") + Optional generatePartFilename(); /** * Defines the filename for a part in case the `PartFilename` annotation @@ -143,40 +141,40 @@ public class CommonItemConfig { * In case no value is set, the default one is `<fieldName>File` or `file`, depending on the * {@link CommonItemConfig#useFieldNameInPartFilename} configuration. */ - @ConfigItem(name = "part-filename-value") - public Optional partFilenameValue; + @WithName("part-filename-value") + Optional partFilenameValue(); /** * Defines, whether the filename should also include the property name in case the `PartFilename` annotation * ({@link org.jboss.resteasy.reactive.PartFilename} or * {@link org.jboss.resteasy.annotations.providers.multipart.PartFilename}) is generated. */ - @ConfigItem(name = "use-field-name-in-part-filename") - public Optional useFieldNameInPartFilename; + @WithName("use-field-name-in-part-filename") + Optional useFieldNameInPartFilename(); /** * Enable bean validation. If you set this to {@code true}, validation annotations are added to generated sources E.g. * {@code @Size}. */ - @ConfigItem(name = "use-bean-validation") - public Optional useBeanValidation; + @WithName("use-bean-validation") + Optional useBeanValidation(); /** * Enable the generation of APIs. If you set this to {@code false}, APIs will not be generated. */ - @ConfigItem(name = "generate-apis") - public Optional generateApis; + @WithName("generate-apis") + Optional generateApis(); /** * Enable the generation of models. If you set this to {@code false}, models will not be generated. */ - @ConfigItem(name = "generate-models") - public Optional generateModels; + @WithName("generate-models") + Optional generateModels(); /** * Enable the generation of equals and hashcode in models. If you set this to {@code false}, the models * will not have equals and hashcode. */ - @ConfigItem(name = "equals-hashcode") - public Optional equalsHashcode; + @WithName("equals-hashcode") + Optional equalsHashcode(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GlobalCodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GlobalCodegenConfig.java index aff927be0..0c9f5888c 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GlobalCodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GlobalCodegenConfig.java @@ -2,8 +2,8 @@ import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithName; /* * Model for the configuration of this extension. @@ -12,50 +12,51 @@ * Not meant to be used outside this scope. * Config items can be applied only globally */ -@ConfigGroup -public class GlobalCodegenConfig extends CommonItemConfig { +public interface GlobalCodegenConfig extends CommonItemConfig { /** * Whether to log the internal generator codegen process in the default output or not. */ - @ConfigItem(name = "verbose", defaultValue = "false") - public boolean verbose; + @WithDefault("false") + @WithName("verbose") + boolean verbose(); /** * Option to change the directory where OpenAPI files must be found. */ - @ConfigItem(name = "input-base-dir") - public Optional inputBaseDir; + @WithName("input-base-dir") + Optional inputBaseDir(); /** * Option to change the directory where template files must be found. */ - @ConfigItem(name = "template-base-dir") - public Optional templateBaseDir; + @WithName("template-base-dir") + Optional templateBaseDir(); /** * Whether or not to skip validating the input spec prior to generation. By default, invalid specifications will result in * an error. */ - @ConfigItem(name = "validateSpec", defaultValue = "true") - public boolean validateSpec; + @WithName("validateSpec") + @WithDefault("true") + boolean validateSpec(); /** * Option to specify files for which generation should be executed only */ - @ConfigItem(name = "include") - public Optional include; + @WithName("include") + Optional include(); /** * Option to exclude file from generation */ - @ConfigItem(name = "exclude") - public Optional exclude; + @WithName("exclude") + Optional exclude(); /** * Create security for the referenced security scheme */ - @ConfigItem(name = "default-security-scheme") - public Optional defaultSecuritySchema; + @WithName("default-security-scheme") + Optional defaultSecuritySchema(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index 3eb45978f..bffb801fd 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -2,8 +2,7 @@ import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; +import io.smallrye.config.WithName; /* * Model for the configuration of this extension. @@ -12,48 +11,48 @@ * Not meant to be used outside this scope. * Config items can be applied only on spec */ -@ConfigGroup -public class SpecItemConfig extends CommonItemConfig { +public interface SpecItemConfig extends CommonItemConfig { /** * Base package for where the generated code for the given OpenAPI specification will be added. */ - @ConfigItem(name = "base-package") - public Optional basePackage; + @WithName("base-package") + Optional basePackage(); /** * Suffix name for generated api classes */ - @ConfigItem(name = "api-name-suffix") - public Optional apiNameSuffix; + @WithName("api-name-suffix") + Optional apiNameSuffix(); /** * Suffix name for generated model classes */ - @ConfigItem(name = "model-name-suffix") - public Optional modelNameSuffix; + @WithName("model-name-suffix") + Optional modelNameSuffix(); /** * Prefix name for generated model classes */ - @ConfigItem(name = "model-name-prefix") - public Optional modelNamePrefix; + @WithName("model-name-prefix") + Optional modelNamePrefix(); /** * Remove operation id prefix */ - @ConfigItem(name = "remove-operation-id-prefix") - public Optional removeOperationIdPrefix; + + @WithName("remove-operation-id-prefix") + Optional removeOperationIdPrefix(); /** * Remove operation id prefix */ - @ConfigItem(name = "remove-operation-id-prefix-delimiter") - public Optional removeOperationIdPrefixDelimiter; + @WithName("remove-operation-id-prefix-delimiter") + Optional removeOperationIdPrefixDelimiter(); /** * Remove operation id prefix */ - @ConfigItem(name = "remove-operation-id-prefix-count") - public Optional removeOperationIdPrefixCount; + @WithName("remove-operation-id-prefix-count") + Optional removeOperationIdPrefixCount(); } diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index d50c39f2c..e5ec29b63 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -94,9 +94,6 @@ ${quarkus.version} - - -AlegacyConfigRoot=true - diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthsConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthsConfig.java index a02f00c11..ce90f077b 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthsConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthsConfig.java @@ -3,11 +3,9 @@ import java.util.Map; import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; +import io.smallrye.config.WithParentName; -@ConfigGroup -public class AuthsConfig { +public interface AuthsConfig { /** * Configurations for the individual securitySchemes present on a given OpenApi spec definition file. @@ -21,17 +19,10 @@ public class AuthsConfig { * @see SpecItemConfig * @see AuthConfig */ - @ConfigItem(name = ConfigItem.PARENT) - public Map authConfigs; + @WithParentName() + Map authConfigs(); - public Optional getItemConfig(String authConfig) { - return Optional.ofNullable(authConfigs.get(authConfig)); - } - - @Override - public String toString() { - return "AuthsConfig{" + - "authConfigs=" + authConfigs + - '}'; + default Optional getItemConfig(String authConfig) { + return Optional.ofNullable(authConfigs().get(authConfig)); } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java index 6b297f577..9fe301a93 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/OpenApiGeneratorConfig.java @@ -3,18 +3,20 @@ import java.util.Map; import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithParentName; import io.smallrye.config.common.utils.StringUtil; /** * This class represents the runtime configurations for the openapi-generator extension. */ -@ConfigRoot(name = OpenApiGeneratorConfig.RUNTIME_TIME_CONFIG_PREFIX, phase = ConfigPhase.RUN_TIME) -public class OpenApiGeneratorConfig { +@ConfigMapping(prefix = "quarkus." + OpenApiGeneratorConfig.RUNTIME_TIME_CONFIG_PREFIX) +@ConfigRoot(phase = ConfigPhase.RUN_TIME) +public interface OpenApiGeneratorConfig { - public static final String RUNTIME_TIME_CONFIG_PREFIX = "openapi-generator"; + String RUNTIME_TIME_CONFIG_PREFIX = "openapi-generator"; /** * Configurations of the individual OpenApi spec definitions, i.e. the provided files. @@ -23,21 +25,14 @@ public class OpenApiGeneratorConfig { * For example, a file named petstore.json is sanitized into the name petstore_json, and thus the specific * configurations this file must start with the prefix quarkus.openapi-generator.petstore_json */ - @ConfigItem(name = ConfigItem.PARENT) - public Map itemConfigs; + @WithParentName + Map itemConfigs(); - public Optional getItemConfig(String specItem) { - return Optional.ofNullable(itemConfigs.get(specItem)); + default Optional getItemConfig(String specItem) { + return Optional.ofNullable(itemConfigs().get(specItem)); } - @Override - public String toString() { - return "OpenApiGeneratorConfig{" + - "itemConfigs=" + itemConfigs + - '}'; - } - - public static String getSanitizedSecuritySchemeName(final String securitySchemeName) { + static String getSanitizedSecuritySchemeName(final String securitySchemeName) { return StringUtil.replaceNonAlphanumericByUnderscores(securitySchemeName); } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/SpecItemConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/SpecItemConfig.java index 91c79b656..da942e1fd 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/SpecItemConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/SpecItemConfig.java @@ -2,15 +2,11 @@ import java.util.Optional; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; - /** * This class represents the runtime authentication related configurations for the individual OpenApi spec definitions, * i.e. the provided files. */ -@ConfigGroup -public class SpecItemConfig { +public interface SpecItemConfig { /** * Authentication related configurations for the different securitySchemes present on a given OpenApi spec @@ -21,17 +17,9 @@ public class SpecItemConfig { * * @see AuthsConfig */ - @ConfigItem - public AuthsConfig auth; - - public Optional getAuth() { - return Optional.ofNullable(auth); - } + AuthsConfig auth(); - @Override - public String toString() { - return "SpecItemConfig{" + - "auth=" + auth + - '}'; + default Optional getAuth() { + return Optional.ofNullable(auth()); } -} \ No newline at end of file +} diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 7c9619120..2358b4482 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -38,9 +38,6 @@ ${quarkus.version} - - -AlegacyConfigRoot=true - diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java index 139c2c1f8..19f5d9a5f 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java @@ -2,29 +2,31 @@ import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; -@ConfigRoot(name = CodegenConfig.CODEGEN_TIME_CONFIG_PREFIX, phase = ConfigPhase.BUILD_TIME) -public class CodegenConfig { +@ConfigRoot(phase = ConfigPhase.BUILD_TIME) +@ConfigMapping(prefix = CodegenConfig.CODEGEN_TIME_CONFIG_PREFIX) +public interface CodegenConfig { - static final String CODEGEN_TIME_CONFIG_PREFIX = "quarkus.openapi.generator"; - private static final String CODEGEN_BASE_PACKAGE = CODEGEN_TIME_CONFIG_PREFIX + ".base-package"; - private static final String CODEGEN_SPEC = CODEGEN_TIME_CONFIG_PREFIX + ".spec"; - private static final String INPUT_BASE_DIR = CODEGEN_TIME_CONFIG_PREFIX + ".input-base-dir"; - private static final String CODEGEN_REACTIVE = CODEGEN_TIME_CONFIG_PREFIX + ".reactive"; + String CODEGEN_TIME_CONFIG_PREFIX = "quarkus.openapi.generator"; + String CODEGEN_BASE_PACKAGE = CODEGEN_TIME_CONFIG_PREFIX + ".base-package"; + String CODEGEN_SPEC = CODEGEN_TIME_CONFIG_PREFIX + ".spec"; + String INPUT_BASE_DIR = CODEGEN_TIME_CONFIG_PREFIX + ".input-base-dir"; + String CODEGEN_REACTIVE = CODEGEN_TIME_CONFIG_PREFIX + ".reactive"; - public static String getBasePackagePropertyName() { + static String getBasePackagePropertyName() { return CODEGEN_BASE_PACKAGE; } - public static String getSpecPropertyName() { + static String getSpecPropertyName() { return CODEGEN_SPEC; } - public static String getInputBaseDirPropertyName() { + static String getInputBaseDirPropertyName() { return INPUT_BASE_DIR; } - public static String getCodegenReactive() { + static String getCodegenReactive() { return CODEGEN_REACTIVE; } } From c59792bb3512652a1122e81be2fd3635ac79fec5 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Wed, 22 Jan 2025 07:41:38 -0500 Subject: [PATCH 067/166] Small cleanup in README (#956) Converted to markdown blockers and remove the docs link duplication. Maybe we should consider publishing docs for the latest released version? --- README.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 0c70d6ca5..65d22e09a 100644 --- a/README.md +++ b/README.md @@ -14,19 +14,18 @@ [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0) - -> **⚠️** This is the instructions for the latest SNAPSHOT version (main branch). Please, see the [latest **released** documentation](https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html) if you are looking for instructions. - -> **⚠️** This extension, [like Quarkus 3.7](https://quarkus.io/blog/java-17/), requires Java 17. The last version of this extension that supports earlier versions of Java is [2.2.16](https://github.com/quarkiverse/quarkus-openapi-generator/releases/tag/2.2.16). - -> **⚠️** Check versions 1.x.x if you're still using Quarkus 2. But be aware that we no longer support Quarkus 2. That means there are no updates planned for those versions. - Quarkus' extensions for generation of [Rest Clients](https://quarkus.io/guides/rest-client) and server stubs generation based on the [Apicurio Codegen](https://github.com/Apicurio/apicurio-codegen) capabilities based on OpenAPI specification files. -This client-side extension is based on the [OpenAPI Generator Tool](https://openapi-generator.tech/). Please consider donation to help them maintain the +This client-side extension is based on the [OpenAPI Generator Tool](https://openapi-generator.tech/). Please consider a donation to help them maintain the project: https://opencollective.com/openapi_generator/donate -This repository holds two Quarkus extensions. The one located on the client folder is for REST code generation for client side only. The extension located in the server folder can be used for server stubs generation. +This repository holds two Quarkus extensions. The one located in the client folder is for REST code generation for client-side only. The extension located in the server folder can be used for server stubs generation. + +> [!WARNING] +> This extension, [like Quarkus 3.7](https://quarkus.io/blog/java-17/), requires Java 17. The last version of this extension that supports earlier versions of Java is [2.2.16](https://github.com/quarkiverse/quarkus-openapi-generator/releases/tag/2.2.16). + +> [!CAUTION] +> Check versions 1.x.x if you're still using Quarkus 2. But be aware that we no longer support Quarkus 2. That means there are no updates planned for those versions. **Want to contribute? Great!** We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples... But first, read [this page](CONTRIBUTING.md). @@ -34,7 +33,7 @@ This repository holds two Quarkus extensions. The one located on the client fold You can learn more in [Quarkus Openapi Generator Documentation](http://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html). - +> [!TIP] > If you want to improve the docs, please feel free to contribute editing the docs in [Docs](https://github.com/quarkiverse/quarkus-openapi-generator/tree/main/docs/modules/ROOT). But first, read [this page](CONTRIBUTING.md). ## Contributors ✨ From 00556fff7b9b4fb48361b6394d1605cbb637acfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pere=20Fern=C3=A1ndez?= Date: Wed, 22 Jan 2025 16:04:56 +0100 Subject: [PATCH 068/166] [issues#959] Fix `api.qute` condition to include the `baseUri` to `@RegisterRestClient` (#960) --- .../main/resources/templates/libraries/microprofile/api.qute | 2 +- .../src/main/custom/templates/api.qute | 2 +- .../custom-templates/src/main/resources/templates/api.qute | 2 +- 3 files changed, 3 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 218d5a5e4..8f1a18394 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -18,7 +18,7 @@ import {imp.import}; */ {/if} @jakarta.ws.rs.Path("{#if useAnnotatedBasePath.or(false)}{contextPath}{/if}{commonPath}") -@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") +@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if defaultServerUrl.or('') != ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @io.quarkiverse.openapi.generator.annotations.GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") {#if enable-security-generation && openapi:hasAuthMethods(operations) } @org.eclipse.microprofile.rest.client.annotation.RegisterProvider({package}.auth.CompositeAuthenticationProvider.class) diff --git a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute index 6e60df751..a6557bf17 100644 --- a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute +++ b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute @@ -35,7 +35,7 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; */ {/if} @Path("{commonPath}") -@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") +@RegisterRestClient({#if defaultServerUrl.or('') != ''}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") {#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) diff --git a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute index d037a0993..b02877f0b 100644 --- a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute +++ b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute @@ -35,7 +35,7 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; */ {/if} @Path("{commonPath}") -@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") +@RegisterRestClient({#if defaultServerUrl.or('') != ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") {#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) From ffc75eb1217c20854e73df82c990da32b5c8f526 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Wed, 22 Jan 2025 11:12:40 -0500 Subject: [PATCH 069/166] Release 2.8.0 (#962) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 5c86ea2df..cf04aa5e3 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.7.1 + current-version: 2.8.0 next-version: 3.0.0-SNAPSHOT From 068fe34469d596bafad8f8f1b3cf8dcc95b31f79 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:13:20 +0000 Subject: [PATCH 070/166] Update the latest release version 2.8.0 in documentation --- .../ROOT/pages/includes/attributes.adoc | 2 +- .../includes/quarkus-openapi-generator.adoc | 63 ------------------- ...i-generator_quarkus.openapi-generator.adoc | 63 ------------------- 3 files changed, 1 insertion(+), 127 deletions(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 34aa3a091..03dcf7b68 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.7.1 +:project-version: 2.8.0 :examples-dir: ./../examples/ diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index 7581aa6be..4d539d5c4 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -971,68 +971,5 @@ endif::add-copy-button-to-env-var[] |int | -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## - -[.description] --- -Enables the authentication token propagation for this particular securityScheme. - -For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` -endif::add-copy-button-to-env-var[] --- -|boolean -|`false` - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## - -[.description] --- -Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios. - -For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` -endif::add-copy-button-to-env-var[] --- -|string -| - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params[`quarkus.openapi-generator."item-configs".auth."auth-configs"."auth-config-params"`]## - -[.description] --- -Configures a particular parameter value to be used by any of the different internal authentication filters that processes the different securityScheme definitions. - -For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user and password to be used. must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++` -endif::add-copy-button-to-env-var[] --- -|Map -| - |=== diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc index 7581aa6be..4d539d5c4 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -971,68 +971,5 @@ endif::add-copy-button-to-env-var[] |int | -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## - -[.description] --- -Enables the authentication token propagation for this particular securityScheme. - -For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` -endif::add-copy-button-to-env-var[] --- -|boolean -|`false` - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## - -[.description] --- -Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios. - -For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` -endif::add-copy-button-to-env-var[] --- -|string -| - -a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-auth-config-params[`quarkus.openapi-generator."item-configs".auth."auth-configs"."auth-config-params"`]## - -[.description] --- -Configures a particular parameter value to be used by any of the different internal authentication filters that processes the different securityScheme definitions. - -For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user and password to be used. must be used. - -quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword - - -ifdef::add-copy-button-to-env-var[] -Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++[] -endif::add-copy-button-to-env-var[] -ifndef::add-copy-button-to-env-var[] -Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS___AUTH_CONFIG_PARAMS_+++` -endif::add-copy-button-to-env-var[] --- -|Map -| - |=== From 322a4378eeac6b27f120bae61d18217ff9855b64 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:21:44 +0000 Subject: [PATCH 071/166] [maven-release-plugin] prepare release 2.8.0 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 5fb3f85ca..b9fe137aa 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..59b2722e8 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..ad9c57af0 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..b4dcf2517 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..42d2baa87 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..cba45cf73 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..22f6a2fe2 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..0cccebbb6 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..4509b381b 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..fdd61b83c 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..79693da2d 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..fdcc6904c 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..837032499 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 80d46519a..a00674c84 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..2a3a49957 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 07dad3649..5621a9f2e 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..695a1db7f 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..8aebedd37 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..fe0780839 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..85748c245 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..8d59f477c 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..81ee7d7dd 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..2fbe8b4af 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..9de55df10 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..254355c6a 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index c9e9f38dd..e0a904c71 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..a271ff912 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e164c1a39..9c1af0915 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..b12e05f3b 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..d3152058f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..07d23660e 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index ba9c35ff7..c8365975f 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..50df33013 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..135b4f5bb 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..d0575e4c8 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..6a25ce264 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..f345ff501 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 85ba7c0ad..579c6f75d 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.0 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..e88c3a638 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index e5ec29b63..283d01000 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..946bd988a 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 56a0f7165..66654e996 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 49d4c56c6..898a65259 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.0 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.8.0 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 2358b4482..74a1fa87e 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..d2593314b 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..fb0bc3586 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..4260e4288 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..5985b0ce9 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 79ce725a3..7ca67e0f3 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.0 ../pom.xml 4.0.0 From 5a851a786fcb6da5e8a03459310358d3b9eed21e Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:21:44 +0000 Subject: [PATCH 072/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index b9fe137aa..5fb3f85ca 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 59b2722e8..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index ad9c57af0..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index b4dcf2517..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 42d2baa87..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index cba45cf73..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 22f6a2fe2..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 0cccebbb6..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 4509b381b..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fdd61b83c..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 79693da2d..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index fdcc6904c..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 837032499..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index a00674c84..80d46519a 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 2a3a49957..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 5621a9f2e..07dad3649 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 695a1db7f..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 8aebedd37..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fe0780839..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 85748c245..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 8d59f477c..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 81ee7d7dd..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index 2fbe8b4af..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 9de55df10..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 254355c6a..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index e0a904c71..c9e9f38dd 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index a271ff912..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 9c1af0915..e164c1a39 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index b12e05f3b..480678d50 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index d3152058f..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 07d23660e..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index c8365975f..ba9c35ff7 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 50df33013..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 135b4f5bb..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index d0575e4c8..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 6a25ce264..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index f345ff501..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 579c6f75d..85ba7c0ad 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index e88c3a638..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 283d01000..e5ec29b63 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 946bd988a..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 66654e996..56a0f7165 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index 898a65259..49d4c56c6 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.0 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.8.0 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 74a1fa87e..2358b4482 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index d2593314b..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index fb0bc3586..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 4260e4288..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 5985b0ce9..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 7ca67e0f3..79ce725a3 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 62336709d2316d5a2d06205cd1db5ac9132d3697 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:00:30 -0300 Subject: [PATCH 073/166] Bump quarkus.version from 3.17.7 to 3.18.0 (#965) Bumps `quarkus.version` from 3.17.7 to 3.18.0. Updates `io.quarkus:quarkus-bom` from 3.17.7 to 3.18.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.7...3.18.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.17.7 to 3.18.0 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.17.7 to 3.18.0 Updates `io.quarkus:quarkus-extension-processor` from 3.17.7 to 3.18.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.17.7 to 3.18.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.17.7...3.18.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 49d4c56c6..5bbf33238 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.17.7 + 3.18.0 1.1.1.Final 3.26.3 3.27.3 From e74f9c3b54fd4a9c4126ba7109e244e160709255 Mon Sep 17 00:00:00 2001 From: Juan Piero Santisteban Quiroz Date: Thu, 23 Jan 2025 10:48:42 -0500 Subject: [PATCH 074/166] [issues#964] Fix beanValidationCore.qute condition to include the jakarta.validation.Valid annotation (#966) --- .../templates/libraries/microprofile/beanValidationCore.qute | 3 +++ .../quarkiverse/openapi/generator/it/BeanValidationTest.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationCore.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationCore.qute index ede24017c..5c7b032e6 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationCore.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationCore.qute @@ -33,4 +33,7 @@ {#if p.maximum} @jakarta.validation.constraints.DecimalMax("{p.maximum}") {/if} + {/if} + {#if use-bean-validation} + @jakarta.validation.Valid {/if} \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java b/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java index 4e5d34a43..154ee8f3b 100644 --- a/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java +++ b/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java @@ -63,6 +63,7 @@ void testValidationAnnotationsAreInPlaceModel() throws Exception { assertThat(name.getAnnotationsByType(Size.class)).hasSize(2); assertThat(name.getAnnotationsByType(Size.class)[0].min()).isEqualTo(1); assertThat(name.getAnnotationsByType(Size.class)[1].max()).isEqualTo(10); + assertThat(name.isAnnotationPresent(Valid.class)).isTrue(); assertThat(size.isAnnotationPresent(DecimalMin.class)).isTrue(); assertThat(size.getAnnotation(DecimalMin.class).value()).isEqualTo("1.0"); @@ -94,6 +95,7 @@ void testValidationAnnotationsAreSkippedModel() throws Exception { assertThat(id.isAnnotationPresent(Max.class)).isFalse(); assertThat(name.isAnnotationPresent(Pattern.class)).isFalse(); assertThat(name.isAnnotationPresent(Size.List.class)).isFalse(); + assertThat(name.isAnnotationPresent(Valid.class)).isFalse(); assertThat(size.isAnnotationPresent(DecimalMin.class)).isFalse(); assertThat(size.isAnnotationPresent(DecimalMax.class)).isFalse(); } From a036f3ef9a2dd3edb6bdcc9a7c6e24c8ea5ea7e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 07:59:42 -0300 Subject: [PATCH 075/166] Bump dawidd6/action-download-artifact from 7 to 8 (#968) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 7 to 8. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v7...v8) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index ab217045f..e0e427820 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -12,7 +12,7 @@ jobs: if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - name: Download PR Artifact - uses: dawidd6/action-download-artifact@v7 + uses: dawidd6/action-download-artifact@v8 with: workflow: ${{ github.event.workflow_run.workflow_id }} workflow_conclusion: success From ef8b310b3ceb7c47bd96026844115b82c329bae7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 08:00:14 -0300 Subject: [PATCH 076/166] Bump actions/stale from 9.0.0 to 9.1.0 (#969) Bumps [actions/stale](https://github.com/actions/stale) from 9.0.0 to 9.1.0. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v9.0.0...v9.1.0) --- updated-dependencies: - dependency-name: actions/stale dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/stale_issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale_issues.yml b/.github/workflows/stale_issues.yml index fa3422c05..e2a3ca78b 100644 --- a/.github/workflows/stale_issues.yml +++ b/.github/workflows/stale_issues.yml @@ -11,7 +11,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v9.0.0 + - uses: actions/stale@v9.1.0 with: exempt-issue-labels: "pinned" stale-issue-message: "@ricardozanini @hbelmiro This is being labeled as Stale." From a930f6d546f1ff1dca4d702a04a428073645cf8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 05:26:25 -0300 Subject: [PATCH 077/166] Bump quarkus.version from 3.18.0 to 3.18.1 (#974) Bumps `quarkus.version` from 3.18.0 to 3.18.1. Updates `io.quarkus:quarkus-bom` from 3.18.0 to 3.18.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.0...3.18.1) Updates `io.quarkus:quarkus-maven-plugin` from 3.18.0 to 3.18.1 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.18.0 to 3.18.1 Updates `io.quarkus:quarkus-extension-processor` from 3.18.0 to 3.18.1 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.18.0 to 3.18.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.0...3.18.1) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5bbf33238..9652a3fc5 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.18.0 + 3.18.1 1.1.1.Final 3.26.3 3.27.3 From fedd16148b6a0bc3e8aa40b11477c3b663ad5014 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:21:09 -0300 Subject: [PATCH 078/166] Bump org.wiremock:wiremock from 3.10.0 to 3.11.0 (#977) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.10.0 to 3.11.0. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.10.0...3.11.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9652a3fc5..3d91f2b54 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.26.3 3.27.3 4.1.1 - 3.10.0 + 3.11.0 From 2eabcb275e0955ca999a5f545ecb90d03d612078 Mon Sep 17 00:00:00 2001 From: Juan Piero Santisteban Quiroz Date: Tue, 4 Feb 2025 06:28:02 -0500 Subject: [PATCH 079/166] [issues#976] Fix `api.qute` condition to include jakarta constraint annotations to all endpoint parameters (#978) * [issues#964] Fix beanValidationCore.qute condition to include the jakarta.validation.Valid annotation * [issues#976] Fix api.qute condition to include constraint annotations to all endpoint params --- .../template/QuteTemplatingEngineAdapter.java | 1 + .../templates/libraries/microprofile/api.qute | 12 +-- .../beanValidationInlineCore.qute | 1 + .../src/main/openapi/issue-976.yaml | 80 +++++++++++++++++++ .../src/main/resources/application.properties | 1 + .../generator/it/BeanValidationTest.java | 37 +++++++++ 6 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationInlineCore.qute create mode 100644 client/integration-tests/bean-validation/src/main/openapi/issue-976.yaml diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java index 4a27a6fe8..9d3abde30 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java @@ -19,6 +19,7 @@ public class QuteTemplatingEngineAdapter extends AbstractTemplatingEngineAdapter "additionalModelTypeAnnotations.qute", "beanValidation.qute", "beanValidationCore.qute", + "beanValidationInlineCore.qute", "beanValidationHeaderParams.qute", "bodyParams.qute", "enumClass.qute", 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 8f1a18394..5948d8a68 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -135,11 +135,11 @@ public interface {classname} { @org.jboss.resteasy.annotations.providers.multipart.MultipartForm {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if} {/if} {#if use-bean-validation} - {#for p in op.pathParams}@jakarta.validation.Valid {#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} - {#for p in op.queryParams}@jakarta.validation.Valid {#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} - {#for p in op.cookieParams}@jakarta.validation.Valid {#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} - {#for p in op.headerParams}@jakarta.validation.Valid {#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam}, - {#for p in op.bodyParams}@jakarta.validation.Valid {#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{/if} + {#for p in op.pathParams}{#include beanValidationInlineCore.qute param=p/}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} + {#for p in op.queryParams}{#include beanValidationInlineCore.qute param=p/}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} + {#for p in op.cookieParams}{#include beanValidationInlineCore.qute param=p/}{#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} + {#for p in op.headerParams}{#include beanValidationInlineCore.qute param=p/}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam}, + {#for p in op.bodyParams}{#include beanValidationInlineCore.qute param=p/}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{/if} {#else} {#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} {#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} @@ -149,7 +149,7 @@ public interface {classname} { {/if} {#else} {#for p in op.allParams} - {#if use-bean-validation}@jakarta.validation.Valid {/if}{! + {#if use-bean-validation}{#include beanValidationInlineCore.qute param=p/}{/if}{! !}{#include pathParams.qute param=p/}{#include queryParams.qute param=p/}{#include bodyParams.qute param=p/}{#include headerParams.qute param=p/}{#include cookieParams.qute param=p/}{#if p_hasNext}, {/if} {/for}{/if} ); diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationInlineCore.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationInlineCore.qute new file mode 100644 index 000000000..accba8091 --- /dev/null +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/beanValidationInlineCore.qute @@ -0,0 +1 @@ +{#if p.required}@jakarta.validation.constraints.NotNull {/if}{#if p.pattern}@jakarta.validation.constraints.Pattern(regexp = "{p.pattern}") {/if}{#if p.minLength || p.minItems}@jakarta.validation.constraints.Size(min = {p.minLength}{p.minItems}) {/if}{#if p.maxLength || p.maxItems}@jakarta.validation.constraints.Size(max = {p.maxLength}{p.maxItems}) {/if}{#if p.isInteger}{#if p.minimum}@jakarta.validation.constraints.Min({p.minimum}) {/if}{#if p.maximum}@jakarta.validation.constraints.Max({p.maximum}) {/if}{/if}{#if p.isLong}{#if p.minimum}@jakarta.validation.constraints.Min({p.minimum}L) {/if}{#if p.maximum}@jakarta.validation.constraints.Max({p.maximum}L) {/if}{/if}{#if !p.isInteger && !p.isLong}{#if p.minimum}@jakarta.validation.constraints.DecimalMin("{p.minimum}") {/if}{#if p.maximum}@jakarta.validation.constraints.DecimalMax("{p.maximum}") {/if}{/if}{#if use-bean-validation}@jakarta.validation.Valid {/if} \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/main/openapi/issue-976.yaml b/client/integration-tests/bean-validation/src/main/openapi/issue-976.yaml new file mode 100644 index 000000000..4e1d21a8d --- /dev/null +++ b/client/integration-tests/bean-validation/src/main/openapi/issue-976.yaml @@ -0,0 +1,80 @@ +--- +openapi: 3.0.3 +info: + title: Test API + version: "1.0" +paths: + /{pathParam}: + post: + tags: + - ValidatedEndpointIssue976 + operationId: test + parameters: + - name: queryParam + in: query + schema: + $ref: '#/components/schemas/ValidatedObjectIssue976' + - name: pathParam + in: path + description: pathParam description + required: true + schema: + type: string + maxLength: 14 + minLength: 14 + pattern: '^[0-9]{14}$' + example: '19318085994179' + - name: headerParam + in: header + description: 'Header description' + required: false + schema: + maxLength: 32 + minLength: 32 + pattern: '^[a-z0-9]{32}$' + type: string + example: 3cfdad6e03c24d0ab7112dce75cdba35 + - name: cookieParam + in: cookie + required: true + schema: + type: string + minLength: 10 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ValidatedObjectIssue976' + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string +components: + schemas: + ValidatedObjectIssue976: + type: object + description: Some object to be validated + required: + - id + - name + - secondName + - size + properties: + id: + type: integer + minimum: 1 + maximum: 100 + name: + type: string + pattern: "[a-zA-Z]*" + minLength: 1 + maxLength: 10 + secondName: + type: string + size: + type: number + minimum: 1.0 + maximum: 10.0 \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/main/resources/application.properties b/client/integration-tests/bean-validation/src/main/resources/application.properties index 0078b6e34..06930b256 100644 --- a/client/integration-tests/bean-validation/src/main/resources/application.properties +++ b/client/integration-tests/bean-validation/src/main/resources/application.properties @@ -1,3 +1,4 @@ quarkus.openapi-generator.codegen.spec.bean_validation_true_yaml.use-bean-validation = true +quarkus.openapi-generator.codegen.spec.issue_976_yaml.use-bean-validation = true quarkus.openapi-generator.codegen.spec.bean_validation_false_yaml.use-bean-validation = false quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java b/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java index 154ee8f3b..89ff485a9 100644 --- a/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java +++ b/client/integration-tests/bean-validation/src/test/java/io/quarkiverse/openapi/generator/it/BeanValidationTest.java @@ -5,6 +5,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; import java.util.Arrays; import java.util.stream.Stream; @@ -16,12 +17,15 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.PathParam; import org.junit.jupiter.api.Test; import org.openapi.quarkus.bean_validation_false_yaml.api.UnvalidatedEndpointApi; import org.openapi.quarkus.bean_validation_false_yaml.model.UnvalidatedObject; import org.openapi.quarkus.bean_validation_true_yaml.api.ValidatedEndpointApi; import org.openapi.quarkus.bean_validation_true_yaml.model.ValidatedObject; +import org.openapi.quarkus.issue_976_yaml.api.ValidatedEndpointIssue976Api; import io.quarkus.test.junit.QuarkusTest; @@ -99,4 +103,37 @@ void testValidationAnnotationsAreSkippedModel() throws Exception { assertThat(size.isAnnotationPresent(DecimalMin.class)).isFalse(); assertThat(size.isAnnotationPresent(DecimalMax.class)).isFalse(); } + + @Test + void testValidationAnnotationsAreInPlaceApiIssue976() { + Method method = ValidatedEndpointIssue976Api.class.getMethods()[0]; + Annotation[][] annotationsPerParameter = method.getParameterAnnotations(); + + Parameter pathParam = Arrays.stream(method.getParameters()) + .filter(p -> p.getName().equals("pathParam")) + .findFirst().get(); + + Parameter headerParam = Arrays.stream(method.getParameters()) + .filter(p -> p.getName().equals("headerParam")) + .findFirst().get(); + + Boolean validationAnnotationExists = Arrays.stream(annotationsPerParameter) + .allMatch(annotations -> Arrays.stream(annotations) + .filter(a -> a.annotationType().equals(Valid.class)).toList() + .size() == 1); + + assertThat(validationAnnotationExists).isTrue(); + + assertThat(pathParam.isAnnotationPresent(Valid.class)).isTrue(); + assertThat(pathParam.isAnnotationPresent(NotNull.class)).isTrue(); + assertThat(pathParam.isAnnotationPresent(Pattern.class)).isTrue(); + assertThat(pathParam.isAnnotationPresent(Size.List.class)).isTrue(); + assertThat(pathParam.isAnnotationPresent(PathParam.class)).isTrue(); + + assertThat(headerParam.isAnnotationPresent(Valid.class)).isTrue(); + assertThat(headerParam.isAnnotationPresent(NotNull.class)).isFalse(); + assertThat(headerParam.isAnnotationPresent(Size.List.class)).isTrue(); + assertThat(headerParam.isAnnotationPresent(Pattern.class)).isTrue(); + assertThat(headerParam.isAnnotationPresent(HeaderParam.class)).isTrue(); + } } From b0b8bbcb569cbd90a4b14a8dc9b9cbd4a30d1128 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 08:30:27 -0300 Subject: [PATCH 080/166] docs: add JPSantistebanQ as a contributor for code, and test (#981) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 10 ++++++++++ README.md | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 3533f818c..930aae7b9 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -408,6 +408,16 @@ "code", "test" ] + }, + { + "login": "JPSantistebanQ", + "name": "Juan Piero Santisteban Quiroz", + "avatar_url": "https://avatars.githubusercontent.com/u/49204973?v=4", + "profile": "https://jpsantistebanq.github.io/portfolio", + "contributions": [ + "code", + "test" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 65d22e09a..cda3c0150 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-43-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-44-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -101,6 +101,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d yuhaibohotmail
yuhaibohotmail

💻 ⚠️ + Juan Piero Santisteban Quiroz
Juan Piero Santisteban Quiroz

💻 ⚠️ From c7da172107f35dc66a36a628414aa2c73a3136da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 08:52:36 -0300 Subject: [PATCH 081/166] Bump quarkus.version from 3.18.1 to 3.18.2 (#982) Bumps `quarkus.version` from 3.18.1 to 3.18.2. Updates `io.quarkus:quarkus-bom` from 3.18.1 to 3.18.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.1...3.18.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.18.1 to 3.18.2 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.18.1 to 3.18.2 Updates `io.quarkus:quarkus-extension-processor` from 3.18.1 to 3.18.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.18.1 to 3.18.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.1...3.18.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3d91f2b54..c1e3fb06f 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.18.1 + 3.18.2 1.1.1.Final 3.26.3 3.27.3 From fe95b4925bb67465ce93bb86a7810e4fd095cc4b Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Wed, 12 Feb 2025 15:28:33 +0100 Subject: [PATCH 082/166] Drop legacyConfigRoot as it is not necessary (#986) (I'm currently going through the Quarkiverse extensions using legacy config roots). --- server/runtime/pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 79ce725a3..b350a97aa 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -55,9 +55,6 @@ ${quarkus.version} - - -AlegacyConfigRoot=true - From 3b13525630b59f19cd31f33490c639bb92949120 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:53:50 -0300 Subject: [PATCH 083/166] Bump org.wiremock:wiremock from 3.11.0 to 3.12.0 (#988) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.11.0 to 3.12.0. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.11.0...3.12.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c1e3fb06f..7a1a241d3 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.26.3 3.27.3 4.1.1 - 3.11.0 + 3.12.0
From 556bab3c18d3ea6ddc59ae64f002436192677a3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:54:19 -0300 Subject: [PATCH 084/166] Bump quarkus.version from 3.18.2 to 3.18.3 (#989) Bumps `quarkus.version` from 3.18.2 to 3.18.3. Updates `io.quarkus:quarkus-bom` from 3.18.2 to 3.18.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.2...3.18.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.18.2 to 3.18.3 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.18.2 to 3.18.3 Updates `io.quarkus:quarkus-extension-processor` from 3.18.2 to 3.18.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.18.2 to 3.18.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.2...3.18.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7a1a241d3..dd3d4eca6 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.18.2 + 3.18.3 1.1.1.Final 3.26.3 3.27.3 From 43746ea34cce9722ac17470f88e4a6ec5da05115 Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti <65240126+fjtirado@users.noreply.github.com> Date: Tue, 18 Feb 2025 15:04:39 +0100 Subject: [PATCH 085/166] [Fix #991] Changing URLPatternMatcher implementation (#992) --- .../providers/UrlPatternMatcher.java | 135 ++++++------------ .../providers/UrlPatternMatcherTest.java | 18 ++- 2 files changed, 64 insertions(+), 89 deletions(-) diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcher.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcher.java index 819a85a65..a80451c25 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcher.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcher.java @@ -1,102 +1,57 @@ /* Original Copyright Headers - This file has been modified, but copied from - https://github.com/RestExpress/RestExpress/blob/master/core/src/main/java/org/restexpress/url/UrlPattern.java + This file include a substantially simplified version of + https://github.com/wilkincheung/URI-Template-Pattern-Matcher/blob/master/src/main/java/com/prodigi/service/UriTemplateValidator.java */ /** - * Copyright 2010, Strategic Gains, Inc. - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.quarkiverse.openapi.generator.providers; +The MIT License (MIT) +Copyright (c) 2015 Wilkin Cheung -import java.util.regex.Pattern; +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -/** - * PathPatternMatcher leverages Regex Pattern to represent a parameterized URL. Parameters within the URL are - * denoted by curly braces '{}' with the parameter name contained within (e.g. '{userid}'). - *

- *

- * Parameter names must be formed of word characters (e.g. A-Z, a-z, 0-9, '_'). - *

- * An optional format parameter following a dot ('.') may be added to the end. While it could be named any valid parameter name, - * RestExpress offers special handling (e.g. within the Request, etc.) if it's named 'format'. - *

- * Note that the format specifier allows only word characters and percent-encoded characters. - *

- *

- * URL Pattern examples: - *

    - *
  • /api/search.{format}
  • - *
  • /api/search/users/{userid}.{format}
  • - *
  • /api/{version}/search/users/{userid}
  • - *
- *

- * RestExpress parses URI paths which is described in the URI Generic Syntax IETF RFC 3986 specification, - * section 3.3 (http://tools.ietf.org/html/rfc3986#section-3.3). RestExpress parses paths into segments - * separated by slashes ("/"), the segments of which are composed of unreserved, percent encoded, - * sub-delimiters, colon (":") or ampersand ("@"), each of which are defined below (from the spec): - *

- * pct-encoded = "%" HEXDIG HEXDIG - *

- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- * reserved = gen-delims / sub-delims
- * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" * - *

- * In other words, RestExpress accepts path segments containing: [A-Z] [a-z] [0-9] % - . _ ~ ! $ & ' ( ) * + , ; = : @ - *

- * RestExpress also accepts square brackets ('[' and ']'), but this is deprecated and not recommended. - * - * @author toddf - * @see http://www.ietf.org/rfc/rfc3986.txt - * @since Apr 28, 2010 - */ -public class UrlPatternMatcher { - // Finds parameters in the URL pattern string. - private static final String URL_PARAM_REGEX = "\\{(\\S*?)\\}"; +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - // Replaces parameter names in the URL pattern string to match parameters in URLs. - private static final String URL_PARAM_MATCH_REGEX = "\\([%\\\\w-.\\\\~!\\$&'\\\\(\\\\)\\\\*\\\\+,;=:\\\\[\\\\]@]+?\\)"; +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +package io.quarkiverse.openapi.generator.providers; - // Finds the 'format' portion of the URL pattern string. - private static final String URL_FORMAT_REGEX = "(?:\\.\\{format\\})$"; +import java.util.regex.Matcher; +import java.util.regex.Pattern; - // Replaces the format parameter name in the URL pattern string to match the format specifier in URLs. Appended to the end of the regex string - // when a URL pattern contains a format parameter. - private static final String URL_FORMAT_MATCH_REGEX = "(?:\\\\.\\([\\\\w%]+?\\))?"; +public class UrlPatternMatcher { - // Finds the query string portion within a URL. Appended to the end of the built-up regex string. + // For each pattern {keyName} replaces it with (.*) + private static final Pattern LEVEL_ONE_PATTERN = Pattern.compile("\\{([^/]+?)\\}"); + // Replaces each {keyName} with (.*) + private static final String REPLACES_WITH = "(.*)"; private static final String URL_QUERY_STRING_REGEX = "(?:\\?.*?)?$"; - /** - * The URL pattern describing the URL layout and any parameters. - */ - private final String urlPattern; - - /** - * A compiled regex created from the urlPattern, above. - */ - private Pattern compiledUrl; + private final Pattern pattern; - /** - * @param pattern - */ - public UrlPatternMatcher(String pattern) { - this.urlPattern = pattern; - String parsedPattern = this.urlPattern.replaceFirst(URL_FORMAT_REGEX, URL_FORMAT_MATCH_REGEX); - parsedPattern = parsedPattern.replaceAll(URL_PARAM_REGEX, URL_PARAM_MATCH_REGEX); - this.compiledUrl = Pattern.compile(parsedPattern + URL_QUERY_STRING_REGEX); + public UrlPatternMatcher(String uriTemplate) { + StringBuilder patternBuilder = new StringBuilder(); + Matcher m = LEVEL_ONE_PATTERN.matcher(uriTemplate); + int end = 0; + while (m.find()) { + // In each loop, find next pattern in URI that is "{keyName}" + // If found,append the substring to patternBuilder. + patternBuilder.append(Pattern.quote(uriTemplate.substring(end, m.start()))).append(REPLACES_WITH); + end = m.end(); + } + patternBuilder.append(Pattern.quote(uriTemplate.substring(end, uriTemplate.length()))); + this.pattern = Pattern.compile(patternBuilder + URL_QUERY_STRING_REGEX); } /** @@ -107,6 +62,10 @@ public UrlPatternMatcher(String pattern) { * @return true if the given URL matches the underlying pattern. Otherwise false. */ public boolean matches(String url) { - return compiledUrl.matcher(url).matches(); + return pattern.matcher(url).matches(); + } + + public String toString() { + return pattern.toString(); } -} \ No newline at end of file +} diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcherTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcherTest.java index 9610f7bfd..4c7a7d9f8 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcherTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/UrlPatternMatcherTest.java @@ -16,6 +16,13 @@ void verifyPathsMatch(final String pathPattern, final String requestPath) { Assertions.assertTrue(pattern.matches(requestPath)); } + @ParameterizedTest + @MethodSource("providePathsThatNotMatch") + void verifyPathsNotMatch(final String pathPattern, final String requestPath) { + UrlPatternMatcher pattern = new UrlPatternMatcher(pathPattern); + Assertions.assertFalse(pattern.matches(requestPath)); + } + private static Stream providePathsThatMatch() { return Stream.of( Arguments.of("/pets/{id}", "/pets/1"), @@ -32,7 +39,16 @@ private static Stream providePathsThatMatch() { Arguments.of("/{id}/{foo}/{id2}", "/1/2/3?q=1&q2=2"), Arguments.of("/{id}/{foo}/{id2}", "/1/2/3"), Arguments.of("/v2/pets/{id}", "/v2/pets/1"), - Arguments.of("/pets/{pet-id}/types/{type-id}", "/pets/1/types/2")); + Arguments.of("/pets/{pet-id}/types/{type-id}", "/pets/1/types/2"), + Arguments.of("/repos/{ref}", "/repos/prefixed/cool.sw"), + Arguments.of("/repos/{ref}/pepe", "/repos/prefixed/cool.sw/pepe"), + Arguments.of("pepe/pepa/pepu", "pepe/pepa/pepu")); + } + + private static Stream providePathsThatNotMatch() { + return Stream.of( + Arguments.of("/pets/{id}", "/pes/1"), + Arguments.of("/{id}/pepe", "/1/2/pep")); } } \ No newline at end of file From a44d76cde20d444bdfd9662ec40cda40e6aadb35 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:02:23 -0500 Subject: [PATCH 086/166] release 2.8.1 (#1000) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index cf04aa5e3..679347483 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.8.0 + current-version: 2.8.1 next-version: 3.0.0-SNAPSHOT From 27af8d43ab02565e9b1edc73c735bc102c17eeff Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:03:03 +0000 Subject: [PATCH 087/166] Update the latest release version 2.8.1 in documentation --- .../ROOT/pages/includes/attributes.adoc | 2 +- .../includes/quarkus-openapi-generator.adoc | 224 ++++++++++++++++++ ...i-generator_quarkus.openapi-generator.adoc | 224 ++++++++++++++++++ 3 files changed, 449 insertions(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 03dcf7b68..924c31fe1 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.8.0 +:project-version: 2.8.1 :examples-dir: ./../examples/ diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index 4d539d5c4..4e1262425 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -8,6 +8,10 @@ h|Type h|Default a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model[`quarkus.openapi-generator.codegen.skip-form-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.skip-form-model+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -25,6 +29,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.type-mappings."type-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.type-mappings."type-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -42,6 +50,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -59,6 +71,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -76,6 +92,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations[`quarkus.openapi-generator.codegen.additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -93,6 +113,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -110,6 +134,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations[`quarkus.openapi-generator.codegen.additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -127,6 +155,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args[`quarkus.openapi-generator.codegen.additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-request-args+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -144,6 +176,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response[`quarkus.openapi-generator.codegen.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -161,6 +197,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation[`quarkus.openapi-generator.codegen.enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -178,6 +218,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -195,6 +239,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny[`quarkus.openapi-generator.codegen.mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -212,6 +260,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response[`quarkus.openapi-generator.codegen.mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -229,6 +281,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -252,6 +308,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename[`quarkus.openapi-generator.codegen.generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -269,6 +329,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value[`quarkus.openapi-generator.codegen.part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.part-filename-value+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -286,6 +350,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -303,6 +371,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation[`quarkus.openapi-generator.codegen.use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -320,6 +392,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis[`quarkus.openapi-generator.codegen.generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-apis+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -337,6 +413,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models[`quarkus.openapi-generator.codegen.generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-models+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -354,6 +434,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode[`quarkus.openapi-generator.codegen.equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -371,6 +455,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -388,6 +476,10 @@ endif::add-copy-button-to-env-var[] |`false` a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir[`quarkus.openapi-generator.codegen.input-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.input-base-dir+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -405,6 +497,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir[`quarkus.openapi-generator.codegen.template-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.template-base-dir+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -422,6 +518,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec[`quarkus.openapi-generator.codegen.validateSpec`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.validateSpec+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -439,6 +539,10 @@ endif::add-copy-button-to-env-var[] |`true` a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-include]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-include[`quarkus.openapi-generator.codegen.include`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.include+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -456,6 +560,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude[`quarkus.openapi-generator.codegen.exclude`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.exclude+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -473,6 +581,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme[`quarkus.openapi-generator.codegen.default-security-scheme`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.default-security-scheme+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -490,6 +602,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model[`quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -507,6 +623,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -524,6 +644,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -541,6 +665,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -558,6 +686,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -575,6 +707,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -592,6 +728,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -609,6 +749,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args[`quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -626,6 +770,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -643,6 +791,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation[`quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -660,6 +812,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -677,6 +833,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -694,6 +854,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -711,6 +875,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -734,6 +902,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -751,6 +923,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value[`quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -768,6 +944,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -785,6 +965,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation[`quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -802,6 +986,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis[`quarkus.openapi-generator.codegen.spec."spec-item".generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-apis+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -819,6 +1007,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models[`quarkus.openapi-generator.codegen.spec."spec-item".generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-models+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -836,6 +1028,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode[`quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -853,6 +1049,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -870,6 +1070,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -887,6 +1091,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -904,6 +1112,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -921,6 +1133,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -938,6 +1154,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -955,6 +1175,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count+++[] +endif::add-copy-button-to-config-props[] + [.description] -- diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc index 4d539d5c4..4e1262425 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -8,6 +8,10 @@ h|Type h|Default a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-skip-form-model[`quarkus.openapi-generator.codegen.skip-form-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.skip-form-model+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -25,6 +29,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.type-mappings."type-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.type-mappings."type-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -42,6 +50,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -59,6 +71,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -76,6 +92,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-model-type-annotations[`quarkus.openapi-generator.codegen.additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -93,6 +113,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -110,6 +134,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-api-type-annotations[`quarkus.openapi-generator.codegen.additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -127,6 +155,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-request-args[`quarkus.openapi-generator.codegen.additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-request-args+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -144,6 +176,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-return-response[`quarkus.openapi-generator.codegen.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -161,6 +197,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-enable-security-generation[`quarkus.openapi-generator.codegen.enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -178,6 +218,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -195,6 +239,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny[`quarkus.openapi-generator.codegen.mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -212,6 +260,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-return-response[`quarkus.openapi-generator.codegen.mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -229,6 +281,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -252,6 +308,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-part-filename[`quarkus.openapi-generator.codegen.generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -269,6 +329,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-part-filename-value[`quarkus.openapi-generator.codegen.part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.part-filename-value+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -286,6 +350,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -303,6 +371,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-use-bean-validation[`quarkus.openapi-generator.codegen.use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -320,6 +392,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-apis[`quarkus.openapi-generator.codegen.generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-apis+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -337,6 +413,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-generate-models[`quarkus.openapi-generator.codegen.generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.generate-models+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -354,6 +434,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-equals-hashcode[`quarkus.openapi-generator.codegen.equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -371,6 +455,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -388,6 +476,10 @@ endif::add-copy-button-to-env-var[] |`false` a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-input-base-dir[`quarkus.openapi-generator.codegen.input-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.input-base-dir+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -405,6 +497,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-template-base-dir[`quarkus.openapi-generator.codegen.template-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.template-base-dir+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -422,6 +518,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-validatespec[`quarkus.openapi-generator.codegen.validateSpec`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.validateSpec+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -439,6 +539,10 @@ endif::add-copy-button-to-env-var[] |`true` a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-include]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-include[`quarkus.openapi-generator.codegen.include`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.include+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -456,6 +560,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-exclude[`quarkus.openapi-generator.codegen.exclude`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.exclude+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -473,6 +581,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-default-security-scheme[`quarkus.openapi-generator.codegen.default-security-scheme`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.default-security-scheme+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -490,6 +602,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-skip-form-model[`quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".skip-form-model+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -507,6 +623,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-type-mappings-type-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".type-mappings."type-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -524,6 +644,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-import-mappings-import-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -541,6 +665,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-schema-mappings-schema-mappings[`quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -558,6 +686,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-model-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -575,6 +707,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-enum-type-unexpected-member[`quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -592,6 +728,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-api-type-annotations[`quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -609,6 +749,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-request-args[`quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-request-args+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -626,6 +770,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -643,6 +791,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-enable-security-generation[`quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -660,6 +812,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-open-api-normalizer-normalizer[`quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -677,6 +833,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -694,6 +854,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-return-response[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -711,6 +875,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -734,6 +902,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -751,6 +923,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-part-filename-value[`quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".part-filename-value+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -768,6 +944,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-field-name-in-part-filename[`quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -785,6 +965,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-bean-validation[`quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -802,6 +986,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-apis[`quarkus.openapi-generator.codegen.spec."spec-item".generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-apis+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -819,6 +1007,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-generate-models[`quarkus.openapi-generator.codegen.spec."spec-item".generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".generate-models+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -836,6 +1028,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-equals-hashcode[`quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -853,6 +1049,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -870,6 +1070,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -887,6 +1091,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".model-name-suffix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -904,6 +1112,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-model-name-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".model-name-prefix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -921,6 +1133,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -938,6 +1154,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-delimiter[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-delimiter+++[] +endif::add-copy-button-to-config-props[] + [.description] -- @@ -955,6 +1175,10 @@ endif::add-copy-button-to-env-var[] | a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-remove-operation-id-prefix-count[`quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".remove-operation-id-prefix-count+++[] +endif::add-copy-button-to-config-props[] + [.description] -- From 6298a24f7ece66416da2d1e5f61a912d4186ad92 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:11:06 +0000 Subject: [PATCH 088/166] [maven-release-plugin] prepare release 2.8.1 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 5fb3f85ca..a1efa6966 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..535ad7628 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..223653ee8 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..a8f165a8a 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..b4c06d4b8 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..cbf165726 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..55c9666ea 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..1bf63c58c 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..5b7e235bd 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..9b35a3183 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..07a64a9ef 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..8e46ab03b 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..92501655f 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 80d46519a..d0d19acb3 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..9541bd043 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 07dad3649..6865f10df 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..c2a43094b 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..a39374a48 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..41ef3b2a1 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..2a7ee7633 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..3248184ed 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..6d254f528 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..987a0b83b 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..25b53ec72 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..fedf31a28 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index c9e9f38dd..cf4d2d7f4 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..fd6be08e4 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e164c1a39..0c3851821 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..d0c734a12 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..87f54a2d5 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..caa8f66da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index ba9c35ff7..ecdcf6f55 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..966fee59d 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..e737ab959 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..b9fd2cd4d 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..22b3c523b 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..344bee38f 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 85ba7c0ad..628ce05ee 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.1 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..7195f439b 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index e5ec29b63..c019f8d69 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..beb532d85 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 56a0f7165..43f0b0fe6 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index dd3d4eca6..d437224c7 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.1 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.8.1 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 2358b4482..e8d9d1b9f 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..ce3914b35 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..8e055e887 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..84e0f3cd9 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..4a7baaba2 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index b350a97aa..f4fd6d1bd 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.1 ../pom.xml 4.0.0 From bc4d85a693b8f9c4b85a953dba848895fe4c620d Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:11:06 +0000 Subject: [PATCH 089/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index a1efa6966..5fb3f85ca 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 535ad7628..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 223653ee8..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index a8f165a8a..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index b4c06d4b8..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index cbf165726..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 55c9666ea..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 1bf63c58c..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 5b7e235bd..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 9b35a3183..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 07a64a9ef..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 8e46ab03b..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 92501655f..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index d0d19acb3..80d46519a 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 9541bd043..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 6865f10df..07dad3649 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index c2a43094b..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index a39374a48..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 41ef3b2a1..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 2a7ee7633..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 3248184ed..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 6d254f528..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index 987a0b83b..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 25b53ec72..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index fedf31a28..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index cf4d2d7f4..c9e9f38dd 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index fd6be08e4..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 0c3851821..e164c1a39 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index d0c734a12..480678d50 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 87f54a2d5..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index caa8f66da..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index ecdcf6f55..ba9c35ff7 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 966fee59d..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index e737ab959..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index b9fd2cd4d..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 22b3c523b..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 344bee38f..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 628ce05ee..85ba7c0ad 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.1 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 7195f439b..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index c019f8d69..e5ec29b63 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index beb532d85..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 43f0b0fe6..56a0f7165 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index d437224c7..dd3d4eca6 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.1 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.8.1 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index e8d9d1b9f..2358b4482 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index ce3914b35..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index 8e055e887..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 84e0f3cd9..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 4a7baaba2..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index f4fd6d1bd..b350a97aa 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.1 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 80a4766ad13ea4b93d9db7c01e1517046457948b Mon Sep 17 00:00:00 2001 From: Jochen Schalanda Date: Wed, 19 Feb 2025 18:52:22 +0100 Subject: [PATCH 090/166] Bug [Bean Validation]: Compilation error with array of strings with validations (#926) * bug: bean validation missing import with array and mandatory items * fix: add Jakarta Bean validation imports to model.qute --- .../resources/templates/libraries/microprofile/model.qute | 1 + .../src/main/openapi/bean-validation-true.yaml | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute index 437740b5a..ab9917758 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute @@ -2,6 +2,7 @@ package {package}; {#if use-bean-validation} {! https://github.com/OpenAPITools/openapi-generator/issues/18974 !} +import jakarta.validation.constraints.*; import jakarta.validation.Valid; {/if} diff --git a/client/integration-tests/bean-validation/src/main/openapi/bean-validation-true.yaml b/client/integration-tests/bean-validation/src/main/openapi/bean-validation-true.yaml index 68041e319..6da47a50c 100644 --- a/client/integration-tests/bean-validation/src/main/openapi/bean-validation-true.yaml +++ b/client/integration-tests/bean-validation/src/main/openapi/bean-validation-true.yaml @@ -64,4 +64,9 @@ components: size: type: number minimum: 1.0 - maximum: 10.0 \ No newline at end of file + maximum: 10.0 + list: + type: array + items: + type: string + minLength: 1 From e532a812fd6ace7f84ea002b05229251fab2f8f9 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 19 Feb 2025 12:54:11 -0500 Subject: [PATCH 091/166] docs: add joschi as a contributor for code (#1003) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 930aae7b9..57efbb079 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -418,6 +418,15 @@ "code", "test" ] + }, + { + "login": "joschi", + "name": "Jochen Schalanda", + "avatar_url": "https://avatars.githubusercontent.com/u/43951?v=4", + "profile": "https://github.com/joschi", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index cda3c0150..626b591c6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-44-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-45-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -102,6 +102,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d yuhaibohotmail
yuhaibohotmail

💻 ⚠️ Juan Piero Santisteban Quiroz
Juan Piero Santisteban Quiroz

💻 ⚠️ + Jochen Schalanda
Jochen Schalanda

💻 From 900d9f960fea785351f0e93b1f537ce5decc08ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 09:31:07 -0300 Subject: [PATCH 092/166] Bump quarkus.version from 3.18.3 to 3.19.0 (#1005) Bumps `quarkus.version` from 3.18.3 to 3.19.0. Updates `io.quarkus:quarkus-bom` from 3.18.3 to 3.19.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.3...3.19.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.18.3 to 3.19.0 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.18.3 to 3.19.0 Updates `io.quarkus:quarkus-extension-processor` from 3.18.3 to 3.19.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.18.3 to 3.19.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.18.3...3.19.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dd3d4eca6..43b285624 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.18.3 + 3.19.0 1.1.1.Final 3.26.3 3.27.3 From 355d5d13a2d76b6154e0243d724de0b70fac1295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Fabr=C3=ADcio=20De=20Llamas?= <80655200+dellamas@users.noreply.github.com> Date: Mon, 24 Feb 2025 14:39:27 -0300 Subject: [PATCH 093/166] Fix security link. (#1007) * Fix security link. * Update docs/modules/ROOT/pages/includes/authentication-support.adoc Co-authored-by: Helber Belmiro --------- Co-authored-by: Helber Belmiro --- docs/modules/ROOT/pages/includes/authentication-support.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/authentication-support.adoc b/docs/modules/ROOT/pages/includes/authentication-support.adoc index 4fa038e08..be9d0c519 100644 --- a/docs/modules/ROOT/pages/includes/authentication-support.adoc +++ b/docs/modules/ROOT/pages/includes/authentication-support.adoc @@ -44,7 +44,7 @@ If the OpenAPI specification file has `securitySchemes` definitions, but no http |`quarkus.openapi-generator.codegen.default-security-scheme=api_key` |=== -See the module https://github.com/quarkiverse/quarkus-openapi-generator/tree/main/integration-tests/security[security] for an example of how to use this feature. +See the module https://github.com/quarkiverse/quarkus-openapi-generator/tree/main/client/integration-tests/security[security] for an example of how to use this feature. == Basic HTTP Authentication From 6a9e8a150caca7f3b28d696b99ee290c2f721c28 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 14:41:04 -0300 Subject: [PATCH 094/166] docs: add dellamas as a contributor for doc (#1010) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 57efbb079..fb43d2e72 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -427,6 +427,15 @@ "contributions": [ "code" ] + }, + { + "login": "dellamas", + "name": "Luis Fabrício De Llamas", + "avatar_url": "https://avatars.githubusercontent.com/u/80655200?v=4", + "profile": "https://dev.to/dellamas", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 626b591c6..dfd0f68ac 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-45-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -103,6 +103,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d yuhaibohotmail
yuhaibohotmail

💻 ⚠️ Juan Piero Santisteban Quiroz
Juan Piero Santisteban Quiroz

💻 ⚠️ Jochen Schalanda
Jochen Schalanda

💻 + Luis Fabrício De Llamas
Luis Fabrício De Llamas

📖 From bb1f4fb8011a6435dd5fbaa380f586e57fa60414 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 10:54:44 -0300 Subject: [PATCH 095/166] Bump org.slf4j:slf4j-ext from 2.0.16 to 2.0.17 (#1012) Bumps org.slf4j:slf4j-ext from 2.0.16 to 2.0.17. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-ext dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 5fb3f85ca..6e3546ef5 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -12,7 +12,7 @@ 7.11.0 - 2.0.16 + 2.0.17 4.3.1 2.1.25 From bb4327886cb9c7663f967afe7749766634d2ff58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 08:28:44 -0300 Subject: [PATCH 096/166] Bump quarkus.version from 3.19.0 to 3.19.1 (#1014) Bumps `quarkus.version` from 3.19.0 to 3.19.1. Updates `io.quarkus:quarkus-bom` from 3.19.0 to 3.19.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.0...3.19.1) Updates `io.quarkus:quarkus-maven-plugin` from 3.19.0 to 3.19.1 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.19.0 to 3.19.1 Updates `io.quarkus:quarkus-extension-processor` from 3.19.0 to 3.19.1 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.19.0 to 3.19.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.0...3.19.1) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 43b285624..b9442635b 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.19.0 + 3.19.1 1.1.1.Final 3.26.3 3.27.3 From 47528aa9e399ebdd362727fdbe1385e62032a4f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 08:47:41 -0300 Subject: [PATCH 097/166] Bump org.openapitools:openapi-generator from 7.11.0 to 7.12.0 (#1016) Bumps [org.openapitools:openapi-generator](https://github.com/openapitools/openapi-generator) from 7.11.0 to 7.12.0. - [Release notes](https://github.com/openapitools/openapi-generator/releases) - [Changelog](https://github.com/OpenAPITools/openapi-generator/blob/master/docs/3.0.0-release-note.md) - [Commits](https://github.com/openapitools/openapi-generator/compare/v7.11.0...v7.12.0) --- updated-dependencies: - dependency-name: org.openapitools:openapi-generator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 6e3546ef5..ca083dd63 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -11,7 +11,7 @@ Quarkus - Openapi Generator - Client - Deployment - 7.11.0 + 7.12.0 2.0.17 4.3.1 2.1.25 From b62d2966bec36281d1d79d4834c38b43ad5946d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 08:48:34 -0300 Subject: [PATCH 098/166] Bump dawidd6/action-download-artifact from 8 to 9 (#1018) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 8 to 9. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v8...v9) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index e0e427820..c6c6ae8c0 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -12,7 +12,7 @@ jobs: if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - name: Download PR Artifact - uses: dawidd6/action-download-artifact@v8 + uses: dawidd6/action-download-artifact@v9 with: workflow: ${{ github.event.workflow_run.workflow_id }} workflow_conclusion: success From 8fc80939cac14aad90df4512786647fea0ea8d41 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini Date: Mon, 3 Mar 2025 18:52:47 -0500 Subject: [PATCH 099/166] Fix #1022 - Discriminator should only add Jackson JsonSubTypes when there's a parent class Signed-off-by: Ricardo Zanini --- .../libraries/microprofile/pojo.qute | 2 +- .../OpenApiClientGeneratorWrapperTest.java | 31 ++++- .../test/resources/openapi/issue-1022.json | 118 ++++++++++++++++++ ...napi-generator-server_quarkus.openapi.adoc | 13 ++ 4 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 client/deployment/src/test/resources/openapi/issue-1022.json create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index 8a0c4ec3a..4110882bc 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; **/ {/if} {#include additionalModelTypeAnnotations.qute m=m/} -{#if m.discriminator && m.discriminator.mappedModels && !m.discriminator.mappedModels.empty} +{#if m.discriminator && m.discriminator.mappedModels && !m.discriminator.mappedModels.empty && m.children} @com.fasterxml.jackson.annotation.JsonIgnoreProperties( value = "{m.discriminator.propertyBaseName}", // ignore manually set {m.discriminator.propertyBaseName}, it will be automatically generated by Jackson during serialization allowSetters = true // allows the {m.discriminator.propertyBaseName} to be set during deserialization 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 9702518cd..f354135bd 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 @@ -84,8 +84,13 @@ void verifyOAuthDuplicateAnnotationOnCompositeAuthProvider() throws URISyntaxExc assertThat(oauthAnnotationsCount).isEqualTo(1); } + /** + * If the specification component has `oneOf` specified instead of `allOf`, the inner generator won't create a hierarchy of + * classes. + * In this situation, we can't generate the `JsonSubTypes` annotations. + */ @Test - void verifyDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { + void verifyOneOfDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-852.json"); final List generatedFiles = generatorWrapper.generate("org.issue852"); @@ -96,6 +101,30 @@ void verifyDiscriminatorGeneration() throws java.net.URISyntaxException, FileNot .filter(f -> f.getName().endsWith("PostRevisionForDocumentRequest.java")).findFirst(); assertThat(classWithDiscriminator).isPresent(); + final CompilationUnit compilationUnit = StaticJavaParser.parse(classWithDiscriminator.orElseThrow()); + assertThat(compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) + .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))) + .isNotPresent(); + } + + /** + * Only generates `JsonSubTypes` annotations in case the class has children, otherwise skip since Jackson will complain in + * runtime. + * The file issue-1022.json is a classic example of a spec with allOf to denote how the Java POJO should be and how Jackson + * would serialize. + */ + @Test + void verifyAllOfDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { + OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-1022.json"); + final List generatedFiles = generatorWrapper.generate("org.issue1022"); + + assertNotNull(generatedFiles); + assertFalse(generatedFiles.isEmpty()); + + final Optional classWithDiscriminator = generatedFiles.stream() + .filter(f -> f.getName().startsWith("Thing.java")).findFirst(); + assertThat(classWithDiscriminator).isPresent(); + final CompilationUnit compilationUnit = StaticJavaParser.parse(classWithDiscriminator.orElseThrow()); assertThat(compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))) diff --git a/client/deployment/src/test/resources/openapi/issue-1022.json b/client/deployment/src/test/resources/openapi/issue-1022.json new file mode 100644 index 000000000..3d7c6e957 --- /dev/null +++ b/client/deployment/src/test/resources/openapi/issue-1022.json @@ -0,0 +1,118 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "tuto API", + "version": "1.0.0-SNAPSHOT" + }, + "servers": [ + { + "url": "http://localhost:8080", + "description": "Auto generated value" + }, + { + "url": "http://0.0.0.0:8080", + "description": "Auto generated value" + } + ], + "paths": { + "/": { + "get": { + "tags": [ + "Default" + ], + "operationId": "get", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Data" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Data": { + "required": [ + "things" + ], + "type": "object", + "properties": { + "things": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Thing" + }, + "anyOf": [ + { + "$ref": "#/components/schemas/SomeThing" + }, + { + "$ref": "#/components/schemas/OtherThing" + } + ] + } + } + }, + "OtherThing": { + "description": "Other thing", + "required": [ + "other" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Thing" + } + ], + "properties": { + "other": { + "type": "string" + } + } + }, + "SomeThing": { + "description": "Some thing", + "required": [ + "some" + ], + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Thing" + } + ], + "properties": { + "some": { + "type": "string" + } + } + }, + "Thing": { + "description": "Thing", + "required": [ + "thing" + ], + "type": "object", + "properties": { + "thing": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "@type", + "mapping": { + "SomeThing": "#/components/schemas/SomeThing", + "OtherThing": "#/components/schemas/OtherThing" + } + } + } + } + } +} diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc new file mode 100644 index 000000000..8410f0a8c --- /dev/null +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc @@ -0,0 +1,13 @@ +[.configuration-legend] +icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime +[.configuration-reference.searchable, cols="80,.^10,.^10"] +|=== + +h|[.header-title]##Configuration property## +h|Type +h|Default + +3+|No configuration properties found. + +|=== + From f2839ece0d753897a48e0484bde007d8488d6cc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 09:56:00 -0300 Subject: [PATCH 100/166] Bump org.wiremock:wiremock from 3.12.0 to 3.12.1 (#1024) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.12.0 to 3.12.1. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.12.0...3.12.1) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b9442635b..ba4c0c642 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.26.3 3.27.3 4.1.1 - 3.12.0 + 3.12.1 From 3a11b3f2ad6ff6b904f90408899b891ca6f67cda Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Tue, 4 Mar 2025 14:25:45 -0500 Subject: [PATCH 101/166] release 2.8.2 (#1027) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 679347483..892324b19 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.8.1 + current-version: 2.8.2 next-version: 3.0.0-SNAPSHOT From b5794efb40f565d409e4dfa3aad31571d97954f0 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 19:26:39 +0000 Subject: [PATCH 102/166] Update the latest release version 2.8.2 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 924c31fe1..519b97c66 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.8.1 +:project-version: 2.8.2 :examples-dir: ./../examples/ From f4ca67234f3ab156bbaed073e6b6a5b07042441c Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 19:34:28 +0000 Subject: [PATCH 103/166] [maven-release-plugin] prepare release 2.8.2 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index ca083dd63..234890b65 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..6b7f74b6d 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..cd849b4dc 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..b0e056f30 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..4a77fd919 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..264e64150 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..17e20d2b5 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..472c93c5f 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..1acd86a9c 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..e549d0679 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..b037ebd6d 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..2f4eac002 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..aa9b4340a 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 80d46519a..6d07371b5 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..967836b20 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 07dad3649..74177e0fe 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..f41d77711 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..faab48b9e 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..ad282f511 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..6a8a65bc0 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..4b6de222f 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..ff867b031 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..92f2c2705 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..8d75fd1b2 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..55e0cf4fe 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index c9e9f38dd..dbc0ecb20 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..1ee7b4510 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e164c1a39..c95ca00bc 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..348d04d77 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..e8938f705 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..a31c827b9 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index ba9c35ff7..0285904be 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..81302cbc2 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..6ab6f2718 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..29cca3414 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..13bf80636 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..8504a2a4c 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 85ba7c0ad..0677a74af 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.2 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..b62d81567 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index e5ec29b63..6cad5b016 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..f76d581e6 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 56a0f7165..48798153d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index ba4c0c642..a92b39110 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.8.2 pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.8.2 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 2358b4482..b522e651a 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..f13e2f791 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..5bcdd82a4 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..1a24b1afe 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..ab05f99cb 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index b350a97aa..207712fdc 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.8.2 ../pom.xml 4.0.0 From 7dd5be79c3589eb5844fada8b3a2ee55f2ada59c Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 19:34:28 +0000 Subject: [PATCH 104/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 49 files changed, 50 insertions(+), 50 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 234890b65..ca083dd63 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 6b7f74b6d..5ab4a4c42 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index cd849b4dc..5e42973a5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index b0e056f30..1663c3140 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 4a77fd919..0fdc3388c 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 264e64150..2d003df7a 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 17e20d2b5..dd5307f9d 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - Openapi Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 472c93c5f..194046520 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 1acd86a9c..3c4c46104 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index e549d0679..fa51e768e 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index b037ebd6d..1fb5edcb1 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 2f4eac002..59f3c2769 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index aa9b4340a..fdfb0b59b 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 6d07371b5..80d46519a 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 967836b20..a105cb359 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 74177e0fe..07dad3649 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index f41d77711..05fa23821 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - Openapi Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index faab48b9e..38a025766 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index ad282f511..fd731b3ec 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 6a8a65bc0..1407cc93d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 4b6de222f..c44cd400a 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index ff867b031..fcc4660d8 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index 92f2c2705..a6e4450d4 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 8d75fd1b2..90387486d 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 55e0cf4fe..aedbe92eb 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index dbc0ecb20..c9e9f38dd 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 1ee7b4510..668240bb5 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index c95ca00bc..e164c1a39 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 348d04d77..480678d50 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index e8938f705..3a86a104f 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index a31c827b9..6d0ca52da 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 0285904be..ba9c35ff7 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 81302cbc2..af06edbec 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 6ab6f2718..0e4d4e8a9 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 29cca3414..a7130832b 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 13bf80636..7fd3339a7 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 8504a2a4c..92911e96e 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 0677a74af..85ba7c0ad 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.2 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index b62d81567..dded3c51d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 6cad5b016..e5ec29b63 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index f76d581e6..b9f2adf7e 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 48798153d..56a0f7165 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/pom.xml b/pom.xml index a92b39110..ba4c0c642 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.8.2 + 3.0.0-SNAPSHOT pom Quarkus - Openapi Generator - Parent @@ -19,7 +19,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.8.2 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index b522e651a..2358b4482 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index f13e2f791..985bb0a7d 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index 5bcdd82a4..efe96d116 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 1a24b1afe..f89a2d395 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index ab05f99cb..1900c318f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 207712fdc..b350a97aa 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.8.2 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 3bf400e2168a2533496122c107163449c215cf27 Mon Sep 17 00:00:00 2001 From: Melloware Date: Wed, 5 Mar 2025 15:28:03 -0500 Subject: [PATCH 105/166] Fix #1029: POJO ignore deprecated in hashcode/equals (#1030) --- .../main/resources/templates/libraries/microprofile/pojo.qute | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index 4110882bc..bcdfa1b68 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -158,6 +158,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl return java.util.Objects.equals({m.vars.0.name}, model.{m.vars.0.name}); {#else} {#for v in m.vars} + {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} {#if v_isFirst} return java.util.Objects.equals({v.name}, model.{v.name}) && {#else if v_isLast} @@ -165,6 +166,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {#else} java.util.Objects.equals({v.name}, model.{v.name}) && {/if} + {/if} {/for} {/if} } @@ -180,6 +182,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl return java.util.Objects.hash({m.vars.0.name}); {#else} {#for v in m.vars} + {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} {#if v_isFirst} return java.util.Objects.hash({v.name}, {#else if v_isLast} @@ -187,6 +190,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {#else} {v.name}, {/if} + {/if} {/for} {/if} } From b243d0eca2e7deba86547a78a321f1365bfe23c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 08:56:48 -0300 Subject: [PATCH 106/166] Bump quarkus.version from 3.19.1 to 3.19.2 (#1032) Bumps `quarkus.version` from 3.19.1 to 3.19.2. Updates `io.quarkus:quarkus-bom` from 3.19.1 to 3.19.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.1...3.19.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.19.1 to 3.19.2 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.19.1 to 3.19.2 Updates `io.quarkus:quarkus-extension-processor` from 3.19.1 to 3.19.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.19.1 to 3.19.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.1...3.19.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba4c0c642..376b5bb28 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.19.1 + 3.19.2 1.1.1.Final 3.26.3 3.27.3 From f2ef46aa56c947a62024aba6ef49173dda316744 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Mon, 10 Mar 2025 10:55:06 -0700 Subject: [PATCH 107/166] Fixed wrong case in the OpenAPI word in module names and docs (#1036) Signed-off-by: Helber Belmiro --- README.md | 2 +- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../integration-tests/change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/antora.yml | 2 +- docs/pom.xml | 2 +- pom.xml | 2 +- server/deployment/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 51 files changed, 51 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index dfd0f68ac..f1906cf90 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ This repository holds two Quarkus extensions. The one located in the client fold ## Getting Started -You can learn more in [Quarkus Openapi Generator Documentation](http://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html). +You can learn more in [Quarkus OpenAPI Generator Documentation](http://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html). > [!TIP] > If you want to improve the docs, please feel free to contribute editing the docs in [Docs](https://github.com/quarkiverse/quarkus-openapi-generator/tree/main/docs/modules/ROOT). But first, read [this page](CONTRIBUTING.md). diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index ca083dd63..821fe6ed4 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -8,7 +8,7 @@ ../pom.xml quarkus-openapi-generator-deployment - Quarkus - Openapi Generator - Client - Deployment + Quarkus - OpenAPI Generator - Client - Deployment 7.12.0 diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 5ab4a4c42..dcf21dff4 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-additional-properties - Quarkus - Openapi Generator - Integration Tests - Client - Additional Properties + Quarkus - OpenAPI Generator - Integration Tests - Client - Additional Properties diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5e42973a5..ccb5fd1c5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-array-enum - Quarkus - Openapi Generator - Integration Tests - Client - Array enum + Quarkus - OpenAPI Generator - Integration Tests - Client - Array enum Example project for OpenAPI with array of enums diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 1663c3140..021f68a8d 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-bean-validation - Quarkus - Openapi Generator - Integration Tests - Client - Bean Validation + Quarkus - OpenAPI Generator - Integration Tests - Client - Bean Validation Example project for usage of the bean-validation property diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 0fdc3388c..7becd9518 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-beanparam - Quarkus - Openapi Generator - Integration Tests - Client - BeanParam + Quarkus - OpenAPI Generator - Integration Tests - Client - BeanParam Example project for @BeanParam usage diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 2d003df7a..21ae66723 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -7,7 +7,7 @@ 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory - Quarkus - Openapi Generator - Integration Tests - Client - Change custom template directory + Quarkus - OpenAPI Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index dd5307f9d..6ec30ed95 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -7,7 +7,7 @@ 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory - Quarkus - Openapi Generator - Integration Tests - Client - Change directory + Quarkus - OpenAPI Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 194046520..bc691350c 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-circuit-breaker - Quarkus - Openapi Generator - Integration Tests - Client - Circuit Breaker + Quarkus - OpenAPI Generator - Integration Tests - Client - Circuit Breaker diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 3c4c46104..22c590c25 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-config-key - Quarkus - Openapi Generator - Integration Tests - Client - Config Key + Quarkus - OpenAPI Generator - Integration Tests - Client - Config Key diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index fa51e768e..944bc43aa 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-cookie-authentication - Quarkus - Openapi Generator - Integration Tests - Client - Cookie Authentication + Quarkus - OpenAPI Generator - Integration Tests - Client - Cookie Authentication Use cookie authentication diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 1fb5edcb1..be6e5e381 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-custom-templates - Quarkus - Openapi Generator - Integration Tests - Client - Custom Templates + Quarkus - OpenAPI Generator - Integration Tests - Client - Custom Templates Example project with custom templates diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 59f3c2769..b6afadfc2 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-enum-property - Quarkus - Openapi Generator - Integration Tests - Client - Enum Property + Quarkus - OpenAPI Generator - Integration Tests - Client - Enum Property Example project for OpenAPI with enum property diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index fdfb0b59b..65ca3ddcf 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-enum-unexpected - Quarkus - Openapi Generator - Integration Tests - Client - Enum Unexpected + Quarkus - OpenAPI Generator - Integration Tests - Client - Enum Unexpected Example project for OpenAPI with enum unexpected value diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 80d46519a..b9d0bf03e 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-equals-hashcode - Quarkus - Openapi Generator - Integration Tests - Client - Equals hashcode + Quarkus - OpenAPI Generator - Integration Tests - Client - Equals hashcode Example project for general usage diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index a105cb359..39667b7b5 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-exclude - Quarkus - Openapi Generator - Integration Tests - Client - Exclude + Quarkus - OpenAPI Generator - Integration Tests - Client - Exclude Example project with OpenAPI documents that should be excluded diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 07dad3649..96c1a7d09 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-generate-flags - Quarkus - Openapi Generator - Integration Tests - Client - Generate Flags + Quarkus - OpenAPI Generator - Integration Tests - Client - Generate Flags Example project for usage of the generate-models and generate-apis properties diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index 05fa23821..f8c9fd9c7 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -7,7 +7,7 @@ 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input - Quarkus - Openapi Generator - Integration Tests - Client - Generation Input + Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Input Example library that implements the OpenApiSpecInputProvider interface diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 38a025766..2d699f578 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -7,7 +7,7 @@ 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests - Quarkus - Openapi Generator - Integration Tests - Client - Generation Tests + Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Tests Example Project that uses the OpenApiSpecProvider (via input Stream) to provide the OpenAPI Spec input. See the module "generation-input", which has this implementation. diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index fd731b3ec..237a370f6 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-ghub - Quarkus - Openapi Generator - Integration Tests - Client - GitHub spec + Quarkus - OpenAPI Generator - Integration Tests - Client - GitHub spec Example project for general usage diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 1407cc93d..9f5162425 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-include - Quarkus - Openapi Generator - Integration Tests - Client - Include + Quarkus - OpenAPI Generator - Integration Tests - Client - Include Example project with OpenAPI documents that should be included diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index c44cd400a..32cdab012 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-multipart-request - Quarkus - Openapi Generator - Integration Tests - Client - Multipart Request + Quarkus - OpenAPI Generator - Integration Tests - Client - Multipart Request diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index fcc4660d8..74108384d 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-mutiny-return-response - Quarkus - Openapi Generator - Integration Tests - Client - Mutiny Return Response + Quarkus - OpenAPI Generator - Integration Tests - Client - Mutiny Return Response Example project for usage of the mutiny-return-response property diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index a6e4450d4..c0bc3c05d 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -8,7 +8,7 @@ quarkus-openapi-generator-it-mutiny - Quarkus - Openapi Generator - Integration Tests - Client - Mutiny + Quarkus - OpenAPI Generator - Integration Tests - Client - Mutiny Example project for general usage with Mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 90387486d..eb71dd670 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -8,7 +8,7 @@ quarkus-openapi-generator-it-open-api-normalizer - Quarkus - Openapi Generator - Integration Tests - Client - OpenAPI Normalizer + Quarkus - OpenAPI Generator - Integration Tests - Client - OpenAPI Normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index aedbe92eb..878b31e21 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-part-filename - Quarkus - Openapi Generator - Integration Tests - Client - PartFilename + Quarkus - OpenAPI Generator - Integration Tests - Client - PartFilename diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index c9e9f38dd..efa483146 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -8,7 +8,7 @@ quarkus-openapi-generator-it-path - Quarkus - Openapi Generator - Integration Tests - Client - path + Quarkus - OpenAPI Generator - Integration Tests - Client - path Test from path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 668240bb5..bc8e14ecb 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-polymorphism - Quarkus - Openapi Generator - Integration Tests - Client - Polymorphism + Quarkus - OpenAPI Generator - Integration Tests - Client - Polymorphism diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index e164c1a39..7098980c1 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -8,7 +8,7 @@ ../pom.xml quarkus-openapi-generator-integration-tests - Quarkus - Openapi Generator - Client - Integration Tests + Quarkus - OpenAPI Generator - Client - Integration Tests pom additional-properties diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 480678d50..184df406a 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -8,7 +8,7 @@ quarkus-openapi-generator-it-remove-operationid-prefix - Quarkus - Openapi Generator - Integration Tests - Client - remove operation id prefix + Quarkus - OpenAPI Generator - Integration Tests - Client - remove operation id prefix Example project for general usage with remove operation id prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 3a86a104f..fa996369c 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-return-response - Quarkus - Openapi Generator - Integration Tests - Client - return-response + Quarkus - OpenAPI Generator - Integration Tests - Client - return-response Example project for usage of the return-response property diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 6d0ca52da..be31c56f8 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-security - Quarkus - Openapi Generator - Integration Tests - Client - Security + Quarkus - OpenAPI Generator - Integration Tests - Client - Security A few use cases that relies on security use cases with the OpenAPI Generator diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index ba9c35ff7..4b2c58ce4 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-serializable-model - Quarkus - Openapi Generator - Integration Tests - Client - Serializable model + Quarkus - OpenAPI Generator - Integration Tests - Client - Serializable model Example project for general usage diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index af06edbec..dbc79ac92 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-simple - Quarkus - Openapi Generator - Integration Tests - Client - Simple + Quarkus - OpenAPI Generator - Integration Tests - Client - Simple Example project for general usage diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 0e4d4e8a9..5b678a044 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-skip-validation - Quarkus - Openapi Generator - Integration Tests - Client - Skip Spec Validation + Quarkus - OpenAPI Generator - Integration Tests - Client - Skip Spec Validation Skip OpenAPI Spec Validation diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index a7130832b..1b90d9ae9 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-suffix-prefix - Quarkus - Openapi Generator - Integration Tests - Client - Suffix / Prefix + Quarkus - OpenAPI Generator - Integration Tests - Client - Suffix / Prefix diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7fd3339a7..7d258890f 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-type-mapping - Quarkus - Openapi Generator - Integration Tests - Client - Type Mapping + Quarkus - OpenAPI Generator - Integration Tests - Client - Type Mapping diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 92911e96e..752f4dee3 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-it-without-oidc - Quarkus - Openapi Generator - Integration Tests - Client - Without OIDC + Quarkus - OpenAPI Generator - Integration Tests - Client - Without OIDC Example project for general usage diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 85ba7c0ad..0dfc506b4 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -8,7 +8,7 @@ quarkus-openapi-generator-oidc - Quarkus - Openapi Generator - Client - OIDC + Quarkus - OpenAPI Generator - Client - OIDC OIDC Capabilities for Runtime diff --git a/client/pom.xml b/client/pom.xml index dded3c51d..9c394590e 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-client-parent - Quarkus - Openapi Generator - Client - Parent + Quarkus - OpenAPI Generator - Client - Parent pom diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index e5ec29b63..67a5e03aa 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -8,7 +8,7 @@ ../pom.xml quarkus-openapi-generator - Quarkus - Openapi Generator - Client - Runtime + Quarkus - OpenAPI Generator - Client - Runtime Generation of Rest Clients based on OpenAPI specification files diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b9f2adf7e..e72a863c7 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -8,7 +8,7 @@ ../pom.xml quarkus-openapi-generator-test-utils - Quarkus - Openapi Generator - Client - Test Utils + Quarkus - OpenAPI Generator - Client - Test Utils diff --git a/docs/antora.yml b/docs/antora.yml index de97e7734..b26c140a1 100644 --- a/docs/antora.yml +++ b/docs/antora.yml @@ -1,5 +1,5 @@ name: quarkus-openapi-generator -title: Openapi Generator +title: OpenAPI Generator version: dev nav: - modules/ROOT/nav.adoc diff --git a/docs/pom.xml b/docs/pom.xml index 56a0f7165..3f90e53db 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -9,7 +9,7 @@ ../pom.xml quarkus-openapi-generator-docs - Quarkus - Openapi Generator - Client - Documentation + Quarkus - OpenAPI Generator - Client - Documentation diff --git a/pom.xml b/pom.xml index 376b5bb28..4203b8f60 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ quarkus-openapi-generator-parent 3.0.0-SNAPSHOT pom - Quarkus - Openapi Generator - Parent + Quarkus - OpenAPI Generator - Parent client server diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 2358b4482..270e10270 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -9,7 +9,7 @@ 4.0.0 quarkus-openapi-generator-server-deployment - Quarkus - Openapi Generator - Server - Deployment + Quarkus - OpenAPI Generator - Server - Deployment diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 985bb0a7d..6653bd53c 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -11,7 +11,7 @@ pom quarkus-openapi-generator-server-integration-tests-parent - Quarkus - Openapi Generator - Server - Integration Tests + Quarkus - OpenAPI Generator - Server - Integration Tests reactive diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index efe96d116..e5c6cfa8e 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -9,7 +9,7 @@ 4.0.0 quarkus-openapi-generator-server-integration-tests-quarkus-rest - Quarkus - Openapi Generator - Server - Integration Tests - Quarkus REST (formerly RESTEasy Reactive) + Quarkus - OpenAPI Generator - Server - Integration Tests - Quarkus REST (formerly RESTEasy Reactive) diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index f89a2d395..7a74d2bd7 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -9,7 +9,7 @@ 4.0.0 quarkus-openapi-generator-server-integration-tests-resteasy - Quarkus - Openapi Generator - Server - Integration Tests - Resteasy + Quarkus - OpenAPI Generator - Server - Integration Tests - Resteasy diff --git a/server/pom.xml b/server/pom.xml index 1900c318f..e60c5ed55 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -8,7 +8,7 @@ 4.0.0 quarkus-openapi-generator-server-parent - Quarkus - Openapi Generator - Server - Parent + Quarkus - OpenAPI Generator - Server - Parent pom diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index b350a97aa..f11333b23 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -10,7 +10,7 @@ 4.0.0 quarkus-openapi-generator-server - Quarkus - Openapi Generator - Server + Quarkus - OpenAPI Generator - Server From 445f577d19d1f675bd32f060f5b3289c4000667e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 08:24:32 -0300 Subject: [PATCH 108/166] Bump org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api (#1042) Bumps [org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api](https://github.com/eclipse/microprofile-fault-tolerance) from 4.1.1 to 4.1.2. - [Release notes](https://github.com/eclipse/microprofile-fault-tolerance/releases) - [Commits](https://github.com/eclipse/microprofile-fault-tolerance/compare/4.1.1...4.1.2) --- updated-dependencies: - dependency-name: org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4203b8f60..451cd154b 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ 1.1.1.Final 3.26.3 3.27.3 - 4.1.1 + 4.1.2 3.12.1 From fa2ad161a0d9522de9bf1afbe31b96c95151ef0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 08:26:11 -0300 Subject: [PATCH 109/166] Bump io.quarkiverse:quarkiverse-parent from 18 to 19 (#1041) Bumps [io.quarkiverse:quarkiverse-parent](https://github.com/quarkiverse/quarkiverse-parent) from 18 to 19. - [Release notes](https://github.com/quarkiverse/quarkiverse-parent/releases) - [Commits](https://github.com/quarkiverse/quarkiverse-parent/commits) --- updated-dependencies: - dependency-name: io.quarkiverse:quarkiverse-parent dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 451cd154b..064be67b9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse quarkiverse-parent - 18 + 19 io.quarkiverse.openapi.generator quarkus-openapi-generator-parent From f7ce9284cdd65d1ed7574d5177927c9c771c048b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Mar 2025 06:18:23 -0300 Subject: [PATCH 110/166] Bump quarkus.version from 3.19.2 to 3.19.3 (#1044) Bumps `quarkus.version` from 3.19.2 to 3.19.3. Updates `io.quarkus:quarkus-bom` from 3.19.2 to 3.19.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.2...3.19.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.19.2 to 3.19.3 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.19.2 to 3.19.3 Updates `io.quarkus:quarkus-extension-processor` from 3.19.2 to 3.19.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.19.2 to 3.19.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.2...3.19.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 064be67b9..391eecb3a 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 17 UTF-8 UTF-8 - 3.19.2 + 3.19.3 1.1.1.Final 3.26.3 3.27.3 From 6c85744565bc43ae3ebab64a8662d147f3149ea9 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini Date: Thu, 13 Mar 2025 12:23:47 -0400 Subject: [PATCH 111/166] Fix #1038 - Do not register duplicated AuthProviders SyntheticBeans Signed-off-by: Ricardo Zanini --- .../deployment/GeneratorProcessor.java | 118 +++++++++++++----- .../auth/compositeAuthenticationProvider.qute | 2 +- .../microprofile/auth/headersFactory.qute | 2 +- .../OpenApiSpecProviderTest.java | 10 +- .../authentication/OperationTest.java | 6 +- .../generator/AuthenticationRecorder.java | 6 +- ...thenticationPropagationHeadersFactory.java | 4 +- ... BaseCompositeAuthenticationProvider.java} | 4 +- 8 files changed, 106 insertions(+), 46 deletions(-) rename client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/{CompositeAuthenticationProvider.java => BaseCompositeAuthenticationProvider.java} (94%) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java index d719673e3..1f6978c36 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java @@ -33,7 +33,7 @@ import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyIn; import io.quarkiverse.openapi.generator.providers.AuthProvider; -import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; +import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.deployment.SyntheticBeanBuildItem; @@ -110,12 +110,17 @@ void produceCompositeProviders(AuthenticationRecorder recorder, List> providersBySpec = authProviders.stream() .collect(Collectors.groupingBy(AuthProviderBuildItem::getOpenApiSpecId)); providersBySpec.forEach((openApiSpecId, providers) -> { - beanProducer.produce(SyntheticBeanBuildItem.configure(CompositeAuthenticationProvider.class).scope(Dependent.class) - .addQualifier().annotation(OpenApiSpec.class).addValue("openApiSpecId", openApiSpecId).done() - .addInjectionPoint(ParameterizedType.create(Instance.class, ClassType.create(AuthProvider.class)), + beanProducer.produce(SyntheticBeanBuildItem.configure(BaseCompositeAuthenticationProvider.class) + .scope(Dependent.class) + .addQualifier() + .annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId) + .done() + .addInjectionPoint( + ParameterizedType.create(Instance.class, ClassType.create(AuthProvider.class)), AnnotationInstance.builder(OpenApiSpec.class).add("openApiSpecId", openApiSpecId).build()) - .createWith(recorder.recordCompositeProvider(openApiSpecId)).done()); - + .createWith(recorder.recordCompositeProvider(openApiSpecId)) + .done()); }); } @@ -131,7 +136,13 @@ void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, } LOGGER.debug("{} class found in runtime, producing OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); Collection authenticationMarkers = beanArchiveBuildItem.getIndex() - .getAnnotationsWithRepeatable(OAUTH_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); + .getAnnotationsWithRepeatable(OAUTH_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()) + .stream() + .collect(Collectors.toMap( + AnnotationInstance::equivalenceHashCode, + marker -> marker, + (existing, duplicate) -> existing)) + .values(); Map> operationsBySpec = getOperationsBySpec(beanArchiveBuildItem); @@ -140,13 +151,21 @@ void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, String openApiSpecId = authenticationMarker.value("openApiSpecId").asString(); List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() - .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId).done() + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) + .scope(Dependent.class) + .addQualifier() + .annotation(AuthName.class) + .addValue("name", name) + .done() + .addQualifier() + .annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId) + .done() .addInjectionPoint(ClassType.create(OAuth2AuthenticationProvider.OidcClientRequestFilterDelegate.class), AnnotationInstance.builder(OidcClient.class).add("name", sanitizeAuthName(name)).build()) .createWith(oidcRecorder.recordOauthAuthProvider(sanitizeAuthName(name), openApiSpecId, operations)) - .unremovable().done()); + .unremovable() + .done()); } } @@ -157,7 +176,13 @@ void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() - .getAnnotationsWithRepeatable(BASIC_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); + .getAnnotationsWithRepeatable(BASIC_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()) + .stream() + .collect(Collectors.toMap( + AnnotationInstance::equivalenceHashCode, + marker -> marker, + (existing, duplicate) -> existing)) + .values(); Map> operationsBySpec = getOperationsBySpec(beanArchiveBuildItem); for (AnnotationInstance authenticationMarker : authenticationMarkers) { @@ -167,12 +192,18 @@ void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() - .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId).done() + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) + .scope(Dependent.class) + .addQualifier() + .annotation(AuthName.class) + .addValue("name", name).done() + .addQualifier() + .annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId) + .done() .createWith(recorder.recordBasicAuthProvider(sanitizeAuthName(name), openApiSpecId, operations)) - .unremovable().done()); + .unremovable() + .done()); } } @@ -183,7 +214,13 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() - .getAnnotationsWithRepeatable(BEARER_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); + .getAnnotationsWithRepeatable(BEARER_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()) + .stream() + .collect(Collectors.toMap( + AnnotationInstance::equivalenceHashCode, + marker -> marker, + (existing, duplicate) -> existing)) + .values(); Map> operationsBySpec = getOperationsBySpec(beanArchiveBuildItem); for (AnnotationInstance authenticationMarker : authenticationMarkers) { @@ -193,11 +230,19 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() - .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId).done() + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) + .scope(Dependent.class) + .addQualifier() + .annotation(AuthName.class) + .addValue("name", name) + .done() + .addQualifier() + .annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId) + .done() .createWith(recorder.recordBearerAuthProvider(sanitizeAuthName(name), scheme, openApiSpecId, operations)) - .unremovable().done()); + .unremovable() + .done()); } } @@ -209,7 +254,14 @@ void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, AuthenticationRecorder recorder) { Collection authenticationMarkers = beanArchiveBuildItem.getIndex() - .getAnnotationsWithRepeatable(API_KEY_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()); + .getAnnotationsWithRepeatable(API_KEY_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()) + .stream() + .collect(Collectors.toMap( + AnnotationInstance::equivalenceHashCode, + marker -> marker, + (existing, duplicate) -> existing)) + .values(); + Map> operationsBySpec = getOperationsBySpec(beanArchiveBuildItem); for (AnnotationInstance authenticationMarker : authenticationMarkers) { String name = authenticationMarker.value("name").asString(); @@ -220,12 +272,20 @@ void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, List operations = getOperations(operationsBySpec, openApiSpecId, name); authenticationProviders.produce(new AuthProviderBuildItem(openApiSpecId, name)); - - beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class).scope(Dependent.class).addQualifier() - .annotation(AuthName.class).addValue("name", name).done().addQualifier().annotation(OpenApiSpec.class) - .addValue("openApiSpecId", openApiSpecId).done().createWith(recorder - .recordApiKeyAuthProvider(sanitizeAuthName(name), openApiSpecId, apiKeyIn, apiKeyName, operations)) - .unremovable().done()); + beanProducer.produce(SyntheticBeanBuildItem.configure(AuthProvider.class) + .scope(Dependent.class) + .addQualifier() + .annotation(AuthName.class) + .addValue("name", name) + .done() + .addQualifier() + .annotation(OpenApiSpec.class) + .addValue("openApiSpecId", openApiSpecId) + .done() + .createWith(recorder.recordApiKeyAuthProvider(sanitizeAuthName(name), openApiSpecId, apiKeyIn, apiKeyName, + operations)) + .unremovable() + .done()); } } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute index ca6085c27..297ce5f34 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/compositeAuthenticationProvider.qute @@ -23,7 +23,7 @@ public class CompositeAuthenticationProvider implements jakarta.ws.rs.client.Cli @jakarta.inject.Inject @io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{quarkus-generator.openApiSpecId}") - io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider compositeProvider; + io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider compositeProvider; @java.lang.Override public void filter(jakarta.ws.rs.client.ClientRequestContext context) throws java.io.IOException { diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute index adb47b393..ddebaffec 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/auth/headersFactory.qute @@ -3,7 +3,7 @@ package {apiPackage}.auth; public class AuthenticationPropagationHeadersFactory extends io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory { @jakarta.inject.Inject - public AuthenticationPropagationHeadersFactory(@io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{quarkus-generator.openApiSpecId}") io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider compositeProvider, io.quarkiverse.openapi.generator.OpenApiGeneratorConfig generatorConfig, io.quarkiverse.openapi.generator.providers.HeadersProvider headersProvider) { + public AuthenticationPropagationHeadersFactory(@io.quarkiverse.openapi.generator.OpenApiSpec(openApiSpecId="{quarkus-generator.openApiSpecId}") io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider compositeProvider, io.quarkiverse.openapi.generator.OpenApiGeneratorConfig generatorConfig, io.quarkiverse.openapi.generator.providers.HeadersProvider headersProvider) { super(compositeProvider, generatorConfig, headersProvider); } diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java index 5a0f652c7..579b2a32c 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java @@ -20,8 +20,8 @@ import io.quarkiverse.openapi.generator.oidc.providers.OAuth2AuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.AuthProvider; +import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; import io.quarkus.test.QuarkusUnitTest; public class OpenApiSpecProviderTest { @@ -41,19 +41,19 @@ public class OpenApiSpecProviderTest { @Inject @OpenApiSpec(openApiSpecId = "spec_1") - CompositeAuthenticationProvider spec1CompositeProvider; + BaseCompositeAuthenticationProvider spec1CompositeProvider; @Inject @OpenApiSpec(openApiSpecId = "spec_2") - CompositeAuthenticationProvider spec2CompositeProvider; + BaseCompositeAuthenticationProvider spec2CompositeProvider; @Inject @OpenApiSpec(openApiSpecId = "spec_3") - CompositeAuthenticationProvider spec3CompositeProvider; + BaseCompositeAuthenticationProvider spec3CompositeProvider; @Inject @OpenApiSpec(openApiSpecId = "spec_multi") - CompositeAuthenticationProvider multiCompositeProvider; + BaseCompositeAuthenticationProvider multiCompositeProvider; @Test public void checkCompositeProvider() { diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java index f9a330c1f..05abba0a3 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java @@ -20,7 +20,7 @@ import io.quarkiverse.openapi.generator.markers.BasicAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker; import io.quarkiverse.openapi.generator.markers.OperationMarker; -import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; +import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.test.QuarkusUnitTest; @@ -40,10 +40,10 @@ public class OperationTest { @Inject @OpenApiSpec(openApiSpecId = "petstore_json") - CompositeAuthenticationProvider compositeProvider; + BaseCompositeAuthenticationProvider compositeProvider; @Inject @OpenApiSpec(openApiSpecId = "other_spec_json") - CompositeAuthenticationProvider otherProvider; + BaseCompositeAuthenticationProvider otherProvider; @Test public void test() { diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java index a5f599297..8672be8e8 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java @@ -10,9 +10,9 @@ import io.quarkiverse.openapi.generator.providers.ApiKeyAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.ApiKeyIn; import io.quarkiverse.openapi.generator.providers.AuthProvider; +import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BearerAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.CompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.SyntheticCreationalContext; import io.quarkus.runtime.annotations.Recorder; @@ -20,12 +20,12 @@ @Recorder public class AuthenticationRecorder { - public Function, CompositeAuthenticationProvider> recordCompositeProvider( + public Function, BaseCompositeAuthenticationProvider> recordCompositeProvider( String openApiSpec) { return ctx -> { List providers = ctx.getInjectedReference(new TypeLiteral>() { }, new Literal(openApiSpec)).stream().toList(); - return new CompositeAuthenticationProvider(providers); + return new BaseCompositeAuthenticationProvider(providers); }; } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthenticationPropagationHeadersFactory.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthenticationPropagationHeadersFactory.java index 586e14c72..2f9c1a04e 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthenticationPropagationHeadersFactory.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthenticationPropagationHeadersFactory.java @@ -19,11 +19,11 @@ public abstract class AbstractAuthenticationPropagationHeadersFactory implements private static final String HEADER_NAME_PREFIX_FOR_TOKEN_PROPAGATION = "QCG_%s"; private static final String HEADER_NAME_FOR_TOKEN_PROPAGATION = "QCG_%s_%s_%s"; - protected CompositeAuthenticationProvider compositeProvider; + protected BaseCompositeAuthenticationProvider compositeProvider; protected OpenApiGeneratorConfig generatorConfig; protected HeadersProvider headersProvider; - protected AbstractAuthenticationPropagationHeadersFactory(CompositeAuthenticationProvider compositeProvider, + protected AbstractAuthenticationPropagationHeadersFactory(BaseCompositeAuthenticationProvider compositeProvider, OpenApiGeneratorConfig generatorConfig, HeadersProvider headersProvider) { this.compositeProvider = compositeProvider; diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CompositeAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BaseCompositeAuthenticationProvider.java similarity index 94% rename from client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CompositeAuthenticationProvider.java rename to client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BaseCompositeAuthenticationProvider.java index 3df16cb19..a6d705f49 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CompositeAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BaseCompositeAuthenticationProvider.java @@ -16,11 +16,11 @@ * Composition of supported {@link ClientRequestFilter} defined by a given OpenAPI interface. * This class is used as the base class of generated code. */ -public class CompositeAuthenticationProvider implements ClientRequestFilter { +public class BaseCompositeAuthenticationProvider implements ClientRequestFilter { private final List authProviders; - public CompositeAuthenticationProvider(List authProviders) { + public BaseCompositeAuthenticationProvider(List authProviders) { this.authProviders = List.copyOf(authProviders); } From d820f7fba9603d485609527d001cf06b99c391c9 Mon Sep 17 00:00:00 2001 From: Matheus Cruz Date: Tue, 11 Mar 2025 09:39:34 -0300 Subject: [PATCH 112/166] Add mock and wiremock modules --- client/deployment/pom.xml | 1 - .../images/moqu-devui-card-framework.png | Bin 0 -> 40731 bytes .../ROOT/assets/images/table-wiremock.png | Bin 0 -> 37474 bytes docs/modules/ROOT/nav.adoc | 3 +- ...arkus-openapi-generator-moqu-wiremock.adoc | 32 + ...enapi-generator-moqu-wiremock_quarkus.adoc | 32 + ...qu-wiremock_quarkus.openapi-generator.adoc | 32 + .../quarkus-openapi-generator_quarkus.adoc | 1199 +++++++++++++++++ docs/modules/ROOT/pages/moqu.adoc | 206 +++ moqu/core/pom.xml | 54 + .../io/quarkiverse/openapi/moqu/Moqu.java | 37 + .../openapi/moqu/MoquImporter.java | 17 + .../quarkiverse/openapi/moqu/MoquMapper.java | 19 + .../openapi/moqu/OpenAPIMoquImporter.java | 253 ++++ .../openapi/moqu/ParameterType.java | 43 + .../openapi/moqu/SchemaReader.java | 64 + .../moqu/marshall/ObjectMapperFactory.java | 15 + .../openapi/moqu/model/Header.java | 12 + .../openapi/moqu/model/Operation.java | 10 + .../openapi/moqu/model/Parameter.java | 14 + .../openapi/moqu/model/Request.java | 16 + .../moqu/model/RequestResponsePair.java | 10 + .../openapi/moqu/model/Response.java | 20 + .../moqu/wiremock/mapper/WiremockMapper.java | 41 + .../moqu/wiremock/model/WiremockMapping.java | 4 + .../moqu/wiremock/model/WiremockRequest.java | 6 + .../moqu/wiremock/model/WiremockResponse.java | 8 + .../openapi/moqu/OpenAPIMoquImporterTest.java | 181 +++ .../quarkiverse/openapi/moqu/TestUtils.java | 20 + .../wiremock/mapper/WiremockMapperTest.java | 65 + .../mapper/WiremockPathParamTest.java | 164 +++ .../core/src/test/resources/wiremock/full.yml | 45 + .../should_map_one_wiremock_definition.yml | 28 + .../should_map_two_wiremock_definition.yml | 33 + .../wiremock/one_example_in_the_same_path.yml | 28 + .../wiremock/path_param_one_path_param.yml | 23 + ...th_param_two_params_but_different_path.yml | 39 + ...path_param_two_path_params_combination.yml | 35 + ..._two_path_params_only_one_with_example.yml | 25 + .../resources/wiremock/response_from_ref.yml | 31 + .../wiremock/response_from_ref_and_noref.yml | 38 + .../wiremock/response_from_ref_array.yml | 37 + .../two_examples_in_the_same_path.yml | 33 + moqu/deployment/pom.xml | 66 + .../generator/MoquProjectProcessor.java | 102 ++ .../generator/MoquWiremockProcessor.java | 12 + .../openapi/generator/devui/MoquModel.java | 5 + .../devui/MoquWiremockDevUIProcessor.java | 81 ++ .../generator/items/MoquBuildItem.java | 37 + .../generator/items/MoquProjectBuildItem.java | 22 + .../src/main/resources/dev-ui/qwc-moqu.js | 96 ++ .../generator/MoquProjectProcessorTest.java | 47 + moqu/deployment/src/test/resources/api.yaml | 35 + moqu/deployment/src/test/resources/apiv2.json | 60 + moqu/pom.xml | 19 + moqu/runtime/pom.xml | 77 ++ .../openapi/generator/moqu/MoquConfig.java | 19 + .../moqu/recorder/MoquRoutesRecorder.java | 47 + .../resources/META-INF/quarkus-extension.yaml | 11 + pom.xml | 4 + 60 files changed, 3711 insertions(+), 2 deletions(-) create mode 100644 docs/modules/ROOT/assets/images/moqu-devui-card-framework.png create mode 100644 docs/modules/ROOT/assets/images/table-wiremock.png create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-moqu-wiremock.adoc create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-moqu-wiremock_quarkus.adoc create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator-moqu-wiremock_quarkus.openapi-generator.adoc create mode 100644 docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.adoc create mode 100644 docs/modules/ROOT/pages/moqu.adoc create mode 100644 moqu/core/pom.xml create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/Moqu.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquImporter.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquMapper.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporter.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/ParameterType.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/SchemaReader.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/marshall/ObjectMapperFactory.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Header.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Operation.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Parameter.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Request.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/RequestResponsePair.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Response.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapper.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockMapping.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockRequest.java create mode 100644 moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockResponse.java create mode 100644 moqu/core/src/test/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporterTest.java create mode 100644 moqu/core/src/test/java/io/quarkiverse/openapi/moqu/TestUtils.java create mode 100644 moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapperTest.java create mode 100644 moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockPathParamTest.java create mode 100644 moqu/core/src/test/resources/wiremock/full.yml create mode 100644 moqu/core/src/test/resources/wiremock/mapper/should_map_one_wiremock_definition.yml create mode 100644 moqu/core/src/test/resources/wiremock/mapper/should_map_two_wiremock_definition.yml create mode 100644 moqu/core/src/test/resources/wiremock/one_example_in_the_same_path.yml create mode 100644 moqu/core/src/test/resources/wiremock/path_param_one_path_param.yml create mode 100644 moqu/core/src/test/resources/wiremock/path_param_two_params_but_different_path.yml create mode 100644 moqu/core/src/test/resources/wiremock/path_param_two_path_params_combination.yml create mode 100644 moqu/core/src/test/resources/wiremock/path_param_two_path_params_only_one_with_example.yml create mode 100644 moqu/core/src/test/resources/wiremock/response_from_ref.yml create mode 100644 moqu/core/src/test/resources/wiremock/response_from_ref_and_noref.yml create mode 100644 moqu/core/src/test/resources/wiremock/response_from_ref_array.yml create mode 100644 moqu/core/src/test/resources/wiremock/two_examples_in_the_same_path.yml create mode 100644 moqu/deployment/pom.xml create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquWiremockProcessor.java create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquModel.java create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquWiremockDevUIProcessor.java create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquBuildItem.java create mode 100644 moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquProjectBuildItem.java create mode 100644 moqu/deployment/src/main/resources/dev-ui/qwc-moqu.js create mode 100644 moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java create mode 100644 moqu/deployment/src/test/resources/api.yaml create mode 100644 moqu/deployment/src/test/resources/apiv2.json create mode 100644 moqu/pom.xml create mode 100644 moqu/runtime/pom.xml create mode 100644 moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/MoquConfig.java create mode 100644 moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/recorder/MoquRoutesRecorder.java create mode 100644 moqu/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 821fe6ed4..51ea8dc82 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -14,7 +14,6 @@ 7.12.0 2.0.17 4.3.1 - 2.1.25 diff --git a/docs/modules/ROOT/assets/images/moqu-devui-card-framework.png b/docs/modules/ROOT/assets/images/moqu-devui-card-framework.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b7d0e405eac7e60b018dd35748c7c7341d9251 GIT binary patch literal 40731 zcmd?R^;cA3+xQEjgmg$qDIq8=!YExsN(?9=4I)y5bc1wvi_}nqG)OZbNOug~4MWG! z@!dYp`<`|FfwR_G>-*DY?Y)QD_jOke5-%z z(*iju8`Hfm%HJ!1L<;vM)?J!MDDcN~TP6x8;E?-13r-Fk%^rZ$|6M0%M*;WAr%FKB zfMf5&FrnuGB&x zCh?!NG(J6ZjuFAlEDHKFKEPG!58L0k^Fg%W3~h+;|C8H>#N9K$C{Acq=|KWq__8y8 zxA2#3*}GA~Uq(%I#Y$Qexg3BzV_xS~Vw>Rf^jR2sHA4QTkD=*FouXkaR1qUb^5e?s zzCRmP|0DO8Bx2o+GQ8AfEw%m)&9|`qkEbr9iHX%Et_-h$eTu0i0WOoM<4VrG(_j1o zIe&F^-%m7l#PYG4Yu|zF-=<@I)H(l#%k9`>tyPaYfRvJw6$5~=Q4B{Ss-^5#dC)OkClHPA2{ax^vgKJy?yQo7~V z70{LL*#L-i_X^SWl}fmK*4DlMe{^LHOkc^~a3>Vz9soPw3sd=zT8%0qPa2vB{Qs>p z)fIG^{~s0HE{EeZaK|5(6~R4%w(nQz|D$_xRA`rD7z3ZSi<98<*=MK;UVY864zf$o z|6cX!3vVEpsI|iOZUoPR-rv`{i2YZk-5~eROv>-vLmT!^p+Vb?&rmq1Pwqi4@~I}1 zxaUOdj;%e0x|>n%AZjd`_xJ)nQ(LQ``e;|mW7Mmw4_o=P-(8w1E0$^s&lB+m8^NQ z`&Ib$6~@Bu9*$43g%GNfX>IC|1+@^}a#v7TdR;_2&&!8o*nU$znL9k}-A^dpT@z1^ z7WX81THGQAE8Tqj*!y6){+yl+?T|bPGH7y4{PQGeA=U!qo;orD`jzQ!x86Y8xw4&k zzfYN*Z0mhdq@}|e$asIua}I^XY^-j!G>V&J(&pW_D}aQK)E8$&g{p9)R5Q74!_V4# zsv0tW>NG9~g)U#E2MY;(ilGgPvFYMLy~b);H$&SzaWa>j??>3Sz_ljkE{_Xmue*2~ z9Y<7hoBo7oiu1IO5}L;9AwiYBGYkA=iBfp5C?qUjyGgIfZb&(xPVaur>gDfagSK*+ z+i9NrZ+~Sl9lCybQ#e%$e}xba{jnXYyb=s^Z}+=m6uUU^arN;4-;M<@>Wbdo+TI7) zDM(*ec#Wgg!l(JE=AJJh3s0cx>zMBBA*JXh!V*!ad?Y2hXvfe}>~aN9c2o0*_{~|_ ztw1)-U>uk}MWru8AOx=Ka4^e(k|w8_r^vjyJgAlvnl~~svQ{a2z=D!U z^}a^8&&7>P`&#W7);|{jv$`F$y0gH>n(R0Gl=Da)abl zvO1p*uif{&Jl#3Cf55zST!OQQIQvwYoP)@rf-c=&+cY-3e#7f(*1y3P;7H(Vx57wI#)>qzwvWmb4`Z*}!Zw=OchbgVS!~C7w3bt#h~l8{hNSyv6INE0dH|vv0xQ3EJ)Gyl?#cIwxyi zo~m?-O|2_t6EKOLWYs&*y86Fi4<7w^hY0iY+jhP`>g=r^!tUHCc8YPF@D}Jn>BRKa z?x%$>86gTVH9^0#YgP+m-yTO>Mu$xz7j}Z))S+vNdZEF(V;MO>=GFURBSbngLl7g-$_MdB{zANsmlkKSwOrk$Jj?4_-DxeFmSnpQGL|>nn3zItk^(F*KChM=2Lr5yw;{J7wyli$UJel19 zRJtr-gTFEZseERa@)b&KACnV87n zleZFnxj5@;krXWMFGzRCe>Yiih=eAjONTe4c!7(Ue$+R)i$-ofL60gbth7zonfgW_ zcw?RH_onl#KelHjJ;L2!T4+uy#;jIac|kK9Ga397USJP1(AM-?dA$-s&%J zclxBnyaq+J2DC>$eT_{@u2eZ_!z(lE`S^isUK|oVL`E=HwKRSnIq-C@qIiF)DT{7S zGP>z%h*9+Ztjov66mMZWAZQ|konHz!$+haQj%2t{F?k>PH|bCzYsvG{N2ju*iwW@B zQ-UY+?%xev3Vt{$OO!b0XfL}^aG|uIRH(!>8$#LIKy5`$eF#r|!sr)rPiypd$#3ZR zvb7cpbZxLaWJu^wivetZe&}rR{_xH@)cyQ07imh+JdXkSYV`-@^7uBNY@^HPir#c= z>2u<@DgsK!zg~{zZ>cmL-^f$rxHr!j4dm?%LL`X&pii}1JPvjko#xcAqs|n{bUwsv$R}0Vu(~;D5-IoE zu<2$s)4S#RF!)*g@}%WJb=!x^1yc2E)OMM#wDen;8Oc}3)W#XV%t3;sUR&n z!O8-xY^euU%&>mf=z)w@4S&WDorljhm`LIseUx(&-zx4_mH9}hp9PGCCr|i$?Ci-p zpR~Eq-d_VcJm%~2lnYfdFMTZ4;(nDztNrKi#_>(E4`Jkx(&Hq!ZC=7?FH-Q?%c-c4 zB6C6~!d!TZXb2pK|1b*3Gw#kpu0H4UYSq{D==ZINVUH#T?r09}?{|tlnTQAniA}no zJL}C`0*La2)Fxq@DkHzpS<@)GSVF5p*L8Pxi4TqA29V0Lvd9$b9kzOwov!x7ya0-a zd@eO+AGGF&^B0#8wmze@bU%czoLX*{8VTtq-O*d$&@(J7!*oOD-$!@quI9*c$3U7X z*nf0uum>92^&oQU`+eh4q{B*mq@Q0oG{^Yyn|(w=RCw~A2?Z!G+U!3a4h#y)IhcXn zt*q~kf?a%lT!vvpJ7*KO2Wu^mK@$C2Q!?xZYG#z~%e*m;NqjqH^Smp%Q?mVM8L+!E z2?)=(vlXtwt`l>fdQ6jx6+2@~{h`HAq8^J|5wz#4sx7e?YF_nXyn<|#BW?5E57X0~ zAEy~;$LeMe9(5=kq@b72>vbG?DVE=`iQ+eSd+GB$l&!uDh!b)8_3XK;XNf1C#;|-) zZAY}eYNkobmOFu@8k%DQpXSP)H+qky^by8iwR(n6*!CMn1iTMezB@Bk$%tCEGBDdy zQ2en%XMhfSs8m^E2k*$QG@IaBbkI?nxAkila_))*S#)bjrM2vT7Ght5u1bwV8=NQW zu0nmp*&Yj0ZFDG2`9NUJ9qOYSS?Av#O+B25h^pylN39cr5#J5`j!R8DvTpT-6a7#b zUh60}X#4lxr>EOw#lk*+0&CV06B0sJiApIri?^JUPMfahX^itB+r|7f0lt!}*u$C~ ziL=C~B^A^B_V_L9oyu(SYpG*J4IxnPJJ+h0+VbkE8TY{+le|@~&mGR}DcrR=5p1t@ z-0G&4U(qw5QSmZp2e4E4is*U#OkcqeS3McGvm~Q-{;DOUcDG!a&&mDcC{3o}MC}S# zzf9Bf>d*sZ=5N50Y?kg=x8QxX&JS9FnuNLwY0vd2N8p&1Vs~L9Nn%Hbs)T29WV|@? za??Z%Dj58%ewQ>!LVVI(|AIvuGi@4W^rKTsrpsYlh3~v}6ZWS~qw;l{?dAOR8*T&Z z*=>kL18Kn|#JcnKJA-_veoKS_v|fnz_fGXX3o#^C&f~04e7??twTE_E=OLkN3_G8d zJ_)gj6QeE}TKs+1lL}OEc;ID)r6~_=-EnG zgL9};Rl&JhN__=8WKr>D_Pai?qYji)(nSo&;AgduKXU}g%!_^4=OTA1DdxK~G++>M z=eBcbme+|p-QE7SO4X;Ynx$WV`|L4ZPPL&+6oj_yc|Y04YUAQ37xW-qnFNYow@G)8 zE4hfN$+a-JTk~-bSpT?~>NV$XCJ{5NG>~w*aV4Q?8Rc#qb~mE>XfOGvh$rQ?R-TPy zJ^VJebkS|=4kqa`{W>-WeCz1yVn#5akHwbEo!;0K^%-!M7eMl6X9(&k13%o-c(<$A9*dX|clU9N3r`^YjQMLzg7P8Ib)Db!d%b`kLcL zCF4b_lwtiS%pDVf#(!{t9U{50{@uVWF>K!%^C{wzmbu)~88K%`tPsNkLk*71=dj9C zYavJa`t%*u&3P6o>&~5)zkdvgPjj`01P8RIJp$I)NCmd3m8N!#r6g05nHOztWOwh> zH9)wGk7b=3_kj^6KS)OOtuh;~!+&&)M?<*6&pOh`oJeb^b9zaRxdsg1YulQ#U%jOb z6>nK1MITOx-Co?Xsq~`9E^Vo0L$5Ry6==u!GP$rbz4X5|xhl(u8u!GP08Zz7EbN0A zLQMZ>uT-EnLq*&5%Cva*aj!PIw~oz?2{+^890$;Ln`aIc{t=Qd#%-pD1V4zgN5j^y2I&TROBsP=vR z58W_x4H(0^&NkU6_wIwWe-Aw+YjG4N^dm)2Ppf7Z$n31S#fXV)yI+1y_!lHjbB%7A zF%ZFi|KlRFYRdhde02yIt^3NX-^f?+5$tnTWsa@;_3K_NMYAj26uB?{Z%YCz&_38V z-{W%PcIjZp#mxFgxkCbP5`1TUEnq8tiGWqU5)34+sqe++VN^UF6*@dwOl;5|d`6$E z$V=(WE}csFjx_GvA{qC>1>Ke99c7OKJIejag;`kR_;A`b)AQ)zP_sRHEYLvbq?7*<1%-F_d2xqred*{apNnkBwtfBs*$;AOu$WI-ux zYI*{TQe?Fw54#df5}AHXfhKW(H)ekoDd{1oQ@ZqMN1z6c;yNCEDL)6>Xi{n$gtTeH zO4Ckdot5XqYX(NfbV8G#^-!|rW{I<(Yq%bG6Y%#=>pEitX+U2G+0Q{mN+&PxkZS)X zb_E&zA^GR=2ARXg=#n<&(1yV#kI!MU`LZxN5mVIOJ_#$T0b>9M1O2m!h=vsiP^{Dr zWRr~+;Niw`1dO5T1sowt7AEAToCOaa_5i>aUgp6D*yWZs$|X7pkup(~Ub5EjhN$_W z_A?+LJtv?-Mt|aFxS(4Ik(?6qPuMSCe)z@NVa-gCquN5MYA@>P(?D7;$sHC4*0(hi z5%Zdfd?HN-F>LhKYLjvMq<>$WHJ3()7AAg7JBMz?qjcX4OiBtsJG+FCp@086>kR&o zKUSho2E>&__0duWzS-sCLNPAXXoV-ESCYS2JD@FJBq7Ac>CZOM_oH-hn~~8SsOM-Q z*iDiVx{qva=Nv|u_rE{h>W5us#ARTpPQ6p4=0c_4vaPw_gr+Qo*|!)1wa(%zaNOU7 zB)K4ftd`d5EQ{TA|g$`@6DP`QB9111}Y&9$0DO5&#SuDhPlOUvK;E<&g># z3N)VGG;tZ^cNQE%>QwvwbQ*ie`_dfAjpE6?X!)5?zOYZk2P-Y{LEO;24S^f|XDN^C zhnrn#*58r|Rd92n0tua>omkh2n8LM^ZF6rFZVz$KDqd!u z74&2ql?iosx5~>kKk&KOGc4uR4OX=c0P8c7?w!eRA7Vb4P>m;}P8C9*9Na$=D;C;a zn0IDJF`QoXze(e_0-b45(J7DQVJ|+ztF@fZ#s_l8&$s36mj2edi_O1PD#wb@7w-t- zj8@aYnDD}k_E}uUl=y$<&V;)9KvP1=w-p_R;x`kcK+ar)UGvvWGMK5yv)pL|1N z@3bu}!)XyWYN2X;@~Zr?kO_q~^nBiTX1~>L9arzZ;gBCj9dE_4=G9z~@&g{v! zESn81X1+D&CjWQaGl*=t`1S0f?!!s{g_e&9zE?5QVMaC&`EjCJv%&hCmdv`C_UXE2 zgs&~$L7-~L+J2xgehO*v>??gPj0v8{dR1}0Gr6UJbvW9E_{zUEU4aNuA*r5J1Dag6M;F4fHJ8aNcIoQM5%4BgRyi2@s5nsWa?GpW< zfXXHEneisOu?!L|!Ihnyv@n!2?!pmgJ!SG(BlQGIwQY8L=fbD!eJyJqmV2_2cjPx= z4MC1X2X9z-N~D!k1(SyfMSxu-UU=Tmw#epFuC?rwMJyb?*iv|b{A{H>xjxHyzj1ZO zR$SXC-2^ZAtKq)CAMMEZuf8L2w@vHwmm5M`RVM90Y^0QejWcdBe5LM!a8E3_@)7$Yf8JuQ$%Tri-wvj5ObQnI+xibl*s=&>7Ql^*A;8??8IF zhsbu5YpD11?RSGu^oJH+njdr0`{x_CclBy-o%T2Z{}SwR<|^b#;+0_T5rtLl!XQ$? z#%0hXqx{_~=iJft+<7n)@ww3NnlKm0n6FOG9=tJKz7eq9Q`EL~!J)2>qdBPE{gTYB zh;bgX>Nr7{fB|8!VNHm`sQM_j$o=PmU_nJ^h`W$(o^-fe5EV~ZsZV`bgMn(xUVgk* z>c|4W$?u!d$e~H-9KVki*yrJA-7Gj&!I}K#=M6f`ckfM4mw@m}7__m~R($Z@|U1H+&0AB_7d6V9CCCSAwr< zOYF|4Xp#?2!XF4g{VLzeo2xxs$;2N=c75kj=ulE|lBRWhB=G7mz$M=;+)qk^z7$}z z3$KmTaLJ9`jUS;Y$HiW(&Gu_5;+0|iB|c^QOHM=2XMiLu|4Bk6{`gY^_H>>#&z5CG zOf8z=@2@_>iTJ%LE}F2b!IdXKKW5q@E<|Yh-P2DV5n+bhCuzgiue)tBqUqP;-(lZqT0)zmSk98Q4!I&?B&yc{ae~ z4e%(?`bH?E8>vNdS^T1Vf)z8VH~12SrSR%gI{)f4M%ZeO>*@iLLi5ok{RWY{+?g z_<$6|M__6F$>4LKX?5JGK0kamtu>@L>;!R?kz;~>C(DAjJYeul7XE%VfsotRkBb>> zwR4CO-l9#n!?I=un0oYCl!_UkyRKI5b|tpf&Kh0*K=&&xY=*g(@y1T0fjcZJ7Rs)zKa1zvA9W(gRE(Je5*R&*1?K9`ZKU+6z;X$Dx4rmaQB|{x zDF={5Mxn;0(+~r{`6zOMqm|+I6y#vHar!H2-+RNC<#PcT;qtjx?CE@0Rp!0H;>?~b zn?clBRMa4+-$LxLCZkmEchQg4lj3e)ku!)QK4TKsA!kNOX$Vi2xDB@% zLhmU1R#07JoYbSKJ2;l$R~gWoVA^n&&vIa|$2G|(UbE~*L{fQkG9lrf(*z}d5K7%? zgNee1QYDOH*8_;W%j2F*(%s`LO;CBg8WMktMlX zcIW!nj(IY-l;Fi>KuNg+Oiav2rN!iMfY>L!_owat(?5;=tsp@U*%rOO+lf0+bs)u3 z=}oh3x#vJ$ZOk*>scTJ=TlnAs-|>ciFP`YC)g_~hS=X3=&jHPJ&u1*(vl|1~8fSBXm8|G+eN6*yOpMiQ#jb4Ua$W>@U*&+ZJ_K5p@V*1uzI}Y90?}m^*Il zGMqs!dgGDkW2)g*rSCip*UAqopE%1S54=y}S;8%c{{dZ6Bh0V*0N3tTEg;7Nrzh~q z3E@P1$b9QIp=Yr})6j4iSnmoDx~MY-&}8rn{tYJVFsP8OFN|RYs0bBt_HIY(iyOnW z=4Hzb?&@jnm*+m>m4CbY(fsI|1r+?iWN6eYd_1Nr_gO^Ver=xzREz zWqRUjv#^}qqEhjC$8DhgW%5cOc<{yr-0&24oY1CRee%HPe0+_&35!DS%-GGU;hkA&4kL0B zEqSE&%m(y5u_#ks9$uzm=&xPGxS4)Tu{Foq4>U0l%wwg@Q<-L12+DX|- z3sK4Aqx@@JG#_&B$l2z%E@h%t&FU-uoVVQe>6*Y};_R;^N+Ny{y1u6es%(%J?er*g zk73j|$DT?1-S!skEdX6z{2w*B;?bG_$n*&-B9&66Tcz9{t+92gdVlAmTK4d)2={UY z<@D^nqogBoNBkCjzhpb9xxfUJgVYb@sSbe#(@yDvNtD3aK-6I-$&H)w*vv3Ej0{MpI!?bs)_XDsg1QxBL;BWmY%9;{8%n@G7f$$rNs-lBg2 z^Y2vaC$#OTmi=@Di{h)8;}Qzz7P+g)5|s|carQ0hm@004Dr$RcR-$*$*=&RWhlQ7p ze5vs4*;oDz|7%^{77ov;u@dgYUr4U86=X%VmX4UD%2nAH7?9OG1Hy!d;XOwB9dy-Y zf6!L$>NB#GEZ@C6*)3V{@EYE&bUwyfs?P9r{AQBzTmqt0P3H zR}Y%~JN|$Sfz@*38*1u=A|-T7B|}TvIbm2&ecIg6kUnFRe<J|F+ zm^#gUM(^un^vJ8)nytqF3Sy7vLACeAT5`to7Pgr07`SH+XEN{3_cgQNvs>?+ODtys z6*VQ-C|p8!ie{cR-*wf+^yV zh?@FoG$7!ESoszowdLfFV#q)mp9X);gi>^-CzTjUyc5yvD`FZofV4Or#Ok%n6AAjJ z8Bq+--;z-?eia>fsL8glj#^xHYGNnyoz zB(;6s2}rPPeuIAQPotM~^BwrjdHTTf9=*9mlfm4faF3SdpgXMxdO&VT7(+yy>)2B0 zv;yeezHEDl@`LZU;|y{v^V{JS560xUy{~xfy}n+m8xLwWf7bBG)!;VK-nbocoZz4h zG)>Xzk5mMDRK?MsiN6HXZ@hRSeIFW6b_+z1I?U1OSoo!^6Gf$@QKP{Gv9SjPHzLTB z+J<0TCmwzTt|bvyXez=`?AT9@Jd7|Zc)vXAyZ7=FO^(?HJwi~4jeG6RnT zSm8?#pkn{*t$tpRDeeyCw(J6ldIAJxN>9d?iHc{g=^)?m1Jb`kicM2!ZXF%Dg@xmyKm*JHFQK7?JBOFq>IktCH%k+}N85ig0-XyT1 z+~*(W-1q(+fF`&;*sSz?48f6F4rYm zg_^kQRDRBXSepD50NkOsDRzPc!g%>!nqh#)>SYLP2>usHlArU(jLy&9-Bb{9R&`N} zrf{@YEMIOd98^<0ahg0@$kO5{TXb_>Kf~g2Z(=ePC?TI{c9R5pBw!sLtZ?{F{n15h z1#T!^1rA<9-M>~YJ0AdDnoV6b7H(C*+bG6(8KCuT4w7)^hc)Z-^c^c8L*j$)LcV95 zxcI2V@P4`mBN1UckAk{S+j>*0X^R*a{q>zT`wC{dXN%!V8zpGYa6qvx@ow|~pXdJL z_IA-MrDq{2<9WS_o3Fxs2vLV#?Bx)A%s4#k3g~g!n_@1NKikL86m z^jFJ@mSwpxq;X`5-58XzyqlKI0qbK`v)d%-EY5I+$_#uwjT~6v6N{nzF^X>|&Yus4uoy?W8QM~`J- zX#?_=a7;mAW55g1PAjVc6BQkHS(@r3b)E*1)AJJ zX(lSPwS)}dY5ZmL*a-O}v5!PdU?A}@BL>e$bB6pd*q*&fWm&)sIOUzqV z895^JE2OCp_Yllb44$iE2Dh+uZyk$FxYa@Z#UjFcb9r6&+`px4F;U+}K}K{f>(0ZO z>iXnfA`$`2I{>6EnR||avgw4!L<3f;FTi+z0Xi=Tyd4k33$^{&4dV)lsSJkg%XzFk z)O9>gPtYppcp!0*e?B6+7sIWC%&v}e?Z=xki2L`Hr4H*1oH?;32}EA&?#6~m=H&XE zpOF3!Iiw42pb2X&C6N&Tokw9G!iWvyFN6O3m<1oX>>pMCwgo1}jbALJH?|fgU1C(q?>d`H0l?FRqn>tPRRKnx z7kZVBqq=6&pRIpYR2}Wz8(I2$Q3t6}P^H_#3+-ffJdF&~_}!StMZar#t;yXMBri52 z_~!Q+1x)VZ-KQ+NCiUNAJRJ1TQSMxeq644|78o}%?M3C~#M@JBui7W=;SCECj8$}1 zj?4KE8(}s0l>gN(wES9=wq)6YMbm;pj1VX{`!j^`X=d`NX=g0JU^jF>ULF2q5rX`H z?~JJozibTNqdr|&X#)`uAyMPg`ys@Y7Hn=uFHXXQKFek<-i>XfZ$N*w3Q@>2jNy|_ z@}HeE+IE)!65GawwA}SflDS;=(u0zW9lwm+lrC)Q>mfO;kkWycWm$yP)R1%T3BCH0 zy!J?;ldNB7^2W0Z2lsg`bQ-@Ok*c4mA(=bF$b9mpQBwMv5205{x&TX+K~~>hU0fb$6bzao^ z&6Q=c%Xg7F-ImaQrd4eyc%^L+i{YNk{F>N7&GKmkP$yCes#(7^ge#2#0m_yg6}xp} z0t&Nfo6wyF{j^Qewgw}8&pGlm%^PC%Ifon4WY`ob(T=W-KbGCjK4|T%R2lB_Sovxg zAK|+mjmGsy?hdPE-qJ9mEV>4#evav}Iv&aGOcJ`fER;?3j!07qpI45KzzjZmv~wY{ zUI&ZM*DSxcVU8A?t(UZy`;+yhFAKWKb2hek{~Q$oSd?h* zPjRvmV#`U4V0R7!+C3^m52Jn>b}7MQTf)jV5?T@>WSuo!JLBnjy}Agy`QzWb5KA|Z zlX>@rUWFcUI}DwT&0 zdt{2K$=EV~$V2)iHPc44n-0}MQb#V}e~trT48a*ei3cGv*{sSwf&E~ybCW&yC9I{|5AbX>BpQoHO|Be)H_P)em@C=kMcaIis$RtLhE)4w|9B>fl6yW zz9{pap*Xs;)TY*v5ZjQe3JIjA?SxQ7u`h5#Ob_ZmX|n|D)v!%%A@=aU|2i;`#}KkQrcXqqXiSeqQ&zB(w!V}iR6ir z2_gs_MoYB+?&Ii>PRFlK9Qc?Mc9rmY5KnOF*KLa?5+{xcjYFnB;4|d{{m7PSI$+L) zAtQiSLQv>R)|B$tg*-yI5vL2N@?Y?84)+Dmb%kNRv^<~zCIC9gAJLA|aV>hO{c?@L z2OTVWAIhab%XtsKmd0yA495F@0RxG=g28eUg-o-2jEd855`E9_K5U455DW!|qu7<@ zt|gE+%0emjTLI`GGU@u|T9dPSQmN7Zj%r)~e>LSDP)UZCmTUMo9bQZMpOIYk7YT{* z#*zP=!TFyv|96d#*9J=u=${nTw)T$-obPk2-6C*`(uAT;=?>nBO}=|GKg_2F@n|QM zbxw6$U!F}UUh?B9f^VOdmyc7`BG@R!E=YKeRGN%#K9>ma|_QtyVaA74Nbhpl(g zP~W<&kYA|T;yO9^sLlP-IcJTi<$1^Ti^A~zGHn8tbi38&>ZbD%-&KdrsG;<(mWx@! z^6UQe#+N)rR<09-OY2ixP3^A+=vY_){QO`+(nf@OD7CIE8h*e0_trGET1{-y&ogSU zEF!akx9X+>jcenz3T3io68$yy5Gy_$O5I9{t`=Et>-p?-DiEh3vniom$*bx|O1(N1D;pK+qTOLc1T=LX}4 zTqpqPZtF5?B9V0442E@T@|NhcW`8tU)*HxV66GrehjU&bclxZFJdYQ`WmfDBeuqhi zKf;CJR@-)ewcpg7@2~?C&kkzH@WU^mSIsC{8mLqlk$_8sF@b2;W^Q;Z?kHIbh=?HH zAv#BPmM6;R_gb7IE_zIYJk+Oh6%Ph;V5$~?>K`_kQ z%IaU15<-lc6x+^^5KvIP>olQ}Z$bx_=jmElGwbBYj&Ys%PI3Ecut{fZnmgU;?gsZ8 zg7gu(5p~4LsPRHE!l448$EB!n z!bY7MuhoKFqeptJPLuNEPS}xPISbU&B%^ZiVq>eQYNxFVm0^3yVQpAQ{}R=F@s~>C z{Zj6a<2BvUQf(yzxDa)=5V(>{Co4Y%A_UA}9=Yr$Ic+(??>vQO8W0d31$2p4RYwBp#R^j2dryV7244mtD`wg<`G>ynH2X522bhyYnnvssF0sVZ@~M zx)ff!!SRuT9N*cu!0&}m|IWO{_gEQ-4?eIc<0=^UGm`^tY}i-y)8HSCjxvyt@6}ml z?ef-NuXcCq+rDxx|8Ox*6`}T-+FJ~#H*t-U`cVZYWnnt<#IRZ+h2Z7t+?eVG`n`<`0g&FIaaIp6Uo{W$Q?W~}fE2i(g8 zS{{O{BT(u0F9N5NRVLkk0q@)WDvb4wLUYaCh_6tnI*C(gojq+eE-ZYG(ndJW-btfi zO+@h-e)akd7hfY6qzoZxg{KyM5pOL*`}5OlU$b*hh*&W^DRbDsDO<(Z zX8zN$^*%#vV>X|LLNqy9Ms-#Wvf_7~Q>5$J!yHG}@9iZbbDUI8wgw@I?~xrg$_IKg z0Gpt)C|t^)8mJ7+elb~)T)HjrC1S}u86WGbKA&T{WKnD=p`-_X%~{m8?!kT`SzblW zc9(GPwsUZVj;YQRw>{Mlu1PLP^y2N7ItjWn=hiKaxffIF3#rk{B;8SXLx#BRKKB$y z;jT!)dtpp3OTUX)3~FN`%3U(6lULx|JztnX0GZ5u;~z@8{Uk(@m)S`5x=Hq58}{Eq zlHQ^{&s2jr?FaSASZ3XqHC%=llA7cWuxyreJ#@QOt*CBk!e{O4GPbI z@^FHE+R7+3_Xx&)LU@5j;D|u&OfApzMZzhaQs)(-D4i05SRSp;KQ4?^TK)a?ZUQL& zxtlhLK2B8kx_W)xD6WT_qah|x-@i%YB`NR8$h1K+R$(O6(V=pSg|q!i@NW9>08P|C200}LVeoB=B@~Q zJEeU$%u?NMipd2sZnqz=dO7hhLQPu)25(UY0%o}dB>HQrQ%P6xmsIsTy;Xdw5tN>z zDi_uY`{!J-ilu{dg#4BJf~wHgUFaB;!vFWp$mP#XPm5^gHhz!6oaUDTp+bA_wYDHp zAH}E(ySe6bXo|_#H%+ZRfSdS$Jv(n4B_~3@X zcX~OUUi27q7Vf?Wq93~aJ85%;gS;b0J$%RCw?s7cY3fUwlOUt0_l{rC|6ZrdiXD{4b^~??H`?VH5$_)XOg%{QfK=*kOrO*-|8D>6 zY*)MN(kpk%6BsxCiOKEPr_q#}KlEjgz#8zoE?A^xAgG85;$$En1)_XY<1s-G7}1cu z^o#5yQaH6W&MR%^dY;gbLJ5gZq+I9t=J-sj#-Zf)8ELF>pxx;K@BRYT@5~wtjpXV{IqjGr@2E39t&d^^gk(shwDoB7i%|EmfPFr z8@K;-q7Cf4R{!sSIIi$3)acp^O73hAwBKFZ4QX|@65Mu2pwNtrV27~Mp(jqXM_V`3 zC)4GXwqpM!d#Is-MYM+BA@%1OemrIU>^qJx$_VzfC+Mi`pB#)VEIndqFC2WFnEJT- zF*Dtdi!WLh1YYmlJ^n-eoBvuD$X0vgP|v}J_!Feq`IL=v8!__b9yToJ1Ac2T10AjI zU+3?I{4X-Y!!K&Wg$#<`=RG@0SU7~KNF0YXxGH5y*0-1q%c-RdVdl*B`(OIla|;oab3=afh9;UCLcEPm5yrMyT;pIr2nR@Y+nN(|9f_ z35U2nVlk3@rlDaC1~U<5U~Ikzr~RnXM4JW}FZ=tiPoIW`HON1Dy~=RN#Km3@_kmab zaw*mQ+3yj09=ZA0XBI4)H)!`XmGH;kEl;SOqQ|5MSf5~ry(RdAt8GR-toBRR>qdyW zF~=eY%DqB@xsjF~1-x;LX4-|r`wIRXazGQvhK00{C0bSn8s^byKlgQJ zRui6y6qZxPIW@ua%gH(C&iC@+{ua|AO`22M>yIqiu1e?`T&k?|RL}RZBbW@3PQHzs zHGbJmjNTFO#Jw7E;Dp zR6IAQt{*iIdc!~;qYETyfjQO_6NpTecS5|z-b%#MtH2vezqA+zz4T=z&dfw?LK_xv zq4b8hvPewM(kHY+{$Tp5I&xTsdLzer#KRp|yfXOCWl&E?AC%t~^=dbI_)C&?h=i!4 zRf09?o2}wrs_5cE9)D-CJa|j!Kd+bri(1ZiM*DS?q&eF3@zI2^FlP3UYNcA=PffVA zpcXN76Li_7 z`(8>imWL(fsrJdqr(z8SP{jcQ7S-7n!F6Y@+Zx*s7dp14 zPmBJ65synb+P&+xv&t$z?Nm6MUMbK$5j1C;-Xc)(&BAjT7Ev$&PVa%ips8{2ysphb zoq|;Co*=*+WZp0y{mQVe6+tO$mK@8}RMS*Q!|qfX)OG*5h9-&9v!Z|!;KeHflI@-j zr3r9~h7cuLts?dlf}#C+GFa79R};m?LGFsk3=!hLZHipd5Fh@3>1P3$K5JdurU&-? zCbE!ai`ZVKl2YiYCbO4@>1ND$)z%ienYhUI%ubOc!}LlCuMJ{wpmAi?{YErW_Z*y+v_0=YLbthS=q(8iDQ=*!y;X~^&q{0foL zL?dJIfAiC^Xt3d)BWC?2|j*qSg= zDhKDFr-0#n{z~g}k@tq|AUpSEbw@|h!;fg21=Vump^PdK?|7_^$Q$>K8KEHMiD$Yw z*M5#>kycDVEgu5yj{G`>Tn#a|MaH6E>#}nsye5iI?>g#MF>~zNP%OuJnaQX0Gi)?L zypa%54j_yW1~azh2DB(~ayqxJGWqA$SmO^%8LJMZT&%=SbZ_u=TwbRX2>X#}(VRJvwnS(X)FtO)V#?Zhox}N=~BnmM!RObrSh8Z3VQQBwj ztnwG-urEgTBPF!#nKP8L`Vt+#h*Z+mnGfDieC0JvizEYtyWSRu57xtfAN+^(`C_xl zUVsQLR537Jbvmf7;zqphgy z6<&&O9qBY@mE_SHf?1!Vh~7)tU$IdhIuBdPxrup94^-Y7-DjhMa$M2Fx$t?7v`1$+ zuMOvs+xs@*n5vN>Bz^F*92f!do8NyQNVv6WI;0OS;2PQB*w*Y(6VwH)pFkVP(3lX* zC`ajy^@iCPE;X6Dz)uuaBbiM)YRJ%Fm>1^rHFPlHC077UMWmePSuTN*v^P-skQ49X z1HTtB6|*SCj%vrcejwG0A-Gmc5(Y$Wkw(uI z!k|}bAQ4gkuz?|`^Z*j{#s65N>V@~~zzM&#$u^kDA*4p5bZW>)nyT?vbglHQC zl!B?r4i@G4gCJ9{etp3!eVaz~oy%Qkdt2V^c;vqRvFzc7rg)_^FmCq&

IfaN^_u zFg+_srvBX&Ay%iV{u@jHCDpqqhya8+?k`G?lO6TQPvLlcj-}p3$IH|GABU(`3( zHe_$egX9_6ftFr5tW!^h6VKVv$ll1Z0CrkWcRBMaHXW1yUA! z_{;PE!`)j(#kEA;qU4Z-1Pu@*5L^>1xLa_y06`je4br%~y97_8jR%K@hTy>=G_JvE zEJ)*!x6irvdtR+a~Gq0!_BJqMsiScEll$wx!qsValfpnRK0Y0?fevPB#$=2{qow_c(1V)aX<{gJ z6co8c05v7CVrAn{DLdnJ5>%w&wfA?{^3}B^a&5`dP+1hAZMQLhTV1485Lq z_h*`O79E-8C6!LnwRvQCjn>FfBH?!;<2MEx!jzsuyFd!LmEoC;`$I9~!(!BgSVHO} zQYhfU#J@c~s^)o;l!cnyOGl{7_X?^wG=A)$1?vYJk?)F3ByRpnQBB~_H#+OppUmrt zn2|Ie)H5)x_1bOFc7*5&o6ByNz~$uP=?9u}YWZ_>n=%wC{yH}^);)y@PhvVPpJ<^i z%yuypCN#5Aw8%*L7JOx7r{f+G>i*;rw6TA}^DmIq%op_4n6oZh=p)=M4La9MBs2|x z*)NIwft};{zRhHkI+!yp`JkqaFE7xKl=;L;PSD9NH zqaX+Z!KGqArh}`Gi_-wmZ9l7GNVkK_At=4vydQnRgH1IaB~T6;YFiz0br}6CVDg$HOJ)10(USZ) zm#t5tbhG!vg70(9iG+Azs6wdoG369sJxHP~H0gyK>soYJ$NB6(yTWn4rkBItxl$>b zks0p_*=?VvCiQYNojsRh6ei^jq|O77FN#nt(!o7dIV(CGpNr7e%`$cmoC#WT2+ei2 zK|q1LQj-06{Z#-7a>lnqUFcR z8i%f+C1yDc#x0=%gB@B~CT4BU%_PQ0`=mC&v()!+&LzmHO`u*;p~>sy8gMIRla+;r zckB1K^r4ww44;^IaM;*!6DA{ZdXZ?UC6BmFnA%-&@e z$m>#OxG&oUm5~~^zF_h8^0>)!w@g8jeERBl0bKvt24$zxOr()(yyqS=-5;cwp5@76 z^=s|b&yT;h|a*C`sWte-0 zTkJvq6Jknk1H(l>+?cg^eG7zNm*;rBs#H648eQraB z_A_(Q^>`(dD~TUoY9+wNMMcc^S*@7j|gX^y+)sRHsH(uSXE=*Ps&0nDhYkJ6?d`n(Dt97A%MsPX_C)|3!ovWW7SN6eek zW|i3CUbfQ5&#{)zvy!GSC2eQEI#9&G;*F{Z#FrrVVM{;y_6@)Lhns91&@3``htU@1 zqr&S7(dNH1N~Ccv4gDJ#Z8edj7Mu>!0`JZa3^j18IZ3!`$E!r!<5&Y;=4}g6EP`DL`0;!qL%&)U= zzEUUUhpo(dDY1(befq_TJwzy}c#0HxuvR4bGoY}qKw9^wk;eyAU@^RCz{G|*O^$y= zn-1FGtZ9*zmBD=dtY#I)ijMPH0{#nk z?n^z8o#mHQw@;KR2P_WM5u#BwjXRE?_0)bfxN!wCXzTbWwBQfK3Z>Nd>=KS9o)fd{ z@Kb`P3fc3wXp#O2Od9XMHcnJq8?e_$UeF8Vb$L%ka5tFams@l8SEHszk-gQ)c0%Qe#)AVN zFd=WV^#wg^^jB9m8Tbe8E%IY>>PQ0F1i7^AxIveqVg%V(W430@N3vK?yS@?jT|+AN za_e;&=;Yh2La!u=^JPqvB*fMiED(;Fk(n||sa&vmeNNY@h+($bJ+mWA<;S(@TK8?m zZ8Iz*e_)(OuMObVsA!wl%K-Gt+q2#NkAF26RJb%P!3Qa)eUt9r62cXldDZCRNKnw< zu~2;i3yW_6f6vxQ2T@6mDXKbJX3j*yk@I0AmO9JR^L&uHux5%9{pG%3{!(>P*qcFU zkJ22j9%m{JC*01~oB1LFpN{mRj6lhFj*vX$)Xo7(>UvPjg8Ys?ntsjky4AVaM#br5 zLM4D6ADp$R5WxI!yt}+K+%aaDElXgLQftHeq3=`Ir`f!ocA9^Rq7u3lJRR97NuL7u zW^Y2CYZ+16zZ!r;0~BbCEETR;(O(W#Z%l6JBVIC^heuCmuJFLC;Wm-9>0&SIm$#3c z{smrFm3A;gseAF?xG1vL@ujR2f!D$BqMqax<;cHYB@FDhPN9h8bj%~Ou5kV#cf_JonQ5=h6Rt^Dd8Ux0 zqt{4AYF1G|1M>E=xXf)<=lu||%*^i9*wYip10 zWiUGR#d&mUWA3Cb&on8xA$CHYur@6!iz$aTeR9yJ%x6j`(==~(I-rRJ9xOr{h zYw!=A{76bMF1YmOm4nbZdEn!BZCnBjhy0gcKRNvOU0V37MEoqgtn@@>y8liQf#LA? zc1}7R;lm0oGWM=%JU+?qD?F?E&lO!MTm3DZvrcQiqGm7I_8FG7^GRcL(4~}7v9ut) zX@5UeRswtNsaUVOqBM)57-|EfcgR|FVD1|fbOs$AIQ8Y`lbEFx7Cb;*%%KM5Qz2Ie z2XH&e&l>E`izwK;t|g<(f21Atygk)s>gv`u{=6_CREV8&!RdMA!_Q9rB;>32c zUNEZgQAk4Ls>pMgtYayRT1n?S^IZNf;JEXZ)^s{;%hBeilrcs((T-|^9~H9GrNm9t zQTeb&_%Y6hrlnf@n}jd?aimd12S?+h(z2H(1mu$YzFjf+;z7vsMXePlatUlEbBabG zuHojDbC?E@r~Vm1cZ3XEkjB+N^Lrw)ztKWJ@W(Kxs!kK3(iZogC>={#!_kRUi$(YQ80#7ZptVi_I zI#1^MUCz60IY)_!gkz#NNs-1acH+p7i|m~YsUIFZ@)(Rl7{A;_k>49c{ zE%pRE6?qQc`+QgpoVEklD`l99nxy{vFR)*W_#^O{4wFVn24_`iTS7tI0O~X z`?YM366@RzIme(lb?;mG?`02Qq_(kh))@H+3hq?JrO1d9OpC&=?5JMQ#nN92`_?6y{@6eF&j!hI*>KZ+~lp${}X<&bpa1oF5W-aIMuo3bi|WU&+Mv8^sI#FCW_m{7TFrB9I3i@Sek5>R3)Tu1G26NNvB%}^fSSt7h8&^sA*51&4_rb#Oz=>KpTn<~I zd82sLdNa~`nUH&Of!8zglO%oLl0Sxh(v95r1ll0_BI9W~*O5qSZ%WN!xTD>87~7KrBfZX7g1N{GHU9*3yQcJX$*U#mi1sAn}2V;mFw6U%TxmzJC2o{}+GV zx^M1C1{-u?JD2H7px28cew?@CkH9e}HgKZ6GJXIK6ccLGbQ(LZ9)r+euO!@oiwsc6 zN2vp`&jmR$(}YAa=TutpLqKy+mx6?VsgJotw2{Ctix-K6uJ1PpytBHcxrBVjgFuO@ zBd11ME^c)0?S4WXng^~s?X_*3;?()E`g4;aK%})BPbPhceXILlQk$3XH5XiMY{>+3b_{yWnf&)p33WvK04q z(Vb0M-Q^0L|IEx=x#20P0%8g4d33%oeJp#MlC;Y#p!YjvVCje{3d+ z@u3Gk&MhM`fR(0nHvL!>f~^2qj8heVHh}2LI+TtZf=}#L0YE5#_Z2DnH#;GK+sq{DXiOhQ;C~Z!vTc=UtNi~kAp^)s#lade zHUPiO-`>JX&uJ{LT`)tBJkJJKtDpa+&9WXA@C^bQEP?7$igC4hy~)POYjzr<4%oP0us;&1WY|@! zStbJxZHs`+U~kj22=V216^c+`qgrRw0002Y)0k~3r{y9z?L?W%sEj2a193dOSjYK9 z_%msuCZZ@PCf0N-A;MVj^gmV#Q!O{pmb#~nim}?AY$P90pYu_^HIACK-)n7r_u=cf zXcL*^=9`tI2vQ9alLPs$03zg?S4i34?psmZXVgn3qrtC^7&-vh?$Y)~&OatEQphDj z>(X=^HTB~AY>2+vYR+QD@yd2yq1?RMMa-Q+N(vx{Y%c~WiYzl}ek3gW2ukcD!Sz4A? z#~41Fc}inNSqqT;hU|FGTCR>Nq z(bZJ9T&cBo(LT+WzQOKYm&j)@`$R+k8azav6k8H4Bt70v_@qddC3WwC;cvM~&w3cS zi`BkFcek7BC~wycd8ggbWkEDi_rCtMv{38#*EPtjqrn!E+Lh%klVsZ5-V zXqysKYb{LUYJ6Hrms9AF-1zIPf1kchw{~L0*a{G)KadDTma65x_p1C2qYSVG(&&e~ zKZo^gzrTP)O zye;J*_8ExQiliX?^~A^Zac-S&1D{`4-O1z?OxF zAd~ICy9%iJaCdj~yiC9iJJjcSDnb?)mvzsY*-ch!!1e-hmoff?(KH) z@+{&a+4MfcDdKyBO4`8q`m6Via&6&VDuUnS8Mf<2v!DJ5{R-m;qD%3Z{eh#{weubF-6JeR7DU{c+cg(r!&wd!eP zaxxs!*qgQ+%l@%Hpq`j`7ZLa z9(^N3Sy2I2=roz&%53V-Ld1rwf1dV|&n(PJ=R;Du0?7mBmY#a?>}k{@dl4gg>1FbC4x^sO_wBTb&~wR>+ahprSOQa%tRW_@2n$Q*I~wDm(8&IZ^B}5n&9eV zhJMqCqzsTb?)loh0rUH;LAM|v=D7-EnXuHRKjQ;rO@ds4Y-wKlVurex({Z<%I=x?J z7`iW(Rg)hca^Jhyrj1Z>s_LQty$EwB)<>AKx7Jz6^Kcz3XmaG7S!T~s2cVJaw$-IX z`Cyst^zMzj1GHbd6q>a!#Z8{riD=R%U~5sTRTb+Xub(0nRRU;n-^XP33JyR~Pb%Z) z?grF`z;6U#vr_L3)Va9DKL8%PEUU3*yuwTZKWW*KZ+QxJ9C5Tx`sl{{t|b4b{@y!D z1nMj`&XadBVv?9-&fMi4Q6@{NJM7cH*T>}em-TK{cNSeu9(RKq{Hzkm?!eYGkx;< zFm!&!_aaLipkiWhZDjLX4y359;nr9-Z+e5x#S1k+I}ZEg!#~ranKSK=NqnJdTa1w2Qw|6y0d7aXqV?;`tL*#f&|O>sL&X{8o>y15 zZ&*X^MXk8j-zSlrj_zR=#A}5>M@Cayj^Fh8A%=$A|ERKdrPhp!qL8(j8iNmS@c)O$ znJ)hykMrYrgnjTSVqWkyci&VV7@_0KR#0lL0@Pbrm^E9rf};Q#YTAjcG3@ka4Fne9 z_Y%rtJbOlvhL*-O_U3abH~4S^SR->Nu$GU!?=eRY#z<1~Y`@7ael!r#d~IAe@ZVRQ zDL?yz|MFYyU=&Que!-rZ)Pmi@q{riZ9EJyZKw%-@ydFkFr?yIj1|k|@c~XB7zH0jI zwK0boOk~;=2#Gn8bYzt_`%R?z8DyGxJF*ppHqPUKtw4L zbv$p{Gb;lkNEEErLMRKu<>mh(j<*#;j?jaO+sgH+$}&VT|>pNfskaBkbyPBY>+uDUZfB$Q1xf7KGQxtfN0ux?cY1sAk7HJS13PC4K2oZ+rE%Y_^P_bT+>g`KO`2aswdG=wDT@x zj$XijNz4E)+JqWs0N0aZyqUt|gw1ECKHO!`KFzc!RMjNw zwQM~(Y#w*GX+g#36r}d7rBMw4KPC9nw0xLOe`Yed%V|+hxd;HxlAi(kDL^jZYrIkz zasVMpXuK%IaUO0c%ocq&afndEu#ar@mmM}1V>Nrb-x>?d84V^POD8Vl@};!_iu@Gc zQ<*$cpn`0HMGT9hr|Kcdq&+xi`o++HSd=H~*&7zT;8gRIabE@J4rnT^y9wb~0**_P zmnKI@Z|y>Mpv&q>aS?x1EO|CD_{7$-{QHQhl82Q5NP|wdPpN}>u|mm}vC@=W#@~XE zf9L#`+h@vvA5OW?HP#L|HVM5Pb?eW?;YMebhcN<_35NcoP8z?2qTthuaJ*-(Z*qqn zQzgx(m{{MeYU76fx9pKWe&~}$8_``As{NT<%G0V)idht|kkR1#Ni23lHZ|h)P6dJb z!nV`SyGSTEGRi^%4qg34H+T+Ew$CPh$*l}!<#ByP9dDc$-aSB1Du8qY!VU-;QMy@@ z0}`Gu&-0m+FhwMol%J1YJ>Sj^JXtrYWtNG){d!V_X7oF4AIdD=2_#F#uT}XA`DG9* z<<#Xes}x_$4<#=M;N{Z|Yua?y+TP^l9_WQoK)y-zDXTI3%hEE1tv!|9VNw7_UdT){ zR*Rpo!DRBjlvUsSpt>5n&+hhz&RoL|Y{%zZOUBty`=)_EJ@J+=GU%o6v`M<`3lkE+ zuBQY+|LCp#;FaHHSFDl|-CVMbkZil?SQNCE#x2n^xC$shN7`T-Ckk7V^maI_`F-!A zHV!iLa3}(lkTHsPj_szI-sB8npH99tZZ&zP8ty5-SeTzE03Ohq?&w)4#x`!D30gmF z_CxcBZ5*&7fh+0}LI|HAZp*PWuJ#z7TEm+Al;rRuD;EXxN-_&F7~S@f^(VGW-WE{$ z{me23BrmfbBrgKLD=1eh>iZkNXZ;_JXM%NZ{NXJc*L|bds6`;SsEUEkU+}0BK-|Ma zp`SxMzc&E}8mVDUi)yGAOfYZ{WkAiTKWiHcWQc>jKL@hPIa}0L*{2`;%y}D-KkV_% z$2u>+f2u;T-4A3y3FPBgyOZU$n}D5VA=)|1*nW)dX+@Rx>vvhTP}hyx)kdp#g#v}- zRWWR_Yi|m^dWUn{GwdSx3B}&Nyp%JwdvD+_)HJ7u2$fXlra^(cYS@E9GGoy%L{bpb^lDwia;qqS&# zSG7qKA2>ryXHrSvCOb@d8;=!&8>!Awe)C5HajCswMz8I0_e1$6lfK;VuIr&Bmftgd z*;G&3uCVU?omq4BYM{&b6r+tlFS{(A1v?c|-&X$cz2&}rlhBLizsz$HhC=@1WWJWv zD^sb{x1B*Ln77b3FZev_GIENq6Q^sX{p&S-2;|il_=wt`3A!A+mitn-UE`{Z4qSa< zfF;+9Ti38%)?MM>kB`<31Swy32am^(4O<+nZ8prAc_!6QoaIHw6YVu#C0>i4H+`)Z zhGDe$gqjs>&hmoeR5-5rU)=@-i#-$I&6zA}FF%j^+blD#i16(5K#qGo^rA{4G@ofc z@_&lHEA7&6R5yD%l-3Sa_PF={Ys7tdO`YmL^5gM!eJ=jZS{*iTQ|6NWvl8gq3Ix9k^YJv;2z!|3g0j6dkz1ZRw=krzo*y|qc6W@={| zl2Q_Zx@;*7eM>io(-xYXnl4aExc&;sYbr&N z!^nwvvhFVdoqG!D41WPeJ7N0>XMBNTlZK*uIpZUFC85qVA1QwL#;VswbDy_N7{fUZ znNy%mu$|uHb*6-2474Y7h$m<-o zS7AbEXu;I~haSx->ukD{P%6tyP(QM_S!(Li`1>xf)t5mv-?-5YVpS_@*m|XT5wE=1rtNui?AFqDdnqRDNkQMR{o1(W#=?a` zXr<8F>tiW@Gm4$HD=m#?8{>%P4#$k zIYPJKnl%Wlv$|~aCm>|U))CRzRo<(TR?;{>*%uB7uXby_^d!ndFX}DZWwfeIRAGAy zL?#KP9yXcAl*`WL=4`iT*+PkNxp|pb0c(G@ItM(u{&Yq(=l_1G2N^vQ_ItPOpR$r^5U8{lUJ2@82lD#?u9Rrg2aPUj42~EL*A`3u0TMEpbPPB~2}% zav3@VAs6)(yyJ8;Fy=;VQ;$G0)ZUK_cV~*WSZ=*&1^v2fJI%6(6&zFW-PFE)a${|< z<`SsqTaVl9F?6MfTl=;K2pZ9jsLKQT%Jjft{=uW5!|3Cns>$?ZO((@+1ILAF9+om& zza3=VX%-L`3R2Bp#mL%o3Hr9QZBrnC4J37`?>chxqoU5|d3vuJkrt%Z>Z z5OOA~&a21`_vP5m&KVkrqlcGf3ker2yR&YqjTuc3U>6()Dym8g2bTSrLfjwC?DU>8 ztGooiGzaO#RD1vZEq`f4BF|tgN6Vc`hIAd_g@55_{+2{YQ}C1H-R=Of)>vebFrR{P z-Ui1(0qX(=oK3x6P%ygAzrna{UbAyZsm1V3_29@+e7cj$MF@8@8C`9H5^CuxhQmI6d+=pF*mD2< z?6e{bmRmJ{l*ysf)nd%l9`&9H!Njp+_JE+6BoEPqup8R~FFRIo(o-EXjBWbThdijO zXcJZpEwi$e{41Hh%zmx(1p4lyDEn~pVZRM>xL$P`G*_kT#{YKy!mP&hGK@b-Udo`> zXr$Qgpmx?MoSPBhn>aYAo~oa)6Lyd9>*Mbs)>8R#L#ymgkVX(Go+iqd-(DpQc>ayl zo;#IrdBeRjY6-sUTpOT%pQgJZy*qB``)xXw3(R0d4QY1Kv z_Gc-zfC=lYG3!%4Pe*n6y2_PIGg)EnvJi@f@6X{eSkv?ERMv3MiWR)$Kx|*ycg>+R zbpkv(zg$f(gO#lr0`j=*!D&j^s0S6taN+dy!UXCp2jizJ!Sg{%0niD<_7f`1o7Lef z`W6JB#Y`NuNQ2mPzke0@8PD-`^auGq$bU5binp}S^RlwKl&?2dc={NlN?^u-%rA)2Wfh`&;wh=`(}aL zHj8#44JlEV*QHPwmcQOhzHd^9=jp?I{(;9)ju~f{uy2%JpMK%|+gIoLCoQK?yZ7@m zcCC%~RS@>dnDmL-55|@qm*1*Af1XK!d{gXI<0cFn4iLnkBk^tFWM}VLb@53}dAf(< z3^Cc6OFL1rx-F$LjK7B^OWAu`x*04FF5G`5Ls!B5?i6f@HeLiqBbYu%_VOzh4l1iM zd=MuqKKwT8#%otvZjeie*FYdA+PG{K_7T)&9=&k5w}NCiiLHR-&;Lw2?L;ei{^_|o zILs&H^xms3CGbqGytX}XSbH>)*#At(n^SQxv>J3=Kp?{xOiFB zTr%?2Z5t$<#lX-XC@tdLwJahl2srWN@25H(#RcmsntnFswu=$U3oJLCI(Z0a{ooT= z?sQ(_P@t}MPstboOVBl6>vg}+M1MHJhTu9#h56LWI+MN`q$2*Lz}g>kBQ<*sIG}xm z&)+>gklO}c;1KF!V~pwJ@%u*NoP5HA7bqy5PXNEeV8GC(l2DS;g_99`zHbDRdwHK} ze`B5$7aaqF+i2<03}IXIK{W63K-B@3xSBaq>sEIy3U)M4N>Y6bKOViO@SI=y6Jj?a zwL&%jqvky)0&Eh|Pf*J`d?k%_T{KxMj1Y&~9}5Xt4a%c^cM0=R&=+=5gx6Qq-UwaV z9n%|y&tZexZ2!nDrzw74dt{wctd_ddzPZT#EC;pE{L$}#b{A>p+)MLdGbIH7lL10u zBvXj_OB%~&>OCegrtrc(nL$sSk$)1U%3nvH-qnpb2LCPcU|Sh9+nvJ$KWOLMbdx7O ztTine1pcJ@SqtxizVF(GP{z-suEqGZo2ju7NP&80#9u$Y;&<(gP$R+Zzd!2H%tA%@ z7)&G?s6QImNunLdLNkj|KllDgLww!ui|}chSjp?F{F4pIe|PM6%pR_JeLr(or=j`~ zvGL!$v7$o@SAgUEbrkATrb84Qe|47skmU1d0*Gqm`Asddy5lU+hMg0^y+CEa;sCN+ zy>SWF>^pu>+%U0k*~06j zj(zy%sLYdQ8?a^;&CujVVaS}E%e55mGy+UPWCN}>UfVc?Tb9e1HRE5kC!C?@481#g zTN1EE@&ksCWVk`^UM$c*_4Y?>>V7Wi8s9h0ZW7K%7$4DgW*nP8o)m9aNz*kd>GxsU zU%{r_GLI@Qp4{xWh3zgE-7wngMdvLE^FWHmSjzd8KGTc&dSnaT7F|8Wa7)$eFfIn{ z>&rBAys|1(bqn8Z4=D1F0Sb0+T-M>*l;3YM~rA_2Ad|4V~1Qr^`}iU1Q4TV zsU*b4erFBHY?%9s(+jlkZDd7E+l&<~wDwW6gvM?vuaMf`>u(22&z_6=oSL`Op#3Oa z{8A{qV93u>`{W}W(}7+$eB~8ip|8osY$%>J``Y)09zK6t+nuv9xIEgoK^KnJ4_E^Mk0ld|kN6sxK%E3@_f8D0!am>fVu^Y|y9VcEj*HhSUe-R|CD;A#P`*$Jn&``mL-_wb+rHTY;?Qj#+rltZ# zCwkXadsmZ?N_8B>G-&^C$Z0?I zXjp0E9IYIaRpXZGOO!tjn^PpAdHbJ*HNVsD;GKEH`1|8ve14h7B!hyi5&ol!o}C1A z2<|6pA1YDGq3FwhOBJWO))VD;j=^8`ySh|?(IPBM*jbl>@8^#yDqvss`(lSoxt}Yr z=eM|l9O4Sul-k%T)u%5f=bcu{o z#~9X~eZlR>bU7Ya8*O9-mD~LFbxa!{@RI=8r{tBS?Z{hT-I{}@7r}kTZsovDV}2F9 z<+V1c5IxFk{6k>UuhsKQ72NX!amx&Nf3bdPH{aa+@q)Vn>yZiObC)dc87P&L6L2-f z(mwt=@1ghX)DhnGsP1|4=lb_!Hyl;%@vgEQ-m*KtmmhlC!xnjW_k8g1;%khm^d~Qq zVqX(?Pmo_r-ZBj>BKSr=8U@`-u@`qaH`+D;Fdv%gQ z)jpQ0@r`P^08VnGT!gBqpAmGpD+<}_Y+bwDTuDHni)Z+3(fhprKK?GnL(M3F@oz`h zt*jDkCwP!Uyn)60`hJk3kpD`oslksR*olRN*j0@sS2)pVsIQEw%Rg!5Xs}lNYBwQw zSTwF6S8p;}_e8|Qw^B=01?1X~dxgVME#iB+lXqur;Q70q$NMqH!|;p6vxJ z={)QZ@=xJ`+t^0f?soEueI3Sr+||T+PBS2`;q zdYzT`3->Ihv=s?m!`e~|mL;VuGb-izc7tamGkB=yZCcT@_d9uf(sEg8E3?rlIy+O58kMa|0^~@|1u<hyKOlXWtW(PA=WOV&WzmYb@*3c6Aa!KNoSeT|tQ? zuyPu^W$)yRKdekNx^*AhyuCI&7Fk~Y94f5{6~EhatdargvQQaoP8M_?I&q2JWNp>t zXud%48~=2fPH}C?%%McRWUeZ%DIcRS_^Tl!!}Jl$SkGsjL~NP=uyn*fRMlO}5IPbc zqU3(V2naM|N^A$HG&!V4z^c}q8ueeG@>HZmQ>m(TdS;w`jt(b4+n_Zsa%4@)!`6)2 z;c%0s!SttwEfb}Vo4xCDTmDKUgp&8#mrAmg=@te#@GNSaO*ob^Z<~9t%)CbxhuwyU zUrQZ4sI=91=sGPYj#bzne`#PhGVsviL1Y$mTq+GmfAMxm{ITiq7ro2bT!yJ9@5(_f z#ETzR=SD)}Bzn=i%Em$^zGOz_|71&PJaD{rU>Kl2 zuTvE5+&RBS3Lc9JzXg6HqIeX)t=)dM`rC#7>M-1Jjb)CAeYWaoPk37!52f7s>yTE9 zzxWLYuN8kkJVh*Uv-8fns?0|bdWDl0=csXlosm(Hpq!iN(!kThivWKk-^Oh{3OmW) z5Wiz4K@#P?aEwVxwZ}53`4f{Hd%qc!F&|&ZQwG}yT#G!$3cQ0jVJxI;x9Pp(N#R8t{Wv=g+Er7RWJRzD;mal1|E>=h zo;dav?K;9rlRfv1xuQkv5}(W;>^ui?1W+0(x@d_-Ub8#Q za>a!8n6rA#x}tE$6DJXeuZtS=C7&ZjDrrClUb2 z_c{3qif6;3)>>WX?o^b@>$VQTLD|JW99u`sB3(~7yS#VteC(t^ZbGv|ET<|J`+mNU zir%%2wsg(Qrq?V5aMvXj4sk^6fV0BwGm^ic8{txOePHm3tpdh*-9_M+>RaEHD2)LO zTBTeOs_RbcR3+jWPU1`ypSVO5J{Ant!aOOb8iQ|h_(Tpq^gpo}CTE=0wS{skJA8#0 z^#cWE%ZSPW!MfN^9Mtt!CUa~0-&X8QiQXG{Vsv#p9>;~!xqYW{Q( zqp9d5Hst@)-gSmGnQiMJ5CTe(!O&4bs-TEMC{i^*!Z<*r zh@%n^flwT3AfZEOK_-ZRz)?acMClNU1OlX=k8!-m|K~jS$9*P0zny2Vz1FwN-tT&M z;y+$rr*|%_whH5@vZ0q(mU&2RsbCv?T3TZs!|zSL_FYaXB&3sYhSs<=Tk^<;v@1NS z^vYGVHT*2Cuh(?|M|E?n%*C4@$)Z76@8U0!%?~ME+oUQcKo;$)-qp0qJ*NjoxS@-@ z8Ju3ftxUOq%eA8h*WtI4E_gs7`VaG+{EdXs+2)=@>U@H_Q()2p@5Gld~9 z#V5Oj3j=i7I6cGWL&zdhCs3ySdg~IkPN1HQ{M~W(N5Bm-9<9g$zfkzyO-gPaN}?l( z^5~^9>{v};ofaUpvbiCzgFg|~`iorlkR!lFlfrQC_3epsU8(yr;6Ag~QE~fLnD-25=-p9|&A5Ii-6C*cI^yhvQqYU)ieJY(Kh-;8j;=*U&Ay8Cl) zng^)wyTxuuj9q~7XR8}jcN)yvOC_)?Xv}@Ht^lLH`hz=DWNy2Tx0l26{$+qaX=4wr>@yRXRY0BY>zV#8_Wh7&S=ohmz( zpr{2PX~{2YzE3Sx*r_Fp1mDH-T=g%*KaY+EmwN$CZGLu=r4rV4Ukm(1YeD*pW}y4Y z?@ujOH#$;;bLGj$ud68+Ua*RR!&+w#9?W>@jQYBSoNGUA_!;etT=-QoG)HOkFtTFd zVVMz3e?lfk&qn4-f1RufbJ$42xiKcoZO_gl9f$IoCEZ;*uW2~1A%vB%JeZJdBjM8) zCtaHgH@i@lrB9jPLZ@LyH3v+K!~sUvZs%_NiJSreep-(Bsz{NPyvnfC=3z1I(DIt@ zI8+&gD6@FMa@gkeVC9@-k#24d|00)gqFkdu$n_ zu1vFqgm2{E-%$fu^xMJnXLYLr=Xzf`6c)@{n$)AdhiwO5z=T<$E**Tf=l zTYHl-!xXLYS;6-Es;Lfn)fT`%n|DS0tz)pF{q=Kiddi#H?cO@zz;GSQ!``e~1Q3Gj zz)`v4`YFH!ZN`7-r`WE6=0O-D4yDXpFeVao8j292w=wRHlZ@1m7LI^nAmqzcL|dF% zjTF!+h_h0xRpGX1Jf#?c2vcU}nNVIhFIr>5o!{dy+<`5ezwKLye^+}xZn)NfzmYv& z3Tfu)=rEVYwV}*0hQJ$nO&U<$@=VZe^d|Sjam+Az2c-t=tY}(n6OI;OMS6OA#j!)l z?->028sD6UEY2grbYcKK#kyr1M>k(%Rbj$*PhUGx%VNjw;As9`%s$M~u|Yr!2Pk3% z=~*R>h}sPOBF9PoUe-@)<3 zI$>3)Ullk;4x8!{%_bNaJIRu04&#U-zr)GLv$o%VC2`B@hxDruUa8Yt{48}5=Z zj_OfMwss9toRQp?_hIT5WSegL@g@oGBHcRqv;b~@|48t6G@7tLhlg*ls8%EZ_#ohI zm!Ycqe6EA~!u+>9pXcPXzhhR8a8S_no z_SMkA`Gx<1t^u||4yCs3guf(%L|hhX?7?DhlpV^z`ijCYvd zj(7Sz_FlXfqZf8kUgeaXkwBQ}Vj0Emfk71&HNjh8-~MU?tktRP`3#0&0GFNVN{e?g zOb&HM>=?_Ai?t@VIjyfi(gW@BksJLpg=9&?2VuQEIH$&pAkUydqFOB6tW|0Lyk-!K zpZBZb(s&8La@$cQ?@AF6FG4O@G;=$v(+uf(tCoGZk^RxQXDVAXtD%SJPSXr$6DhXM zkGH3nH9{x5Bdhr9&{%FYg+;Z|P^@itk#Efwt{fcz(7Ly>&tX!J`2e~Z9!nQngY8Y} z#Gg2(|3@0SVt1!VLyd%|MB2Y&)Kj?cVap~;=C>m#jmY4T1l3aZs3XUuBAnWooHUOL z$*XNnL)~r3vw7mTW@gC4Wvqma!M%pcFg%j2hS=7D%-c7S)_kLQiQu4jSqqMvxb zGo{@z!eD4!#jEgz39YTI9-fA0M5PiCxSzlO5=OQvw0tz5Gen6u&ABuSrHIDXq3-9M zu4|xpg!)KbYoH^c+DBI)zT#mGxgP|38&@Fi9oLRd zOm4~jbLP3^=q3K5+3I*@Sr+-?+D^8cz}R_(M<|GDd>x+y+5KyFJvm^jZtHpLGHc;x zKxeylH_059&S(;~3D#yv!aIqIME!f7dVYTo%$}TM%)NOUir!p?wDe7Q)N7)_Ei53Q zW3XSMIN>q2p&q?eoT1Kk5~cNA##uwd1$bhQ;5f6ceZK?#{8@VXNc;F~CBCVP9U8vj z8a6js30G%-7gV%&d-VPA{n0P==2VHyqFr+f%HesyXX=O}$8H1K z?`gnM*eXch<}(?iyM#d2YEGf5q1k@t?vHP^lRlg}BHZ*{mE|W4f1_HqNC{f&JM{Di z81xdRW~NGmQWYHf!tt?(ntPXFlnAqgqE5einEEsmKp=2DSXGM}QD5{lgE#eCADdf6 zqPt+ujeIlVm-_nW8@S>7Zv*^C1Do2_BQCG6J?;N$fOvpBi>$suc)L(OCn*UA%B?hx z?f1|}Zvq0uooeGI^cmCH%IfD#$%wG%W6Pgy7?wph8^?mnWA8Bb2Mym1?cf!hq=m}> zJnJRLe^acfR?=*UQY?z*0PGe(t$Wx=4f6dWQ6Maii>KN^etmKg;s9!mKp35oUlf3_l;mc(KtIw@jVsKY6(5kA`#dsqrDxZhsq05bpqcHZ^$Y4)*$2f6 z3>s6XG1qhP<6=UHW(2r8gv?6;resMiKqWwuFQ}O@S-zo9DoOc>yfe9JnJs+>Vo}Gh zE=vzx8L)wpN_c9Y)rVZ8fUVh90yP`45mUSMTNA>-;vm_6Q7dpL zz(m(R=Aryl`SslXGrBYaZ4+PYTBKav>Pr*_u8O#y@NW%Q4v5wzJkz+4MT|EHG`zy9 znDI_G$>=_x7QR2S!i3Z=&bFvAhJUI+d3wR|Or_B>qhWDSc_`9IHqod@3DxO?VjnH? zE`co8?l!2XbW34Y+;N9}6ax)gu|DPB6FwPAsNO4E7KvE%RiOBUq)BKl~@Xs=xQVo`QGVk_?SIODW(g?PeeYBG_85O2E**_0{c`Gkk0(3(;kb~>iH0-tC-)y2C#RTXK znnQc&A7z5*mw;J1>Zf*tS_dnoWWkz`*J&oC+5V8i!CW_mq33yU-JPXN@lR{r!)MNq zL1|iEbEsN|i*2>s2l_325C|5X=6T33_BrXavk!(JSaxer?f{0yp7oH7s%1Mk zFXLO90o?2^(fbuVd&RBQdGl8>Q2AA)m8?np><6_24{EG7EC!6>RhNiqkHR!QHYWjV z_Wq}2qFF}#`luqR-~d2CdCJroMHIjQiP?yT`@lnf$IdL~m$8J#c^63K}?P7BSy;Jwx=)i){(X=|r zZvR*|U)Tp~O)fm^pwdgg&!;fF?ipl#A!^76HArC8wEK@eyaoRKt8Q=Gdp43+|27)Bl%Y&#HxN)k*1(HNq$ ns`Gjf3*34rlKv0wLWm%1r}bZ`j3wEFfRDMUl?l=4#>0OBwj53j literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/assets/images/table-wiremock.png b/docs/modules/ROOT/assets/images/table-wiremock.png new file mode 100644 index 0000000000000000000000000000000000000000..7113b186b663e47320866d27b38ad33595f21c2b GIT binary patch literal 37474 zcmeFZXEfa1_dc9Ey@?cwPDJz|dLIeVqqm3_y%TM;L5do^cYgd}>v{9@?qe-x&NrFUHs3}xnI(Eig1%o1q2@Jp za~%4GUf5+n7ZN{k<#E2neZMiuR--`H{c3;M&p$kob@4IKznBRLnIk2-+)#?jtoL5s z;vVoLRxOWvq#mr!7C1#_A=RH&w9Q?Qr1iPADG5CxrnS(u9Qby9B7y$HJ#0q~C!udT zQqI66Ih_`q%-5{`DiTP8_B+0cO-?l#e;Cov`BQ&g3|2Gn?FI5>oyN}&+?@a7Zf;gq z^NF-zc;c9cs?qV@#3WXmkNWDzA&!wlsb)==ux=c0_H+YQPEUVoO&odik(43-j@QZ7 z8d0rG%MAZ%xtPzdjSLy?u$evVeb4>cXwQH_^O8a5h(+m_#;Lj65~a?>*Iq&uH+G`^ zoV$tz{aladZn#(J911|z4H}4r6*kJJ`(!@SpM$@X_9cs(W$V0x^l;s4U|@7LcksGb zFllk(AZt#Jxu+p$woq`qh~o{~H_1iYyj1C_>6uWpTfr*x;+fZ$mskeut>^Mb1e})d z|GuvmsF|Mh&4m06Ht#~#`l8ECwmxOi9n-|md)6K9C@Y?es3*+iP;JQUCS#$!T0UDF)w+AsXB?qyhogE&N2tr= zq#f@!Y_dwartYYoG6c60cv2I_@ThstS1r>v%PzIXZeG2<>-`e>I&aX?VwX!CeN?7v zVva}s@a6G%3s{uX!i4R@n#tz!`3N#zVrPCg@j*aIDLFw zw&A9Y7N1jKiEV!@0h;2Uw%A>dPYGlhRw=3|miqEm&UJ#pm^CK0_@B@sS?vIrqM~=CILp2K(P@jDRS!zz(nh#u zt&@1j;#)S$Rw-f(*PhVxST-7zJ&vR>bBd&s`5Pl2ih47kl@w{+_kL3!w(78MNIEGi zEQ#5ssUH4l^4zX<_A8t9vP^OtMMSIC!wy3Y^?MxqK|-LR|Q8;Z6CM2qi^Xdc|W+ae}1Frn_?5S{J$Rzd0m_ zaf-os{&|)#GY)A-N)7{!;`a5 zxCjkV9BfXn8W(X1NT|YSnKgw(fLzXHF*J6{Mz5+XZ=RjOII6*O$)t1A(RX!9K(E-z zzQ*|T3PK+j8{2!wY0jTb_xLTk&V;#2~JyvtOI#7q0CjM6OG#OB0h|) z`N}S3vM_VGr{!!;Q?LqhXV=cRV8a87Sc7a>-x5P>x+t=*$DTllrhg3XFpFFz(u|TA zcMmVpS6M`IAdF*Xu4zLR6qvpE9$b!ilVzx-K0Z=YQ)V-~wl$k7PGR_O7JVq1LyJH5 z+)3YhjO|}CzRs*O!9-ghm{(isb$BbI(LU*@_8R8NBN*b?2l-Vw2nJ%}IM?Ss{Yv~K zw?CDS0(FK}e2g9PHomXWjvtyG2{%13Kz?DA;F!;>bvmushAOzxN4+3{q6%J?`%2zX zS)*%mD+-P-m-DTM7K=~kXrc@G zF=E+@nTgpcL?~scX}`wdOC2GYP14AsCZEMZ8(USxc?{Lvq*zC%khO<@X~%6^brPat zcX5Q(t0X6hG3gX9Vu}Azz1?0oNl!svh0=-7_ku57RSaTs5YLlh!?_3ED01sff159N zd~RjNUTUDklf0y{M2GBUHId{gEe`RGqjePhw#<RDjWh#OABdujUHkGG%ZQ_FhlyWC$EdYkGeN&y1Q>oIh#2VIO;KVOD znvOGFWB$8RRRs|6ZyY91)^(HxL=W&hb*>ZV{E?8^VyKBp6`ZuH^s6_X-*UDXwpa*Q zSnxfPRb~7?%LHK{LAAVW&g;QJ`N+qPSBHez+@uzeS|r9CCi7H(^wgfFY4J#BrmM-m zzrlgl1gJn6iXSek*4Lyl%ty%$^z^k;c@AHFr)p4Vlk{9@OMc`R6`rjq*9F&Rgq!CQ zzDo2?J<|Rj;lqtPf0p)liSatwP%yGf>( zgR*Bb?r?$Cl}9_-u4^E_ChccaLPJnl|IY~y-5^%tl|InZ5$RpH$6h>-oN!SO+uCQ zr+~fruI_Y;q$mDoURu-$L(zp|{W|fPrTSA`DTK6uYgR`ov+eT)KHy%UEqd zt1<#}UBgD2M`Vl;FzxBW^z*q=c>~|RH*~Bx%x_5gZ5%95tAapXsqHH#ab16 z%fXiMT4UP%4)Bx~jnM~5ygv({4$gV=btXJeEiFy1(z>7a8d+WEQf8}^Mc5O2Uxw7| zd*Y;l5S1L=)+ro!JVK|m%SBbyY6n@aL~&$5EOt$;qVB;lZ5Sufr#3G(0^p&eB--xE z@QNbuPwXq<{oEv2cdg4zwWCY?f@ennNRAa+`H#2qg@pjvwRSnI=9faVnx4PpHEAsn z2979UptJ_ZZ^e!o0Viugg50|zp=w-d`VnS(&)WaPSFri6M(O_P^|+G>lp4gLpMV@# z@1w1yKQ_=rew$+-gfK-t(R=lpsCVj#&_v!17M09^u)9z=7i|k~BI%>BOat>r%iDp& zLxIr)$vpCqnN1Z`LI2m8-6O;yl+s^L#p8(c(>O(j>1^L2_xkxE zA*4y@QCw4pdLwi-h0AsENO^K$zo4^x9sf`9c9w0g>_1+TuWK+I^%!)ZzV|3%*KuR_ z?e`A;y#5!C9Z`?@5!?jDA0*EHYSuUv&dElzEbM)S*%kETk|max^@lqVh9!B&)t>7r zVOrE&8KUiWrc;UjC(!ZMZ_+o3I2+SdP9qcYDgtf%6V;`vasLLoAW{Tl{XB@l(-!B! zmAcsAD;M@g^Jd<1u_hJSsQ!ld$q$u`b<>)V`5_#*Nx$Jb4CHXJx+W7cRCIY+5hI62 zhw5%xiPm9>zm(y&PLuZf&xnIlU#VtLSw7J17uaR(vp3*#u@7y^W^i0Xb=NEJu8^$z z_pfbjO6GPiQ+hr3wOxj**ZZ|RCqCkmc|a$~KF+no#OU;428u#eKq)N_K4>@ej!flQ z@IAoz_rI?0=c4~AdTK$Qb}zk0bhJLUIDd?5xLAva&|I8c^-V5V+q(U*IYo zpJHvV8T}O@>VDz!Sv9Bjf*Z}}mkwcN zE4(ModeB*bq5{0#uuP!xAHt78?DH>Am=BL8r|5k2^d}9h+<7x`WC=P{5)1aE#wVR# zjT=sz*^w+b(E;iV{l~?a>S9fDspd;PIz5Ij%MA;4-C59LF!nWd!&kHWG`1cb<4)ta zuk3?!Lwy_@2_UunJHcEcVSCNxXUF^AucA_jPUNp5l(%-5Xjdv3T41 zY{L#q$-A>VeRRm=^+~Lxq1by$C-fO5c91NL9@yV%{gCINS}w|D{QbDIzej|vNvhc~ z^HngGtRR1^Mh?@=Fkcj@%|n5wtc~Rq^Z(ido8nfnq;rqx!=$51&2=qHIinv~;Ox}b z7_zY3QsyHuqU@c7CMUI|y>Q%Chsgv|%yTiP$su@buLbi8u|@5w{d80d=D2akru`o* zxuns^yd$X*ts+Vn1c<_J&k7j-ML9R*Ue?zhH(O$A-$A5c*_Rov+pTHxdz;oV4xch= zj(EI&;0x|Uv|JO!DsN0Y@{{9(T!#ml2N%&xp@cjp^VzD%vHtyfHC(&O}0= zThpDTWmX=$@?`SYuzKBBSYlIXX_-x2l^8b=2C8c-i&`YQQt$D^M{`RQOcb&gc)|^D zp2b(#3pTV8T_#(W^$dtoN!J2t%oQjFE6u7OFj5Qq{$^R?`Gg$vut=!F(Xt)h$`ZKY zQzeJu&&196O!0inkBTFAoRoXyi~sQ^Y;t%xK>X>`e2}tBk6COx+TDl z<; zy*mJL7I&T@2xhctN9!Km&xvO@(=5-Y2^pQsz#@C!?)^^7sbu%5S2jc#e9Q}}Hj$Zi z=xduB(TknEeSskW2AC#wLZLDs7b@wSo=eqkf)keGFLs%K_KCeVPs`EOZdfkXF$p$@ zjQr5qL>bwI?bG({v#uRn@q5T%Y-*byPAMDitYA)38Kw=AePihGj-;V91QF&P<@W|a zrQRb;xre>_29murh5K}pgCUF8Zs>JW>2Orv=l+_KQ=oNV{5Umx)rnjeR&_?X$1m9? zIac2Ypul^%_YX4|9}V6t=M^N}?bM^yU)~T^wz@xB9TZMu$6Z?#TP9sfmHP$CE->u- zWw0wp$)e!DtFjT1k!7;Ihom^e$$ppy%1WGO=Bq=kAv2ks;HBl4d75IE$#^UOSzn$$ z1=TICk%^;VoXeoz0{gZ?5>Jv8HZLo7TRc1Q#z7v4oRPQmoO|wC=?v7gOxT^7WGul z2GPC#NBlL44*$i)mG$M==gx8e}06r z(YuQJ#|Too$wSLW?GzzqH#J#>-5A*_Zc##9abK^bPH;P(3*!{qD?%pQ216A`s;6+5 z$%+I^=4hc3l5`RU+}Y45FLz?Bz>1bP=e9P6zUwP+AyroV60$~F;`RORc!byC@6oDo!-fje{-2@4n1V4b+V~^CkXgO3G0GqLqe81>s>(fV z8Y~9KEfr9mrPoXH1|9{G#>a+0GQD2VyGwafGo|7Uf}Jn_vq1(c@_qy-kG~QRyML^D z2c^2}&OWbuuNjNhBvSK=*~`fZ9aYCcwPFg*2P&S4FNA-0pc3aDl29yHX@JBN8weWwvAoBW0l8vul#k3Gc*Ip}$_ z`WShk@>xrrxmgFw5RdzPg7Y3$Ek1=ADWB-A1_LLXNSYUc!xX8aVP_V=Snk51p&qYeNM| z5>3DIY@w@+PxzrD(pOwp@U+PCApG(B&&=NF9c`aK#i5$EAE4t0{TqRdR+1V%wH{>F zPF>t{N1Pr7uPY_OHGuAWvpT-LfUD>HE;SKE0%iDB8^6zmJW|ayOs1d2CR@e?AMxp) zxMQX${*VwKxtoq6e_HD%IYKJajDZSW8NRf1gBU)aF~Rt#`_WB<_f)X!ZjiQF!ko0dXo@3@l$Ol z$1AUA$EAg0%4UbW3)#F8M>SV<$dEuMhbgKRq&z#k!eG`m#3q1{O|hOEGLXCu-?rT3 zIlx6by?kEZOO0Eg&nrSGxp#>uO|8%qNQs{c#=5()skKy^&6lS1Gt$HQP23{bGn&7# zMki{Tk8H~re7gArF?XF9u42<=qbK_hrNRBgmQ7Mos8oW{t8w!a7paT~dIi3B&zl6n z5K2P3s!zEK6#Z-llT$GAi@_<3>YW9aR9(e)8Yhvi%;)1RTz<@RkPNU#|A71^XF27v z=x7_Qd^X?OB^x|sL+HyQ2>BcWl3*6lyu;f~Cuud7gZ@G_5kQqg=whE%yg>gZvN{TAI+b+9Z7VVAI?#*5w-Uh-<-f5;${SWWtJSF>?@pB#Caa|Vz< zrHF-RNE$q)<~7-)E?wDOPrVjVNoe=7wGTVHB30AdaI1KatmcZir@=h;zC0N_LuNN^ zxi`9XKY-`C@3YzSQEGIdaG~6i?^fR?s)xLuOQ^s8m@mXPk1E|%WLB->_-zP9)tXFu zcz5;eiacL0rQv1p**#EQMQmR?!(a>OP>i`Q@7^o7G&^F>{n5bcd+{t(IUU*_?zw2U z4aVRH#xLAt&Wnug0ZC$6N4Z$Yy#%C!RAew6Uc#HG|3P3eMY`sJcD5bO-M5S8URKxq z^1^3}4g>9Sj~7Bj>=D?2a$9{O$L%HdJ4J%_ZZd@WA5mFPWlq+0e}t46F&OLn&-{AR z>;7U)r33T`%Ifp5KiOWa_#%@0Tn1^-q&gkokD4E&QuTn!`#oO zq+fHoZV}H;dg;@m;s8CmsJ8JY3!b@VHs4nYGO8Bw@UcjfS)*?|`q#B-&>->{8Rk|g zv$fuQZase6`f%&{2O8y(A$`D#It!odvvjypBw#DJ4u6m)^jsmmmWu69zCGk#ayTg6 zJe5a1YBC{kaq8d(wDB#b{4L4(3l7;!SM{=o&V|qRfx<{-HlCNGl{N*-%l~0Y$MTcx zdC@ZahLY9-Rm^8JzZp(VWG`ENAUx0x;w;vs=<-^vTu0`Ou0g2u5~3citeFF+Bu+x48+DP*ChaV6XNro4Pi3n7sYL#YaFq9Seso9NMte@d9hBeo3k`%KiP=L%_k~KK@yN{je5GzA+zvGkWx1}hk5hM*e$1h+tAc#@0OSqd)5@;j zPCjeQKM`WDNd;ue6X~rtbBi{uF})L)sy`QnmCozRY)4wc$aYQ%+VPWsYZiHDf}m90 z#UVo{>18Qbu~ORq#Tvpe|EJ`$e7n27LaFbw{>V29^l7}jwJ*lZ+?seFlh8BX5ZbXt zv2?nZT+6gmTX}|$BDuKthgw(Aune9){YAI$)xKYVs`MIzv3CtIuq`Gwh9hj5Ocl{% z4eI5dwhM7{QM;61p;jJ?ZWQa^-E*GHX&ZLJ0!UgV(BZ8zO&SWp_Fall=T4^nwVPB) zcgZTL*jJtmF)fFblrd!STr!ik>icUu5WSxl?X=0Tb%-^dCw{j)Yo2^9kvkEdMO{`g zY;bVmqHIU}eq!<#|F#}BU3<9hz(l;Nzk3x_IQyh+HeWn;uWH>Qh72Rxvz-6@Ee?gv zQG1{{hPlrZ-p!Ug`qi_i-?u|et9w1TJbbEw20uE&6;0iLZ>fALGGkqM6cU-<3>S(~ zMVDWRdT3>5|C$jSvy|2)m$Msf5z9ld^udDm<5j}`E9(2$cIR#E zy~BD9l9v#T7MH`&Gn8442u!8ziHf0bR2yD*Tnj97Qk6kmA&wVquRPhieiqiIJ1}H~ zbR@<@L<6+YEr?OPX#M);Tz?`^nR>K=+B{Soo-S*sMPQ$FywK{@3+n3V;%Xp!mS+Mk zmoaXkJo1W$6mYyTBxyvwL9jSJGHlKzsA=xl5>3>zG~5CK zdF3CI{R^_A1(cr8_Qsl+aQ)kE9LQCYSA6JBHz0_QGr_87(2EcgF z+pO6?9DMfYF;sCegl7|b$1FhbRmQY^$B11M1%6q%WGro*d;XEG_Ne=JcUk))!Joyp zE9LRU=DIaGpF~^|KnG{_dv#5h>CQ;QN~w|IB+c=?pe|7hb{pJ=W>ilgSgUf%I?*hw z4X;=E#mLdk-z}p@jrSl36K6kSmM)=hpy;ijoss()mT%-33-Q%r|mRL$ThMszu?~N+jf4PcEsFkHZHe>*Lq6Q=L2Q?OrUaQqo0WJ8c{)-u*lDqsZGCT<)L%exl(v9wEU* zE+>Y}jw@h)|10QVe{|EkeoMB7W#;-U=y%gKAE~m2vwas`rou;XuqDZHiCwYdEs*qI zZ#LSvkC(xGr_!bHTHbjiXN*fYvl3iCOmHFmB9@npzx2llJ|0l$-;WG#arrL8xXG3x zUTRi6=HVT{zw{wXUkebW+b*brlSe-KouyYe8tl0_w@+AxEf;8@iB%=h#xB!>)tNkV7a^N99SO(^t*1pa+)49Rzr-xN$8 zVX*$ZPPNop&%lz^p`Q7pOA_>C#Plumf)aM?%eSNf?Y3iz|A-SC+Y_)5GG~LI{?<%_w zcLqMuIJ5n(%rv@5Jl}ey+@~H8ZBDzIg0VOeN81%)D-)=Cppmdpo$+TfQxwZ;G#{{W zu#&1C4`)3w&>rW>cML(^xY)ufI)m^Egqd9zeeEu7y?J%gK`W|S1eBm-O9Cb)1wcx8 z)^=vMd#C|0L%Dt6Mikob*m(+sC#<$C%F4+uuBCD89(U>dL1_t#0cf%d69Ne4Eb-B* zkOVs${|76WmE)w!< zf<~$4XK!h=MI{P_s(2nRt!-I&C#a%y#~ZcFQ(w_)#B&uaa~!Txm`iBdB~9s5LadkMbOPY)_f1n z@cpltEw>RWE@IilKoB8icMUxm zed?(Q(dEDgNBrdjQu_`ZSko#^D5Tc`24h4kIxPC;x@&-tW7zB=)%@#u<}uOuO%uvE zVom=YO~Bi}eA-=|O8qY<+ZF}SvUoU=^mxjq_%{4-ZdUtjMnxw$0g0bM(#4$#{-}aN zrRXN@wQ%~30C%AgG%49m@tD5QopG_(pM_F$c=PfFXWmwTZ%9s+W|vD6KvaKfuqDlB z{^l3oS`J56v?{YIp{EwLVex!6Gqna4dJa@LUg<{nP?Y9_g<_{&-foM_s*XRA491po zFAP6!__1`h_i~q3)ONGu)->`5;Nl`8KQux8H%m%%OW{gJ6y_#bg&_HMCqOp&0`GUP zC!OT1T*&J8?MI*`%Af^NHWggu8TKrFt&Ms(9n=2kDo z;>P*eTSU-S*L66O<-$#I&|PIfYx+CYkzec*-p?O>KB*95?(s~*9^7P>f(#Czj_Z2G_@dl0S+LhEKGijU{BROI zM?!?qN3(K-Qj6k;PqtjTzP(5q;tiL4-o$^r7~IWtd{4Z9Yr_x4qFSf;B&89`4eZ9%-*_z~K$GPriJ`I*;0*3LY0AVL!orKKJe`=$~lz8zZ^1++L`Jz9lsnlc65NOirms|?KnOlVmS)Y{F6WAB zQWo@I0FF?fu^Z%Tio1EVMvN;Axi6_v2%hTkwTvV7&JfU3sxY~jV#LQZ0t^G^q zk^~4r2mpYg@MCbnwFO0LjbAYsyB+Q9BOr|l)HOX}p*&yU<2u0ViN0wB(ZBTQ4!&#O zYJQ;#`u=uc9r78V{PKu}`WtEH61%Dw)*{3$?H%( zAWiMIsQ|*JxIDw$1RcxSs}-3fSEdA1OlS-A0PG!Pr_h)i1ilp~ z;r5!`&IbFdZklV!8r$^vtR=#cBCb4kTXFTi`=!BU`sSl3BRVWYmJ49ZO=CpP56*ra z4_@*LZvDOWN(Gk<$Do^%CQhurpphzQmK9w->^KR`YomdZ-=duWBRu#6yu2({k9N8^ zYy3T)k&C(iu4zmMW}8;7a(78|TvZu7(USbC`oF2}tlQ6C97`yf+K*^5VGWPwhUBde zty>*0Z9;q*ljgk#e=e6%TS_@UkiXC?Rw6$XvR2yJw*^z!mE=K(puf)=#9) zLi*})F|d@N@DPS9QBNON2d#~ZdUZVv^A~xN&9#s5U3}C8N#94+i$#crR{%;PwOR0g zmy=fUbt&MG46F6;a+JC#IFh0`e;?7Z@M+Pe-lC+`QU%xDKLrEKqTH8BuT@)3RFRh_ z^=P+mRP&tC_jgginc{nesb^J_bBs~Nf90ui>E^+YOUeRPWOaUx;!l4L)L(vl zk>pp+-k^=ov>M=KonR+h6r8TneHrQb&L&XV2Arr*ufqTc9@Y)0g4a<9-S+6}%8!lZ%P3-4Eoonkbi%)2Ca-rZ=5f>D&A+ zGR&6*{lJ%NCVc>*WX-?3tB}7OP+XQViloZnp4=g^F;9Kpro+z$*i&=GW?INMz!3X% z%Rj&@dJ4Q$XcF{avDd~LrjBI%_37WoquRh0uP7^LQa>Tv}f^=JP#xA@2 zm;6j6x)7sd%z#?Ms0hNrk=1@&9GRdSBRcMm)|unU)V66Mw{vot7UR}cYQEX9lWvM^ z1i5QKcp)qJ&!z9${~r1w?AZqcBQu$y%VxM?px|dLcgVx}9(d0k(!kl^z9L%KQ4bnM z^zbqmS)h{64iXOMJPZ1DpNxPN6nlDSN4_wRV5m3x1esh~;*!W?v`i}33wdC9eIJYb z^xJhE&QGkeV`B7aG`c@RQbsTYRa;Yijs2*uq{P9b^9DwuNxXzb48mZnIAvYWzBBY> zS+f!JO@+q%)EMUDQ(xD6DWQDH?gmBjX9kx|R% z=t5G@No;!nj8qA>VUOd(Ck%h(iCB`d=>5qjqe`Zhf4cJBlL!Z<0t zM=v&S^K$V%{?a24(~o`}f3Qek+VFAhWHG*(_%W>J6+@OSh-VFu=>*|s1Eh8$jz2jR zLg=ItA`gDOMsL)eR3dF9*|z3~vN|ehz4i3V$rc-&-Ip@vf_Tus+2I*_>MPIM-Uub_ zJ;ihmLC;|TY^x}x5}r!*la?h_REY~D zyvhEj*gwJFz#RRILd-}bh(2@`$}ntI-70wDXpAJAgeFt zSoZ3RM`$I`n?w#%CKm$>5gcyG`5G%vKYi!fze|DSH7qFA+oI%Kep8#*$}>qI%{mr= zROK@Ir{uhktFnNNp+*#u^3N?|Ja8YoB=CAS&hIIo0p-t~(KD9)ou&MQBg><@y16)` zrI(8h;U0F)&nTZ=-B>)r6#7?Alpe0aT~AP+$Hg#3=*1_N9w?Ui0`q7&<%#Sv8Okh< zQ6~_D4i@xuCEr@M5$K8Su9Tr~@+hk7B^Vq&4}^6GVoA+OIMH6@G}4K~o@FO>{EJZse_Ia6r% zbs?XvA+dfy#}PCj7e{;%CEb-D*;Kkr-y3>^mM2OTRZuc>dq>dbFhO7r^p`BPI*{ZWz!ObYOC zTATQig;%ObHxC@J)G=#x?|1R7gS=t<&=V?TfeZLdnwL8D8yX)1452h#c__wcNXbX}YI zrH|zB*S=(1mEEeFz8;l9Wr48V&ZI7F_=3ns^C{U#&KM?al2eS+T(9$Uq}pn$U6AC` zn-ThAT|jw0**3X2NMFq`I2(xirmZF2{LCjyoY>gzyxw00gr2g%^2-C9t8Zy#`fd?l zPsy?Ii{7{;FV7=Jc5+b0us?p_dzqQ)cMNu^{)cgy5S>ZSMXtY5CJUyr2c~yUBnb(X z9m>(}bP}%GWygb3&2Ld$DWVC9A?b3i7%>UOHL*ZZ4X9^=cY1;EqIVJ_z&=b{z zeQ`MV+{_0YXg*7vCXmo=!?O$os#-U&yPzX#SvFiYJoLqGmAk5T>TEpa3t0?sZEBb0 z9gDuXc)wlNlDZ}RsjLUsc~JI&!bDr5qt^@bzzIgD7BP&f(*Lm8a>8KztwFKaqwn+M zy(`EQ^h~<92k1Ks&au7U^>ms|G~A^G=P~6huaaiUkO0=H$DiL|*)de1s;m)~G+^VIkr>DK!&|yq&eG4yZ#O_Mk8CaceQ_ z2vM}l=dY4YUo-xAA5Z!5?U;ZAB~QMY7O9N3K2Il;Ayx%twJNHpvZaOm5}zV8GzTwi zTb_t@y@g?yaVE?fm5iv=LV^x54UhNsr@RAO0<7dsMEk}Rl7 zzD<)w zItu34K-)Egde4YrAQu5zVF>I^&j45?Qgxn2)QbqLDXV33RdSZD8JUVIBVUep)~vJ# zNagyCnh6uQSZig({joUO^5_AITi9P+O1m`>ATvkJ=^QUq-WUpgfM<(ix11eL`DxcF(FeF&a3=gBMuUrCyF1NB8VCbFE z;UvGxQz&wExbqGOL(kP{jeI|V?%cBg75i_gAtTwZKX|)l)V-}LmDYbtO3`-}q^y?o z#9hB?%z8bjsR_H&WB&#SXc^_X?ODJ(GGkVB{(XWNbi9b$5V|?a%aB_ zx))1|R%k*QKg^BSfThby+;X>sV-l0bddrimMo<>CHX^i3MnMQMJ%w?p=63?(CDOE3 z!0V3rpk$R$X`--cp(AjhnwgP#4!GRu>GPKFUFCFRrqHYsF&c&+> zZ3A#uvvHvA$Tcu`mXC-(;?@f+v-h{wM3C)SmIJ@nq!X$Sue|sZW6e)$*|@bx+R5rMNQPGoq}*-)R{^r5v>v%>wABO_f$$%-%$P|H7itWsjO zcXAKvmF7*|y}-I2J%GTLhKL3rBfZ(-(PgSE)Gs+lSbY z2|>+Buz~MUh=of^x|7RIG-5upA!lUg{CdVfxZ?rjg8BhPy7)};vCxZJx@u37Ta+Oi z%8v&pX*pAsD>&0{Eac{TpLVm^fcu;3QT-KiT~?13e593Am(2#_f(I2IxUX?kSG}BR z$@mB9B)t37t&#z!J{i7Bj0cs`u8tt%G6wkF3#&No_(Yq$c#N)!Y^5cE?+6-Xl)0q` zJ?yEbBexGWK45;^q6*CKr_$c`Eo|wxW9{d;MC%l%qTQ>9S9nX`36kqGA4z#em0ikv ze`AUPLFH^}D%bLqb-HsYasCsGK5}C6nZBFJD5Heui5(bp0j@>|c*5;WR>S(^$BwA0 zX461Bs|$iYpPNh|+$XAEI7d7?MZ^mgZ>zrPZ?8Lv&c{2}70!#38cDA&ejocEFKxpwqBuY)y1E z=UDdST;N^&r4PuTHLs3!znrb0R<&fzX6F#(%6kPPs4lAYXjOF!(JtcaY2NImRnd;q zqc_qJFA2~V7@Dk;SbGTv6;sFUA~51XpJl4LV5#Yl576SXJ?KGR1Ue%1f+bT%tb~%u z>ft#-V8Hza{gK8u-?SIo()=-2+x7bL$AJ7fZ%B)t^NVffpTB82ZIyWjPfWT_D|1iG z3BR!iP2}F8wD?OiM#ggA|A)l@OE{zQmcp06AZdS0wRF$B3zhc9sfDAZ+(;Q7Th^C`J>D;z%)ax%G0P5?ueW$9O zyhsA{R&c_zwy587$`K|Tmf7fD{GbKdZ}gY-3GJgBlL5t9yo z&lu$RkpBg4aci^Gp31%@Oragio9)aHVX*x~~r@g+(-ND?aW-t3#yVR^e zI*0zF0QunNn@<_C*m`lwM{?pq9iqBr;~;~H-qf3rq)mdaAvn4?Bz}wy@&}`jKJxmV zqhbTFMJ`H;;@rv`u&Zd|j;P`LUtM!Yxo%!%FfNZ-k&4&`nv8l_XW8?nCFq94VlU;G z4M4lU-|X(YInHmwpnbY+7Wk1x)X#olIH|&;&v4=~DdhW=Enrn%*2z#=BEQ-!Owpne z{d@@wmf;)>mBGAOhPD?)>eToO?IDix7ftr2icv830axt};SZNT5^fCuHgkpfmgcyB zxwqqt&w}VsdCuI|hUC-xmg_5@=Z>;>Ms{LF*;fH|F`|F$c6=q$_~tPSuR1a`zy%0z zd2FI1U5%Czccy-x*q-s2xTtQ@#4=6l%Q^0HH?X;H;w?gK=Ki{eg-6&DW>+f13{A~~ zU+0DOy+#walb-n;@Rl}D$_vog8Z&9T0|E7{SF%o?BvdiAcE4aRGj+r4b$ODW9{Y?LL+Dhn%&Tug?J37S8NzKZ>E1t(JVikBlsx5dlv z2kqc;Qi&YPCe|2(`zk38FFzLsHX}i|z5%@kt0J#V%+!3c=Scpxki6_OEYXh9#yW~R z!bGNNhca194KiGuNqIvT8Oc#>9*Momi1igSj^wzJ%J?)sGxaQ&d?vV{R^=6GwMDA@ zfPZ)Xzu~Ry92XEQ2YP-+6Fi0F#P^jiSW4lXGRSkF zxyNzB9WYfiH4dir;I(rfEQ*!7i+wvjORqh0F$FN-U@z4wbp+_HqE1{>|3I4!*cm9q z?+>rSp?On(7P-gC6LoggsDqLK#RtAP{jY8bwxk$s*5dThz}?#xXQL46Q3vhXj9T>6 zxJUy1E%!j!wPh6hyA=t2(fIAVxLCwP|}lqe=G^eCLQVL9YA7;y%2}g#526$9nissyXD(HSqorlWP)S z1ol@unfJf%4|x{;2s|gBy;`Iq^53_T{24l%lKsE+t3ywz=A571+v6KzXQR~M?F#|c z(Du8&GRJ3AzW{*rbzqVYn2^Q5RPy@2?^gNV5XAz%!he2FnEv<8C;!=t|9y4Le|F;B z|CJZwobK5ip+c%W{twz7YWy$S{?eA}rizk8t#?GgwV;z~1 zdjN>{?rZQ*Kd*lI5)nxqYsuZ&$r2>p48~@0l2D_wS4otQK6qldOx8ms)M|9&?DOd* zj@K2Yz?6-y@ups-Y5RWYeID8u7Ex(~c&wPkK&$5N)SS!V&_KWXS#|dJZ(fYO3orrN z4dm_7;<1%e25Al`l0bQFKHIj;b8JI@Vk(RV>SM#O#(+WnHu2p>C@P}}sFZ*hA|S#TibyAcsDKDa5fP+=2uLR&H6$nydJ*Y0w9p|C z2#}C+&x6jp?p^EsazEU4?_JC16Oi(pXP;eu`?vSmoI8nT0azJd+&Qf%|k*?l}99XkMPGw)9Af}hUMyaKx7m?R0|Ff~?Y)x|Y&)od#{;_gGx z$erW+#$UYh;9e)v5wzvoZqJ?v^6NdT$;j(N6+cc5dfc2EfKda@3RdkF_;;YU>daYJ z0A?~|Mto>;>!nHSS)|BCP9oq7lQ`~TU zq44uJz5Sh}j$9&`2mubYSr?`euY;Z`ZEr^vKw{$< zWf4!NCA(kPlZCS9gyRy7!0>{$Lku>`)~g3-t<#jCCzBZl5lvP7i~vkbx&NH-5PLdT zPspfo%mAL=_OVDurEB8?-CCFJYENDmu#p@ha6iBq(0DET9yM1(a27pnAK7Q~hNwO3 z>)MX(!D#RQaJEZX#jW=E3ZQdSz1p6~xCW=U+ke6;2s#)ZbnsmJ6n0{=S@K*bG6_1{ zLIMp>U>Hskr@yIy+vj=mIg!>L`L^a-Xt~cu`E7IWtA^ANBjGBi%(+c}(1;MCb!QK2 zfxh+naT-XQ-n>>HIkT++!(C8D!>!C=wVtW45^RgTJ$Dg z%pbNqVmt*yP?*-OXB{;Un|4*U$uK}$X{M0!w${IV4l?9;@%XbRuT2l^!uSar`I(8` zUIs(tfMo{VkW3)I$*PNtP`E4L%*$XNxIx@l%PnFBoU{>?GDE1_JUf>u=m3t*=Ul-y zg6_i+{V<=Af6V=VuNTrY!n7Bo#~ z=RQ=F%0zr!V?TS-wgPsfsaSiv1n2??7BZ-HyNVgh7hQshhlf8|Z$j8Gz}SIaN4DEF zL@Kk+1rHiUGpnpN1>KcurVOB^Yw!=?DDjhww$JCXo|=EG!XnBze|eJz z%Qyb^wpyjh$K{jJV^Z+?vsD|QAxlVkg0BBcA5lpFS;t&+FR{iZku_AJebq>^*@kV< z4o+_wVn-J|b*5$P?jVoSeP6{6>?*8ehB9c2+;}6P(0$<4rb>exd`U^0GedD~J9inH z*0=T%G~6g9sbRg=oWap3cIQR-*fsvKC~X%Ea23pHaC$NxE2iviq+r<_p6|xFU^52P z`?c#FId8;gt>|7})q@eQuYZ`$eS0gMKne0XNe`Ys8t+VbvDijKY=zGGgW~vX=u^3Q z!DfV%NeR%6xo`I6B9Qe}oCTeU%1&eH26mipMqXnhT2ySc2j~Qhfs-;m%(guO42olvE~^T>IEK)1l5_S3*H%tv4{ly9xtZRhB_ zZou4m8C|7v>Tb|Inu~(dDsa}Uj;1ojK$|k-&(wKHk55KA)bU<-j*?_ZP@Z(ZY`JGs z{)p*i0qVv!DXb?Sq2XJmsuxi41c7bYoT?3XtSOOKb*N_uz;M(f?d*M zfDvvv*hjN}V!@<|E)sAhsI7-CRDZepXUy?bc(9;k8KK?O8dl?I|7oJaC+b$t(3K++?_S<=I z{vr${zN(bf+EOH2!r&A(bYr!&6f`lOxh?}oIwgn)Km(P`%dDsQ^wdFcIz~SOZ8vKE z`JND{kN`(b3z{XpzP15}-WCC7z_=6t;JtBdNy>@1 z$D2+UJAD+r-kjvUhamnR(yZFX7YbG z6((pmC>}pS`Z&ox^U0B`5GC2>5`AG38d6{o#ysV@*=6lJQp|j0-wRE7*nv1~*^ogz ztW0t_pN_5s4SzK<`7^K!pk|_^6Yqm=stuZLi-_a9+ojo@^$^gzYutt5KzGBd)rzCk zq-v*Y>wdrY6g0{dI=*Ni`g?2NzWvMXziuDAWO3{D)vN#EKX}Xd_WSpnOs0w)=P*)& z9~Mpg<;&~v=hN}ilNXDJ2ZuX4-y-2gET5H+fd-b{jjQBdd6CFOak)5basG_?lX8un z;-N+s4sZDtglN{}Q;EyA6CspgatSL={FvK!()~y){ z8WnT%tN3|}PAB$OSXtlu#S}_?lRfDRiVwUNBSK({N#pT@}$BhR& z?UqWysl*=9BF|Z8n1iD$JKV8)($ogV)?aUiyQp3!+G%wNH&fL>TCmmju!uSXGSkUf#OUuzQYAH=LDJ}1&?h*16GQjK61Bden0o9sG1Glih zA~!UAEy=rjea1F+uja?`F$x=d=_UJ_lU<~~WOULmxIb^6hUX7^%+_;jX{W%`EF=ev z?0mt$hfl-trNTU^Zl`=?)ZJ&N?NCg!kaG^j>a9}_JdC^YBFA3q>elPV zjy!09<2_vC-F(J0URkr#6D>LBEbQp!iQC zt27iur?iN6GA!N;9e)l6yomRzu0< zfmG$cyHy>YZ?yD#L&Xbk)d^orLo|QrQLgQE@*%+~{0e7Mnb&WjB&X z2qCwiU8YzjPqJ^5a!WG$hZ0U8vzgAvg%v{@ADlp1xBK8GQ`_63)|h5-g?9X-i@z}* z!tNccZ*0SXj{UM>&iP5R)rEAsxk$2FkxkVJ+;T8abZ}8hUF}i^xy@&_lRW6!)D#es z8A{;`%M8u^yTntoUkOtIGoK%6oWC3bQrZv31v7YPN7ZkRF2AR!cop(%>;oHw}Ul3RhyJ zHRm+PqV%28QFoBfD(haq7>8GwL>U+}8XNNq|1mD?!g^-YORV~9`GuQvUcL_40< zB-Lm2x-B+GmoAyah*EJYX`+m*s?vEE;?ndjPS3McS6)1F%BrC3DRt484&w7{F@u=v zpv0|Ugy#cujmPX-jn+sM|FH4Y!qjLTG4;BN+9;H0$Z_Cy5dRolk`SjExlj*3jKpCm zZ-i+R0ecbeR^;8FfuE06LlTwbeHQj7eGX1quQ@$PsdBvJG&P?z5NT9L``0Y(GZ; z_U^EcF|v-_fcgoEb#V=I5iqBDRKNM5zAD*^>YuBc3McpBfgDWl@ME6PvX{JfN3Jd2 z>DC;4vzoM}k%gf3eZ74+TAj17M;!ZF*W#|b9n0#{!}`RHLJMR+LytK3I@7r@OGlHF zQI`AlyJ{Cd+C*!|WBfBs-z}-DICEaEgynfJr7g_nkSnE8tiJ-<`poeke;AUU`zoSfl*J7H?YshA$-6V?C}e_0(!2 z+6nzGf>d96c9N(13eID8reVd|8sWts0I1H*&cgmqUOO_O3X!oyB3`0Cs~NA&ICIlN z#W*V6<>|B4ZET0IcvJY~?X8Rb=8;b;L->e6jds{g+D#Wcu=l)aZ z)cVTvbh|g4yEzaJ`^})ia_jtI5j9IzU>`IG^|O6Xg%u^r9v_^fvnqberWI+v;PKsj zg@!06kneOCRo6`IqWHkpFMKWBVCxsTqBCHeGF#G{6mK~{45WrsQRNt}2g77jt)FM zm^Qbm-x#dix-`MgF~{S+KN6&IQX(yGA|ZP5TQc_)u`lnZd(92i)VE#C8$@jykji3( zQdnLmkVhwR8A*I^h<3}%UAxsTsu)77wymDrqv#%S3%AA69vL6*{FgAj{i4b#eHs

(l3v|j22Nb=_;v2+1?w;b;o60-zb%)j@aCqxpPzEmmSH<#b>ic z)G$LiyCly9f!UTr3B8R z_Fv}lxa`ljL8$k?6G#hJQUHR);F6B{KO{qEv&%$1qn+Px^K|ga_gcx09f9T2|4w9o zy!HR%Wj?5o}DGACnpT_1Eh&WFA=t#;q+ixDhY8Y-X^uk#NFOaJrmGBNH? z2yLf9vGFq^*~wBEFAsnOs$TR`P%jPbBy}wm$Cx>$25N-HR z=<%g>8~?281E00UiOuv`SFe#sYfDi#6H6-)SHs3fKVAGM03%#dDX=p_%zKX@s@(T~ zx+&rNP19*h?4UqI;J{m9AiX5~6D?fUmFdKtLD9)qud7a?mq?4U$7ct!vAB}!0LGr7 z_H22f(IscI?Rqm&I96S?tu-Pmh|)OJRV0S4HN)@Y&|iYLvTpCAf$hs^Ge45&u|msFS>KGQ z07yjD@}90!%M7Q4lEMZd;~tAh^cHzM5u7hrlmwu;pRmXL=Z^8?TwA2mOeaih5rtpp zN2$6j2|4<78??VQ3;`g1<_QS&y{q%$9Qs&B1|ZowA51Dca|)H(K3iB-+vl4UEiL+r z*Jmhu_B`*K0$|W1u(~y1DIhFCNW<+8@e!uA1;7sWN+1v2vGy%lLz&UNKD?!^_wJs^ zhuY^9{aUkq)W2~G`(TcCa{qYQ6IowQoGc}Bj6H~BrU7UTR}Ky2YR37)ed#%Yk+PL3 z7Jkdu0_weYYp{lb2Wxa+mt!YP7yzxVu zv%f1=?AD-LZ0Q`s@`hlGNoC3VxoapIbH9+B4Wq)c{{B)By=@xR7_p!6u*FQk`Str% zGRLvUu6INWw+xbz17gar9i#j)qLOGLvu>K{(0R*yt%{l) z{DL0st+F0IRo_;}&B(j(b2 z?9HSD2|9``3ClArCUN@ZoRPdvkdsN7E2^wh6utK#c=O&%WG96dgJd&*@RKx|!>2_& zkbv&d&edcKm{)*fFT$md8kCX-mMvFy&mkE0i_T^>aV8fG&8xngw47LW5J07>?+NWf zZUkU$cqD7C)@&UuBD~)SjhCX{ttfz9D{vH7yW2r%4|FEKb=j*$igY5yx{`jGKjve9 zWA_o@LB4*AY?%w@1%WH-A+54L=pf>}$C_)j*xTQvgNJ=rItBQJJ1_q!L^D!Xa_M=_ z|3#JReQ0Ndb(s2LorhgAt+Cd!X0KMp?^alcX>M)G!9LA*sh9K<(O5g@wOW6AT&ZpX zVFm!;%W>`PT_jp`3AGWBEQ}IDId!cU9x9@_vDpdplgaLNcqLi!9J{n-JDd)$@#WK0 z7kzYEFGkb>!sS+r{#2jLnGQwGshy%KP*&daVxG866MkbOZ9;rFY_=!VXI0DU<3THCuaOc7Z`lDPQ{XIIgs^u$|Tft;*1)4l|RWfN`je{4Zb%9?AsFed@ z&s2TmW#VSFf|Nlvl37A)owx zAoQ5B#S@Q=Lb!b83YS=GwrMHrupt>rFr(`a+q*TcAJLe68(xB7`uqz@e!D7(mQ zWo|`Y4i&BDwwzk`_hzSoAa^9sz$gAFO_aIT%nk^{I*ri)H1~b3 z`9K>*o1IZP@HoIulXp78_Ml zn5HzjP$%hxX*USUq?G3XHVklxSO1W%S3gLT_uM}s-qcoVR$!-V3~uizs&seZPSwSN zl=XxSjk7&buCx3occQCneM6(1U~Tohy>>r{%zgJah&85TENhgdg=guA>DbzUM9L&P zOy6HaR=-I+L$SomYaxQ|#4jY?!q~8$kb?!FBvsbHLuTj5OThpu6m@DyyfidFnR9!ln zp`^59$5%Utf>-&EMqgTP*#ZbA5z>s8PrT5B{`ztJR>w>2Jmuh^sL{mV7_n*}7WsIE z4Mg!UQ??5vAV#-G4AcI!@S}XeQ=|b!GUK?Ur_X$-iPEES*Nl3ns-|T*$;>&;i|b9| zm4f;WXx1!~^cYR%UQ{!$d}MDd95&D6%gWU?m5NcpJHfu%AU!0o<&{z;L+&#s(Dz%3 zokg@p0XJGgK}>l1*;FykR*9U4_+EXiw?rtTZcu!`xaw^CRqwIxm%fn;eae6cGf!Y# zjlrIA+go*&QGJy5Hm9yxWNUoB;)Skuu+bOb)?W9O;qo=W=+vcWm7dRhkmPezxuJ+2a6MTE8uR#H*clPixm#2qByji zf-7Z~L%M6g%@NaacWjy_qE3w?}sZ#vr52Qz*dr<47{-TvF!KykZ0FIA_k5qQ1?wGD(CyKdZNir7kWv8*Ej4I+G!8y9H+WR~Uazl^kJY2Tq?EJBf?05zD>k8Fx z=1XfW0DO$(7a&*E@q3<36pVG2gys zh^jVM7?P%mmaP>Lb&D#l!?+CD2L!Qgcbs-=dcCGjAJuKxptvw_SoQt+%T6XBGwe5P zH#cV`i}`2e^jE)-W(I^Ns5s13TQ;}k9?;QwtPiGn)^*3@*PQK~N0+DP6&=k!jW+_f z3($r-X5quG=A@TKrSg-51nOg{_~QE{z~;wZ1VkHfBmZGIkAk?%uNvi=$)(wqB`t4K zL>=n~07>&n6SLl4ZC|C1bv0e_Z9_j#uX_^N*$~VxQH$UUbZvu~narav^HXbKi~GLjWx zxW3>%xmn()bPv@j=_rF{^)JiZj5Sw%Qa$;srml87!FA6*1 zl)VZPjp&PJOmrQiwxYFP**^vd^HnjVx=WV2QyA>u(7YV!FS?11iWtkoXlnH1Q^@yA z!{O9t2NEXAQNT#^O$N^i{yN+f?l=~7+G?ya4em^fTWdon`GvLs%Q%3<_)$8M?x=h5oxo{Z+Fu-heJV=F$z~XgKH1RN zX}JiooyA{3(I|u$vNu=d$D6BrR9s}-_KL-**wAuzIZd=ymXW7Y^ojAHrlY2`*%64b zAEf0Wxy$*tM%=$HZzg-Jo8Mb=BOopUc-cwRN+Jyk%jTVu=D$gfK|GoS~)d!g2E3f)`TL8D@O#9 zizO9J>Uw{Lo^jb!>rZFaO~h6Z%154x8eW+VF|#6942sZpfiZNiD8LEA^3F929MM=` zTa_>ZFgq*1f;MQjXRb5Va<@S9#zH`YD}$rwYbqK~Z7)MK+E_xBOUd@ju=W1rd z%xc~6TErkR?{=S6gPZ~ErpHl6%I(A8zFti^{<3L2z-1Wrq-8z$1bG-&&J(-e{m_#C z6xdP>Ocz7dbr)_NyXLXs%S=$4hdHG?u&3-N9zFEa3CIvR400AZo*KzFR61CLG4J60 zI@SWn_aR=`#AKuxE|BG~XkDEu2bh6=;(N4hxJ2@pdQ<+Yuq>xzA=AHJ0^S(92kfXZfD6u73wDy!Kd9GH4n%exI$kEkm=kGQpMss|O@7=MDY=~v5;7`6OOA&qxM z7zEMOvy^x;%SJzO!{lRD4F1t(Z4APTw@L9G&cog*d~|HDT##UzL>X8i$a$B%t2icj zsGh-IemA$d=@x+b@-*O@jm}UI5JMM0mgBa$Po}%QSGxH~yX-+>q1Ou?^u8p=kY@5`rr@Ip$E%~8|D<7`Wl*3883l|&kK@R?XU&RThoGQLuZ+1jc93S# zdX!fDsIQ6ENH-(0=3xPtfSBmg>`0r2lv$I#haQMD(3RQ^h0 zU0BN^2dy?aj@c+&HZN(MHV`(K>Umg=W&^A_A>{Lg)LaE^CSciYT@w^_pfvJs*6#g$ z&b09>gew9Q{LVySLwJ^A z67?;Y>`^QadLi(~VmK9M2gM{Jr}Ktx<(%s%pAPBab{zVRQO1*Nj+d30h*Lvd`tc=!%n;tA zx7no%aQCj?!nCgA`a}33`Pqu`xh!0;V2+PxteIW#9GP?Dr`O-@sNTycLjzs3?P$ta zCvyK$v!b$7GnN*nvcdDz^JmOsZJR3VUxXx?o64VO#eXYsoTl#=Lv-SF@@Wp?Vk>elO zut@t^We*o!Vx@;LfP!-KT?BI9+0|h23CH7~_y|E-9hT7AMA$4=$6>(|szw1QLG!tM zlmhJWQ?#zr2uBcPhMR;64XwJ#=HOCLbr?FxZ?yA;?mG?CtQ@I*H3p~&Ani|%=)8ss z9;10i@t?W=r*0zEJX~78;taBEVC~U@+sak+omfAIc`9xsr-*sF&8tT&wqFW@@}V8> zxt14t_Xk1u_>9y8s=DKG@3~WtTa%%s?_g1Wya@`kCx-0#^GqP2>;SX30fu;rH@5En z4Cwmc+e7w;@+g0Ur97Sb_y5)Yx3!v|H7+2%9Y3pikQDy=YTi!`fkg9DLm(;q)DYlN zq3dTyz_u8Ewn%J?;iq%h7Q_E8z|az{-V01g^!k-chCdxF)Y0+N!Tuj=7y936;2PzY zy6;i8*ZSqiRYK;u^M4<+xbyq#yMKP{V&{Lju9Z2%XSH=hTV;K8i_Jgu48Zi42mfsy zy9OAO?M*!T`bV6wyaHf3bp3qOPZ9jof}e))(-%Mz_~{FNir}Xf{4@ke0zZAh|3wi@ zX-y8=O%JkbX4RLrH)F@sw;sV5MSKlsg|R%*OB(KMR@(Lbm7Y-%hJ#xGV{?_TjKHwh zz3+WTyE}s8@&t&%t?NFO-`}`H3dPJ>P8eDeuiKuE0hsKnU>*?FA-=ViYbk_{s{=<%^ z^i4s=ksmnwZ?O95>QbZ4@2?#PYo5vw^#1|J&!wyW`{SMTRyQ&IA2;ictvmVs1NU41 z|3~aG3WJ_%KQ_%6Re|>E_%}g$pu*aePf{hbH=&{dxJ*)Zq7<7=w^ zG50jp6WLui>~S$>cWoqZ!{n{Q20uK#a;3WKxJC%(bX;!I>UWucp1ZlaGW~8t#$khR;>Tj|n|8J?Et^jNFN!j|c5e~mt`D0y z_Wg@YhLmaEj84XSSUc69I$uhiIP&8K-_izmT>l7pNnDTW^y7hYY6GAe3UuWp{ri*b zA3qjZ`w}X-fa~{@p!5k{f4%zorvHaTuqyln*Zs*}Rd@s1oa +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-import-mappings-import-mappings[`quarkus.import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-schema-mappings-schema-mappings[`quarkus.schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-additional-model-type-annotations[`quarkus.additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-additional-enum-type-unexpected-member[`quarkus.additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-additional-api-type-annotations[`quarkus.additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-additional-request-args[`quarkus.additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.additional-request-args+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-return-response[`quarkus.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.return-response+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-enable-security-generation[`quarkus.enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-open-api-normalizer-normalizer[`quarkus.open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-mutiny[`quarkus.mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.mutiny+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-mutiny-return-response[`quarkus.mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-generate-part-filename[`quarkus.generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-part-filename-value[`quarkus.part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.part-filename-value+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-use-field-name-in-part-filename[`quarkus.use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-use-bean-validation[`quarkus.use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-generate-apis[`quarkus.generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.generate-apis+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-generate-models[`quarkus.generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.generate-models+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-equals-hashcode[`quarkus.equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-verbose[`quarkus.verbose`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.verbose+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether to log the internal generator codegen process in the default output or not. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_VERBOSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_VERBOSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-input-base-dir[`quarkus.input-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.input-base-dir+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Option to change the directory where OpenAPI files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_INPUT_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_INPUT_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-template-base-dir]] [.property-path]##link:#quarkus-openapi-generator_quarkus-template-base-dir[`quarkus.template-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.template-base-dir+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Option to change the directory where template files must be found. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_TEMPLATE_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_TEMPLATE_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-validatespec]] [.property-path]##link:#quarkus-openapi-generator_quarkus-validatespec[`quarkus.validateSpec`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.validateSpec+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether or not to skip validating the input spec prior to generation. By default, invalid specifications will result in an error. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_VALIDATESPEC+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_VALIDATESPEC+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`true` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-include]] [.property-path]##link:#quarkus-openapi-generator_quarkus-include[`quarkus.include`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.include+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Option to specify files for which generation should be executed only + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_INCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_INCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-exclude]] [.property-path]##link:#quarkus-openapi-generator_quarkus-exclude[`quarkus.exclude`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.exclude+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Option to exclude file from generation + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_EXCLUDE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_EXCLUDE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-default-security-scheme]] [.property-path]##link:#quarkus-openapi-generator_quarkus-default-security-scheme[`quarkus.default-security-scheme`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.default-security-scheme+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Create security for the referenced security scheme + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_DEFAULT_SECURITY_SCHEME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_DEFAULT_SECURITY_SCHEME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-skip-form-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-skip-form-model[`quarkus.spec."spec-item".skip-form-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".skip-form-model+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether to skip the generation of models for form parameters + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__SKIP_FORM_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-type-mappings-type-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-type-mappings-type-mappings[`quarkus.spec."spec-item".type-mappings."type-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".type-mappings."type-mappings"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Type Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be used for a given OAS datatype (the keys of this map) + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__TYPE_MAPPINGS__TYPE_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-import-mappings-import-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-import-mappings-import-mappings[`quarkus.spec."spec-item".import-mappings."import-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".import-mappings."import-mappings"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Import Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given OAS datatype (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__IMPORT_MAPPINGS__IMPORT_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-schema-mappings-schema-mappings]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-schema-mappings-schema-mappings[`quarkus.spec."spec-item".schema-mappings."schema-mappings"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".schema-mappings."schema-mappings"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Schema Mapping is an OpenAPI Generator configuration specifying which Java types (the values) should be imported when a given schema type (the keys of this map) is used + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__SCHEMA_MAPPINGS__SCHEMA_MAPPINGS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-additional-model-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-additional-model-type-annotations[`quarkus.spec."spec-item".additional-model-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".additional-model-type-annotations+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The specified annotations will be added to the generated model files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_MODEL_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-additional-enum-type-unexpected-member]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-additional-enum-type-unexpected-member[`quarkus.spec."spec-item".additional-enum-type-unexpected-member`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".additional-enum-type-unexpected-member+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if the enums should have an `UNEXPECTED` member to convey values that cannot be parsed. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_ENUM_TYPE_UNEXPECTED_MEMBER+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-additional-api-type-annotations]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-additional-api-type-annotations[`quarkus.spec."spec-item".additional-api-type-annotations`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".additional-api-type-annotations+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The specified annotations will be added to the generated api files + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_API_TYPE_ANNOTATIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-additional-request-args]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-additional-request-args[`quarkus.spec."spec-item".additional-request-args`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".additional-request-args+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add custom/additional HTTP Headers or other args to every request + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__ADDITIONAL_REQUEST_ARGS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-return-response[`quarkus.spec."spec-item".return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".return-response+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if the methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-enable-security-generation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-enable-security-generation[`quarkus.spec."spec-item".enable-security-generation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".enable-security-generation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines if security support classes should be generated + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__ENABLE_SECURITY_GENERATION+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-open-api-normalizer-normalizer]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-open-api-normalizer-normalizer[`quarkus.spec."spec-item".open-api-normalizer."normalizer"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".open-api-normalizer."normalizer"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines the normalizer options. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__OPEN_API_NORMALIZER__NORMALIZER_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-mutiny]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-mutiny[`quarkus.spec."spec-item".mutiny`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".mutiny+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable SmallRye Mutiny support. If you set this to `true`, all return types will be wrapped in `io.smallrye.mutiny.Uni`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__MUTINY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__MUTINY+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-mutiny-return-response]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-mutiny-return-response[`quarkus.spec."spec-item".mutiny.return-response`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".mutiny.return-response+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines with SmallRye Mutiny enabled if methods should return `jakarta.ws.rs.core.Response` or a model. Default is `false`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__MUTINY_RETURN_RESPONSE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-mutiny-operation-ids-mutiny-multi-operation-ids[`quarkus.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".mutiny.operation-ids."mutiny-multi-operation-ids"+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Handles the return type for each operation, depending on the configuration. The following cases are supported: + +1. If `mutiny` is enabled and the operation ID is specified to return `Multi`: - The return type will be wrapped in `io.smallrye.mutiny.Multi`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Multi`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Multi`. - Otherwise, it will return `io.smallrye.mutiny.Multi`. + +2. If `mutiny` is enabled and the operation ID is specified to return `Uni`: - The return type will be wrapped in `io.smallrye.mutiny.Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni`. + +3. If `mutiny` is enabled but no specific operation ID is configured for `Multi` or `Uni`: - The return type defaults to `Uni`. - If `mutiny.return-response` is enabled, the return type will be `io.smallrye.mutiny.Uni`. - If the operation has a void return type, it will return `io.smallrye.mutiny.Uni`. - Otherwise, it will return `io.smallrye.mutiny.Uni``. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__MUTINY_OPERATION_IDS__MUTINY_MULTI_OPERATION_IDS_+++` +endif::add-copy-button-to-env-var[] +-- +|Map +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-generate-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-generate-part-filename[`quarkus.spec."spec-item".generate-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".generate-part-filename+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines, whether the `PartFilename` (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) annotation should be generated for MultipartForm POJOs. By setting to `false`, the annotation will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-part-filename-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-part-filename-value[`quarkus.spec."spec-item".part-filename-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".part-filename-value+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines the filename for a part in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. In case no value is set, the default one is `File` or `file`, depending on the `CommonItemConfig++#++useFieldNameInPartFilename` configuration. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__PART_FILENAME_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-use-field-name-in-part-filename]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-use-field-name-in-part-filename[`quarkus.spec."spec-item".use-field-name-in-part-filename`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".use-field-name-in-part-filename+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Defines, whether the filename should also include the property name in case the `PartFilename` annotation (`org.jboss.resteasy.reactive.PartFilename` or `org.jboss.resteasy.annotations.providers.multipart.PartFilename`) is generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__USE_FIELD_NAME_IN_PART_FILENAME+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-use-bean-validation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-use-bean-validation[`quarkus.spec."spec-item".use-bean-validation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".use-bean-validation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable bean validation. If you set this to `true`, validation annotations are added to generated sources E.g. `@Size`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__USE_BEAN_VALIDATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-generate-apis]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-generate-apis[`quarkus.spec."spec-item".generate-apis`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".generate-apis+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of APIs. If you set this to `false`, APIs will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_APIS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_APIS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-generate-models]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-generate-models[`quarkus.spec."spec-item".generate-models`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".generate-models+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of models. If you set this to `false`, models will not be generated. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_MODELS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__GENERATE_MODELS+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-equals-hashcode]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-equals-hashcode[`quarkus.spec."spec-item".equals-hashcode`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".equals-hashcode+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enable the generation of equals and hashcode in models. If you set this to `false`, the models will not have equals and hashcode. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__EQUALS_HASHCODE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-base-package[`quarkus.spec."spec-item".base-package`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".base-package+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Base package for where the generated code for the given OpenAPI specification will be added. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__BASE_PACKAGE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__BASE_PACKAGE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-api-name-suffix[`quarkus.spec."spec-item".api-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".api-name-suffix+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Suffix name for generated api classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__API_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-model-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-model-name-suffix[`quarkus.spec."spec-item".model-name-suffix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".model-name-suffix+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Suffix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__MODEL_NAME_SUFFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-model-name-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-model-name-prefix[`quarkus.spec."spec-item".model-name-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".model-name-prefix+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Prefix name for generated model classes + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__MODEL_NAME_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix[`quarkus.spec."spec-item".remove-operation-id-prefix`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".remove-operation-id-prefix+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix-delimiter]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix-delimiter[`quarkus.spec."spec-item".remove-operation-id-prefix-delimiter`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".remove-operation-id-prefix-delimiter+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_DELIMITER+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix-count]] [.property-path]##link:#quarkus-openapi-generator_quarkus-spec-spec-item-remove-operation-id-prefix-count[`quarkus.spec."spec-item".remove-operation-id-prefix-count`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.spec."spec-item".remove-operation-id-prefix-count+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Remove operation id prefix + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_SPEC__SPEC_ITEM__REMOVE_OPERATION_ID_PREFIX_COUNT+++` +endif::add-copy-button-to-env-var[] +-- +|int +| + +|=== + diff --git a/docs/modules/ROOT/pages/moqu.adoc b/docs/modules/ROOT/pages/moqu.adoc new file mode 100644 index 000000000..846cd9bbc --- /dev/null +++ b/docs/modules/ROOT/pages/moqu.adoc @@ -0,0 +1,206 @@ += Quarkus - Open API Generator - Moqu + +include::./includes/attributes.adoc[] + +The **OpenAPI Generator Moqu extension** converts an OpenAPI specification into a mock representation. This mock can then be mapped to the link:https://wiremock.org/[WireMock] for further use, providing a way to simulate APIs for testing and development purposes. + +[NOTE] +==== +Currently, this extension supports only link:https://wiremock.org/[WireMock] definitions. +==== + +[[getting-started]] +== Getting Started + +[source,xml] +---- + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu + {project-version} + +---- + +Now, create the following OpenAPI specification file under your `src/resources/openapi` directory: + +[source,yaml] +.src/main/openapi/hello.yaml +---- +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Get framework by ID +paths: + "/frameworks/{id}": + get: + parameters: + - name: id + in: path + examples: + quarkus: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/Framework" + description: Ok +components: + schemas: + Framework: + type: object + properties: + name: + type: string + example: "Quarkus" + versions: + type: array + example: ["999-SNAPSHOT", "3.15.1"] + supportsJava: + type: boolean + example: true + contributors: + type: integer + example: 1000 + rules: + type: object + example: + hello: world +---- + +Execute now your application on Dev mode, and access the Dev UI for getting you wiremock stubbing: + +image::moqu-devui-card-framework.png[] + +Click on `Moqu Wiremock`, you will se a table containing all wiremock definitions: + +image::table-wiremock.png[] + +Now, you can `see` or `download` the Wiremock stubbing. + +== Request matching + +The Moqu extension uses the request and response examples defined in the OpenAPI Specification to determine the appropriate response for a specific request, creating a corresponding request/response pair. + +Example: + +[source,yaml] +---- +openapi: 3.0.3 +info: + title: "Users API" + version: 1.0.0-alpha +servers: + - url: http://localhost:8888 +paths: + /users/{id}: + get: + description: Get user by ID + parameters: + - name: id + in: path + required: true + schema: + type: number + examples: + john: <1> + value: 1 <2> + responses: + "200": + description: Ok + content: + "application/json": + examples: + john: <3> + value: + '{"id": 1, "name": "John Doe"}' +---- + +<1> Defines an example named `john` for request +<2> Maps the request for path `/users/1` should use the response named as `john` +<3> Defines an example named `john` for response + + +In other words, if the user accesses `/users/1`, the response will be the one mapped for the `john` example in response. + +The Wiremock definition using the OpenAPI specification above, looks something like this: + +[source,json] +---- +{ + "mappings": [ + { + "request": { + "method": "GET", + "url": "/users/1" + }, + "response": { + "status": 200, + "body": "{\"name\":\"John\",\"age\": 80}", + "headers": {} + } + } + ] +} +---- + +=== Response as Schema + +You can use the `$ref` to reference a schema for mapping a response: + +[source,yaml] +---- +paths: + "/users/{id}": + get: + parameters: + - name: id + in: path + examples: + alice: + value: 1 + responses: + 200: + content: + "application/json": + examples: + alice: + $ref: "#/components/schemas/User" + description: Ok +components: + schemas: + User: + type: object + properties: + name: + type: string + example: "Alice" + age: + type: number + example: 80 +---- + +The Wiremock definition using the OpenAPI specification above, looks something like this: + +[source,json] +---- +{ + "mappings": [ + { + "request": { + "method": "GET", + "url": "/users/1" + }, + "response": { + "status": 200, + "body": "{\"name\":\"Alice\",\"age\":80}", + "headers": {} + } + } + ] +} +---- \ No newline at end of file diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml new file mode 100644 index 000000000..06bd3b4a2 --- /dev/null +++ b/moqu/core/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-parent + 3.0.0-SNAPSHOT + + + quarkus-openapi-generator-moqu-core + Quarkus :: Openapi Generator :: Moqu :: Core + + + 2.16.1 + + + + + io.swagger.parser.v3 + swagger-parser + ${version.io.swagger.parser} + + + org.assertj + assertj-core + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + commons-io + commons-io + ${commons.io.version} + + + org.jboss.logmanager + jboss-logmanager + + + diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/Moqu.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/Moqu.java new file mode 100644 index 000000000..1d0024cad --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/Moqu.java @@ -0,0 +1,37 @@ +package io.quarkiverse.openapi.moqu; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import io.quarkiverse.openapi.moqu.model.RequestResponsePair; + +/** + * Represents a collection of request-response pairs, providing methods to access + * these pairs in an immutable list. + */ +public class Moqu { + + private List requestResponsePairs = new ArrayList<>(); + + /** + * Constructs a {@code Moqu} instance with the provided list of request-response pairs. + * + * @param requestResponsePairs the list of {@link RequestResponsePair} objects to initialize + * the collection. Must not be {@code null}. + * @throws NullPointerException if {@code requestResponsePairs} is null. + */ + public Moqu(List requestResponsePairs) { + this.requestResponsePairs = Objects.requireNonNull(requestResponsePairs); + } + + /** + * Returns an unmodifiable list of request-response pairs. + * + * @return an immutable list of {@link RequestResponsePair}. + */ + public List getRequestResponsePairs() { + return Collections.unmodifiableList(requestResponsePairs); + } +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquImporter.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquImporter.java new file mode 100644 index 000000000..16d63747d --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquImporter.java @@ -0,0 +1,17 @@ +package io.quarkiverse.openapi.moqu; + +/** + * {@link MoquImporter} aims to convert a specification into a {@link Moqu} model. + * It provides a method to parse the content, typically from an OpenAPI specification, + * and generate a corresponding {@link Moqu} instance. + */ +public interface MoquImporter { + + /** + * Parses the provided OpenAPI content and generates a new {@link Moqu} instance. + * + * @param content the OpenAPI content as a string, which will be parsed into a {@link Moqu} model. + * @return a new {@link Moqu} instance based on the provided content. + */ + Moqu parse(String content); +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquMapper.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquMapper.java new file mode 100644 index 000000000..53ed02bbe --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/MoquMapper.java @@ -0,0 +1,19 @@ +package io.quarkiverse.openapi.moqu; + +import java.util.List; + +/** + * A generic interface for mapping a {@link Moqu} instance to a list of objects of type {@code T}. + * + * @param the type of objects to which the {@link Moqu} instance will be mapped. + */ +public interface MoquMapper { + + /** + * Maps the given {@link Moqu} instance to a list of objects of type {@code T}. + * + * @param moqu the {@link Moqu} instance to be mapped. + * @return a list of mapped objects of type {@code T}. + */ + List map(Moqu moqu); +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporter.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporter.java new file mode 100644 index 000000000..a969d8582 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporter.java @@ -0,0 +1,253 @@ +package io.quarkiverse.openapi.moqu; + +import static io.swagger.v3.parser.util.SchemaTypeUtil.INTEGER_TYPE; +import static io.swagger.v3.parser.util.SchemaTypeUtil.OBJECT_TYPE; +import static io.swagger.v3.parser.util.SchemaTypeUtil.STRING_TYPE; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Strings; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; + +import io.quarkiverse.openapi.moqu.model.Header; +import io.quarkiverse.openapi.moqu.model.Request; +import io.quarkiverse.openapi.moqu.model.RequestResponsePair; +import io.quarkiverse.openapi.moqu.model.Response; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; +import io.swagger.v3.oas.models.PathItem; +import io.swagger.v3.oas.models.examples.Example; +import io.swagger.v3.oas.models.media.MediaType; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.parameters.Parameter; +import io.swagger.v3.oas.models.responses.ApiResponse; +import io.swagger.v3.parser.OpenAPIV3Parser; +import io.swagger.v3.parser.core.models.SwaggerParseResult; + +public class OpenAPIMoquImporter implements MoquImporter { + + private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIMoquImporter.class); + private static final String HTTP_HEADER_ACCEPT = "Accept"; + private static final String REFERENCE_PREFIX = "#/components/schemas/"; + + @Override + public Moqu parse(String content) { + + SwaggerParseResult swaggerParseResult = new OpenAPIV3Parser().readContents(content); + + if (LOGGER.isDebugEnabled()) { + for (String message : swaggerParseResult.getMessages()) { + LOGGER.debug("[context:SwaggerParseResult] {}", message); + } + } + + OpenAPI openAPI = swaggerParseResult.getOpenAPI(); + + if (Objects.isNull(openAPI)) { + throw new IllegalArgumentException("Cannot parse OpenAPI V3 content: " + content); + } + + return new Moqu( + getRequestResponsePairs(openAPI)); + } + + private List getRequestResponsePairs(OpenAPI openAPI) { + Map requestResponsePairs = new HashMap<>(); + + Map localSchemas = getSchemas(openAPI); + + Set> entries = Optional.ofNullable(openAPI.getPaths()) + .orElseThrow(IllegalArgumentException::new) + .entrySet(); + + for (Map.Entry entry : entries) { + + for (Map.Entry httpMethodOperation : entry.getValue().readOperationsMap() + .entrySet()) { + + if (!Objects.isNull(httpMethodOperation.getValue().getResponses())) { + + Set> statusApiResponses = httpMethodOperation.getValue().getResponses() + .entrySet(); + + for (Map.Entry statusApiResponse : statusApiResponses) { + + if (Objects.isNull(statusApiResponse.getValue())) { + continue; + } + + Map> examplesOnPath = extractParameters(httpMethodOperation.getValue(), + ParameterType.PATH); + + requestResponsePairs.putAll(getContentRequestResponsePairs(statusApiResponse, examplesOnPath, + httpMethodOperation.getKey(), entry.getKey(), localSchemas)); + } + } + } + } + + return requestResponsePairs.entrySet().stream().map(entry -> new RequestResponsePair(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + } + + private Map getSchemas(OpenAPI openAPI) { + if (openAPI.getComponents() == null) { + return Map.of(); + } + return Objects.requireNonNullElse(openAPI.getComponents().getSchemas(), Map.of()); + } + + private int tryGetStatusCode(Map.Entry statusApiResponse) { + try { + return Integer.parseInt(statusApiResponse.getKey()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid status code: " + statusApiResponse.getKey()); + } + } + + private Map> extractParameters(Operation operation, ParameterType parameterType) { + List parameters = Optional.ofNullable(operation.getParameters()).orElse(Collections.emptyList()); + Map> finalParameters = new HashMap<>(); + + for (Parameter parameter : parameters) { + if (isEligibleForExtraction(parameter, parameterType)) { + + Set exampleNames = parameter.getExamples().keySet(); + for (String exampleName : exampleNames) { + + Example example = parameter.getExamples().get(exampleName); + + Object object = example.getValue(); + String value = resolveContent(object); + finalParameters.computeIfAbsent(exampleName, + k -> ArrayListMultimap.create()).put(parameter.getName(), value); + } + } + } + + return finalParameters; + } + + private boolean isEligibleForExtraction(Parameter parameter, ParameterType type) { + return parameter.getIn().equals(type.value()) && !Objects.isNull(parameter.getExamples()); + } + + private Map getContentRequestResponsePairs(Map.Entry statusApiResponse, + Map> parametersOnPath, PathItem.HttpMethod httpMethod, String url, + Map localSchemas) { + Map requestResponseMap = new HashMap<>(); + + ApiResponse apiResponse = statusApiResponse.getValue(); + + int statusCode = tryGetStatusCode(statusApiResponse); + + for (Map.Entry entry : apiResponse.getContent().entrySet()) { + String contentType = entry.getKey(); + MediaType mediaType = entry.getValue(); + Map examples = Optional.ofNullable(mediaType.getExamples()).orElse(Collections.emptyMap()); + + examples.forEach((exampleName, example) -> { + + String content = resolveContent(localSchemas, example); + + Response response = new Response( + exampleName, + mediaType, + statusCode, + content, + List.of()); + + Multimap onPath = parametersOnPath.get(exampleName); + List reqParams = new ArrayList<>(); + + if (onPath != null) { + for (Map.Entry paramEntry : onPath.entries()) { + io.quarkiverse.openapi.moqu.model.Parameter parameter = new io.quarkiverse.openapi.moqu.model.Parameter( + paramEntry.getKey(), + paramEntry.getValue(), + ParameterType.PATH); + reqParams.add(parameter); + } + } + + List parameters = reqParams.stream() + .filter(reqParam -> reqParam.where().equals(ParameterType.PATH)).toList(); + String finalUrl = resolveUrlParameters(url, parameters); + Request request = new Request( + finalUrl, + httpMethod.name(), + exampleName, + new Header(HTTP_HEADER_ACCEPT, List.of(contentType)), + reqParams); + requestResponseMap.put(request, response); + }); + } + + return requestResponseMap; + } + + private String resolveContent(Map localSchemas, Example example) { + if (!Strings.isNullOrEmpty(example.get$ref())) { + return resolveRef(example.get$ref(), localSchemas); + } else { + return resolveContent(example.getValue()); + } + } + + private String resolveUrlParameters(String url, List parameters) { + for (io.quarkiverse.openapi.moqu.model.Parameter parameter : parameters) { + String placeholder = "{%s}".formatted(parameter.key()); + url = url.replace(placeholder, parameter.value()); + } + return url; + } + + private String resolveRef(String ref, Map localSchemas) { + if (!ref.startsWith(REFERENCE_PREFIX)) { + throw new IllegalArgumentException( + "There is no support for external $ref schemas. Please, configure the %s as local schema" + .formatted(ref)); + } + + String refName = ref.substring(REFERENCE_PREFIX.length(), ref.length()); + + Schema schema = localSchemas.get(refName); + + if (schema == null) { + throw new IllegalArgumentException("Schema not found: " + refName); + } + + return generateResponseBodyFromRefSchema(schema); + } + + private String resolveContent(Object object) { + if (object instanceof String) { + return (String) object; + } + if (object instanceof Integer) { + return String.valueOf((Integer) object); + } + throw new IllegalArgumentException("Object is not a String"); + } + + private static String generateResponseBodyFromRefSchema(final Schema schema) { + String schemaType = Optional.ofNullable(schema.getType()).orElse(OBJECT_TYPE); + return switch (schemaType) { + case STRING_TYPE, INTEGER_TYPE -> (String) schema.getExample(); + case OBJECT_TYPE -> SchemaReader.readObjectExample(schema); + default -> ""; + }; + } +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/ParameterType.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/ParameterType.java new file mode 100644 index 000000000..0c053f55b --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/ParameterType.java @@ -0,0 +1,43 @@ +package io.quarkiverse.openapi.moqu; + +/** + * Enum representing the type of a parameter in an HTTP request, indicating its location. + * The parameter can be part of the path, query string, or headers. + */ +public enum ParameterType { + + /** + * Indicates that the parameter is part of the URL path. + */ + PATH("path"), + + /** + * Indicates that the parameter is part of the query string. + */ + QUERY("query"), + + /** + * Indicates that the parameter is part of the HTTP headers. + */ + HEADER("header"); + + private final String value; + + /** + * Constructs a {@code ParameterType} with the given string value representing the parameter location. + * + * @param value the string value corresponding to the parameter type. + */ + ParameterType(String value) { + this.value = value; + } + + /** + * Returns the string value associated with this {@code ParameterType}. + * + * @return the string representation of the parameter type. + */ + public String value() { + return this.value; + } +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/SchemaReader.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/SchemaReader.java new file mode 100644 index 000000000..7b330f0e5 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/SchemaReader.java @@ -0,0 +1,64 @@ +package io.quarkiverse.openapi.moqu; + +import static io.swagger.v3.parser.util.SchemaTypeUtil.OBJECT_TYPE; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import io.quarkiverse.openapi.moqu.marshall.ObjectMapperFactory; +import io.swagger.v3.oas.models.media.Schema; + +/** + * Utility class for reading schema examples and converting them into JSON representations. + * This class provides methods to extract example data from a given schema and serialize it + * into JSON format. + */ +public class SchemaReader { + + static String EMPTY_JSON_OBJECT = "{}"; + + /** + * Reads the example object from the provided schema and converts it to a JSON string. + * + * @param schema the schema from which to extract the example object. + * @return a JSON string representation of the example object, or an empty JSON object + * if an error occurs during processing. + */ + static String readObjectExample(Schema schema) { + try { + Map map = mapObjectExample(schema); + return ObjectMapperFactory.getInstance().writeValueAsString(map); + } catch (JsonProcessingException e) { + return EMPTY_JSON_OBJECT; + } + } + + /** + * Recursively maps the properties of the provided schema to a map. + * + * @param schema the schema from which to map properties. + * @return a map representing the example properties of the schema. + */ + private static Map mapObjectExample(Schema schema) { + Map currentRoot = new HashMap<>(); + + Optional.ofNullable(schema.getProperties()) + .orElse(Map.of()) + .forEach((key, value) -> { + if (value.getType().equals(OBJECT_TYPE)) { + if (value.getExample() != null) { + currentRoot.put(key, value.getExample()); + } else { + currentRoot.put(key, mapObjectExample(value)); + } + } else { + currentRoot.put(key, value.getExample()); + } + }); + + return currentRoot; + } +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/marshall/ObjectMapperFactory.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/marshall/ObjectMapperFactory.java new file mode 100644 index 000000000..68957a738 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/marshall/ObjectMapperFactory.java @@ -0,0 +1,15 @@ +package io.quarkiverse.openapi.moqu.marshall; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * Responsible for providing a Single of {@link ObjectMapper} instance. + */ +public class ObjectMapperFactory { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static ObjectMapper getInstance() { + return objectMapper; + } +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Header.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Header.java new file mode 100644 index 000000000..476bd63ab --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Header.java @@ -0,0 +1,12 @@ +package io.quarkiverse.openapi.moqu.model; + +import java.util.List; + +/** + * Represents an HTTP header with a name and a set of associated values. + * + * @param name the name of the HTTP header (e.g., "Accept", "Content-Type"). + * @param value the set of values associated with the header, allowing multiple values (e.g., "application/json", "text/html"). + */ +public record Header(String name, List value) { +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Operation.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Operation.java new file mode 100644 index 000000000..bac321819 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Operation.java @@ -0,0 +1,10 @@ +package io.quarkiverse.openapi.moqu.model; + +/** + * Represents an HTTP operation. + *

+ * + * @param httpMethod the HTTP verb used for the current {@link Operation}. + */ +public record Operation(String httpMethod) { +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Parameter.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Parameter.java new file mode 100644 index 000000000..ee87f789b --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Parameter.java @@ -0,0 +1,14 @@ +package io.quarkiverse.openapi.moqu.model; + +import io.quarkiverse.openapi.moqu.ParameterType; + +/** + * Represents an HTTP request parameter with a key, value, and location indicating where the parameter is used. + * + * @param key the key of the parameter (e.g., "id", "query"). + * @param value the value of the parameter associated with the key. + * @param where the location of the parameter in the request (e.g., query string, path, header), defined by + * {@link ParameterType}. + */ +public record Parameter(String key, String value, ParameterType where) { +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Request.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Request.java new file mode 100644 index 000000000..ff1b8fe8e --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Request.java @@ -0,0 +1,16 @@ +package io.quarkiverse.openapi.moqu.model; + +import java.util.Collection; + +/** + * Represents an HTTP request with essential details such as URL, HTTP method, + * example name, accepted header, and parameters. + * + * @param url the URL to which the request is sent. + * @param httpMethod the HTTP method (GET, POST, PUT, DELETE, etc.) used for the request. + * @param exampleName the name of the example associated with the request. + * @param accept the "Accept" header, which specifies the expected response format. + * @param parameters the list of parameters to be included in the request. + */ +public record Request(String url, String httpMethod, String exampleName, Header accept, Collection parameters) { +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/RequestResponsePair.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/RequestResponsePair.java new file mode 100644 index 000000000..214cb92de --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/RequestResponsePair.java @@ -0,0 +1,10 @@ +package io.quarkiverse.openapi.moqu.model; + +/** + * Represents a pair of an HTTP request and its corresponding response. + * + * @param request the HTTP request that was sent. + * @param response the HTTP response received for the given request. + */ +public record RequestResponsePair(Request request, Response response) { +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Response.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Response.java new file mode 100644 index 000000000..532345b9f --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/model/Response.java @@ -0,0 +1,20 @@ +package io.quarkiverse.openapi.moqu.model; + +import java.util.List; + +import io.swagger.v3.oas.models.media.MediaType; + +/** + * Represents an HTTP response with details such as the example name, media type, + * status code, content, and headers. + * + * @param exampleName the name of the example associated with this response. + * @param mediaType the media type of the response content (e.g., application/json, text/html), + * represented by {@link MediaType}. + * @param statusCode the HTTP status code of the response (e.g., 200, 404). + * @param content the body of the response as a string. + * @param headers the list of headers included in the response. + */ +public record Response(String exampleName, MediaType mediaType, int statusCode, + String content, List

headers) { +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapper.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapper.java new file mode 100644 index 000000000..83bf92e58 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapper.java @@ -0,0 +1,41 @@ +package io.quarkiverse.openapi.moqu.wiremock.mapper; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import io.quarkiverse.openapi.moqu.Moqu; +import io.quarkiverse.openapi.moqu.MoquMapper; +import io.quarkiverse.openapi.moqu.model.Request; +import io.quarkiverse.openapi.moqu.model.RequestResponsePair; +import io.quarkiverse.openapi.moqu.model.Response; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockMapping; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockRequest; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockResponse; + +public class WiremockMapper implements MoquMapper { + + @Override + public List map(Moqu moqu) { + ArrayList definitions = new ArrayList<>(); + for (RequestResponsePair pair : moqu.getRequestResponsePairs()) { + + Request mockRequest = pair.request(); + Response mockResponse = pair.response(); + + WiremockRequest request = new WiremockRequest(mockRequest.httpMethod(), mockRequest.url()); + + Map headers = new HashMap<>(); + + mockResponse.headers().forEach(item -> headers.put(item.name(), item.value())); + + WiremockResponse response = new WiremockResponse(mockResponse.statusCode(), mockResponse.content(), headers); + + definitions.add(new WiremockMapping( + request, response)); + } + + return definitions; + } +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockMapping.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockMapping.java new file mode 100644 index 000000000..bf703d7f9 --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockMapping.java @@ -0,0 +1,4 @@ +package io.quarkiverse.openapi.moqu.wiremock.model; + +public record WiremockMapping(WiremockRequest request, WiremockResponse response) { +} \ No newline at end of file diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockRequest.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockRequest.java new file mode 100644 index 000000000..3d663e79a --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockRequest.java @@ -0,0 +1,6 @@ +package io.quarkiverse.openapi.moqu.wiremock.model; + +public record WiremockRequest( + String method, + String url) { +} diff --git a/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockResponse.java b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockResponse.java new file mode 100644 index 000000000..bfbcb6eef --- /dev/null +++ b/moqu/core/src/main/java/io/quarkiverse/openapi/moqu/wiremock/model/WiremockResponse.java @@ -0,0 +1,8 @@ +package io.quarkiverse.openapi.moqu.wiremock.model; + +import java.util.Map; + +public record WiremockResponse(Integer status, + String body, + Map headers) { +} diff --git a/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporterTest.java b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporterTest.java new file mode 100644 index 000000000..8267b1ddd --- /dev/null +++ b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/OpenAPIMoquImporterTest.java @@ -0,0 +1,181 @@ +package io.quarkiverse.openapi.moqu; + +import static io.quarkiverse.openapi.moqu.TestUtils.readContentFromFile; + +import java.util.List; +import java.util.Map; + +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.quarkiverse.openapi.moqu.marshall.ObjectMapperFactory; + +class OpenAPIMoquImporterTest { + + private final MoquImporter sut = new OpenAPIMoquImporter(); + + @Test + @DisplayName("Should create a new definition from OpenAPI specification") + void shouldCreateANewDefinitionFromOpenAPISpecification() { + // act + String content = readContentFromFile("wiremock/one_example_in_the_same_path.yml"); + Moqu moqu = sut.parse(content); + + // assert + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(1); + softly.assertThat(moqu.getRequestResponsePairs().get(0)).satisfies(requestResponsePair -> { + softly.assertThat(requestResponsePair.request().accept().name()).isEqualTo("Accept"); + softly.assertThat(requestResponsePair.request().accept().value()).contains("application/json"); + softly.assertThat(requestResponsePair.request().exampleName()).isEqualTo("john"); + softly.assertThat(requestResponsePair.request().parameters()).hasSize(1); + softly.assertThat(requestResponsePair.request().parameters()).anySatisfy(parameters -> { + softly.assertThat(parameters.key()).isEqualTo("id"); + softly.assertThat(parameters.value()).isEqualTo("1"); + }); + }); + }); + } + + @Test + @DisplayName("Should throws exception when the OpenAPI is invalid") + void shouldThrowsExceptionWhenTheOpenAPIIsInvalid() { + // act, assert + Assertions.assertThrows(IllegalArgumentException.class, () -> { + sut.parse(""" + openapi: 3.0.3 + info: + version: 999-SNAPSHOT + """); + }); + } + + @Test + @DisplayName("Should handle OpenAPI with two path params") + void shouldHandleOpenAPIWithTwoPathParams() { + + // act + String content = readContentFromFile("wiremock/two_examples_in_the_same_path.yml"); + Moqu moqu = sut.parse(content); + + // assert + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(2); + softly.assertThat(moqu.getRequestResponsePairs()).allSatisfy(requestResponsePair -> { + softly.assertThat(requestResponsePair.request().accept().name()).isEqualTo("Accept"); + softly.assertThat(requestResponsePair.request().accept().value()).contains("application/json"); + }); + softly.assertThat(moqu.getRequestResponsePairs()).anySatisfy(requestResponsePair -> { + softly.assertThat(requestResponsePair.request().exampleName()).isEqualTo("john"); + softly.assertThat(requestResponsePair.request().parameters()).hasSize(1); + }); + softly.assertThat(moqu.getRequestResponsePairs()).anySatisfy(requestResponsePair -> { + softly.assertThat(requestResponsePair.request().exampleName()).isEqualTo("mary"); + softly.assertThat(requestResponsePair.request().parameters()).hasSize(1); + }); + }); + } + + @Test + @DisplayName("Should generate a response from ref") + void shouldGenerateAResponseFromRef() { + String content = readContentFromFile("wiremock/response_from_ref.yml"); + + Moqu moqu = sut.parse(content); + + // assert + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(1); + softly.assertThat(moqu.getRequestResponsePairs().get(0)).satisfies(requestResponsePair -> { + softly.assertThat(requestResponsePair.request().accept().name()).isEqualTo("Accept"); + softly.assertThat(requestResponsePair.request().accept().value()).contains("application/json"); + softly.assertThat(requestResponsePair.request().exampleName()).isEqualTo("quarkus"); + softly.assertThat(requestResponsePair.request().parameters()).hasSize(1); + softly.assertThat(requestResponsePair.request().parameters()).anySatisfy(parameters -> { + softly.assertThat(parameters.key()).isEqualTo("id"); + softly.assertThat(parameters.value()).isEqualTo("1"); + }); + }); + }); + } + + @Test + @DisplayName("Should generate a response from ref as array") + void shouldGenerateAResponseFromRefAsArray() { + String content = readContentFromFile("wiremock/response_from_ref_array.yml"); + Moqu moqu = sut.parse(content); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(1); + softly.assertThat(moqu.getRequestResponsePairs().get(0)).satisfies(requestResponsePair -> { + Map map = ObjectMapperFactory.getInstance().readValue( + requestResponsePair.response() + .content(), + Map.class); + softly.assertThat((List) map.get("versions")) + .hasSize(2); + + softly.assertThat(map.get("supportsJava")).isEqualTo(true); + + }); + }); + } + + @Test + @DisplayName("Should generate a response from $ref and with no $ref") + void shouldGenerateAResponseFromRefAndNoRef() { + String content = readContentFromFile("wiremock/response_from_ref_and_noref.yml"); + Moqu moqu = sut.parse(content); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(2); + softly.assertThat(moqu.getRequestResponsePairs()).anySatisfy(requestResponsePair -> { + Map map = ObjectMapperFactory.getInstance().readValue( + requestResponsePair.response() + .content(), + Map.class); + softly.assertThat((List) map.get("versions")) + .hasSize(2); + }); + + softly.assertThat(moqu.getRequestResponsePairs()).anySatisfy(requestResponsePair -> { + Map map = ObjectMapperFactory.getInstance().readValue( + requestResponsePair.response() + .content(), + Map.class); + softly.assertThat((List) map.get("versions")) + .hasSize(1); + }); + }); + } + + @Test + @DisplayName("Should generate a full OpenAPI specification") + void shouldGenerateAFullResponse() { + String content = readContentFromFile("wiremock/full.yml"); + Moqu moqu = sut.parse(content); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(moqu.getRequestResponsePairs()).isNotEmpty(); + softly.assertThat(moqu.getRequestResponsePairs()).hasSize(1); + softly.assertThat(moqu.getRequestResponsePairs().get(0)).satisfies(requestResponsePair -> { + Map map = ObjectMapperFactory.getInstance().readValue( + requestResponsePair.response() + .content(), + Map.class); + softly.assertThat((List) map.get("versions")) + .hasSize(2); + + softly.assertThat(map.get("supportsJava")).isEqualTo(true); + + softly.assertThat(map.get("contributors")).isEqualTo(1000); + + softly.assertThat(((Map) map.get("rules")).get("hello")).isEqualTo("world"); + }); + }); + } +} diff --git a/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/TestUtils.java b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/TestUtils.java new file mode 100644 index 000000000..2f8b1b571 --- /dev/null +++ b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/TestUtils.java @@ -0,0 +1,20 @@ +package io.quarkiverse.openapi.moqu; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; + +public class TestUtils { + + public static String readContentFromFile(String resourcePath) { + URL url = Thread.currentThread().getContextClassLoader().getResource((resourcePath)); + assert url != null; + try { + return Files.readString(Path.of(url.toURI())); + } catch (IOException | URISyntaxException e) { + return null; + } + } +} diff --git a/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapperTest.java b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapperTest.java new file mode 100644 index 000000000..9a8611bab --- /dev/null +++ b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockMapperTest.java @@ -0,0 +1,65 @@ +package io.quarkiverse.openapi.moqu.wiremock.mapper; + +import static io.quarkiverse.openapi.moqu.TestUtils.readContentFromFile; + +import java.util.List; + +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.quarkiverse.openapi.moqu.Moqu; +import io.quarkiverse.openapi.moqu.OpenAPIMoquImporter; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockMapping; + +class WiremockMapperTest { + + private final OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + private final WiremockMapper sut = new WiremockMapper(); + + @Test + @DisplayName("Should map one Wiremock definition") + void shouldMapOneWiremockDefinition() { + String content = readContentFromFile("wiremock/mapper/should_map_one_wiremock_definition.yml"); + + Moqu moqu = importer.parse(content); + + List definitions = sut.map(moqu); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).isNotEmpty(); + softly.assertThat(definitions).hasSize(1); + softly.assertThat(definitions).anySatisfy(definition -> { + softly.assertThat(definition.request().method()).isEqualTo("GET"); + softly.assertThat(definition.request().url()).isEqualTo("/users/1"); + softly.assertThat(definition.response().body()).isEqualTo("{\"id\": 1, \"name\": \"John Doe\"}"); + }); + }); + } + + @Test + @DisplayName("Should map two Wiremock definitions") + void shouldMapTwoWiremockDefinitions() { + String content = readContentFromFile("wiremock/mapper/should_map_two_wiremock_definition.yml"); + + Moqu mock = importer.parse(content); + + List definitions = sut.map(mock); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).isNotEmpty(); + softly.assertThat(definitions).hasSize(2); + softly.assertThat(definitions).anySatisfy(definition -> { + softly.assertThat(definition.request().method()).isEqualTo("GET"); + softly.assertThat(definition.request().url()).isEqualTo("/users/1"); + softly.assertThat(definition.response().body()).isEqualTo("{\"id\": 1, \"name\": \"John Doe\"}"); + }); + + softly.assertThat(definitions).anySatisfy(definition -> { + softly.assertThat(definition.request().method()).isEqualTo("GET"); + softly.assertThat(definition.request().url()).isEqualTo("/users/2"); + softly.assertThat(definition.response().body()).isEqualTo("{\"id\": 2, \"name\": \"Mary Doe\"}"); + }); + }); + } +} diff --git a/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockPathParamTest.java b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockPathParamTest.java new file mode 100644 index 000000000..abff5f59a --- /dev/null +++ b/moqu/core/src/test/java/io/quarkiverse/openapi/moqu/wiremock/mapper/WiremockPathParamTest.java @@ -0,0 +1,164 @@ +package io.quarkiverse.openapi.moqu.wiremock.mapper; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.quarkiverse.openapi.moqu.Moqu; +import io.quarkiverse.openapi.moqu.OpenAPIMoquImporter; +import io.quarkiverse.openapi.moqu.TestUtils; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockMapping; + +public class WiremockPathParamTest { + + @Test + @DisplayName("Should convert a OpenAPI with a single path param correctly") + void shouldMapOneWiremockDefinition() { + + String content = TestUtils.readContentFromFile("wiremock/path_param_one_path_param.yml"); + if (content == null) { + Assertions.fail("Was not possible to read the file!"); + } + + OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + + Moqu mock = importer.parse(content); + + WiremockMapper wiremockMapper = new WiremockMapper(); + + List definitions = wiremockMapper.map(mock); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).hasSize(1); + WiremockMapping definition = definitions.get(0); + + softly.assertThat(definition).satisfies(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/users/1"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()).isEqualTo("{\"name\": \"Quarkus\"}"); + }); + }); + } + + @Test + @DisplayName("Should convert with a two OpenAPI#paths each one with one path param") + void shouldMapTwoWiremockDefinitions() { + + String content = TestUtils.readContentFromFile("wiremock/path_param_two_params_but_different_path.yml"); + if (content == null) { + Assertions.fail("Was not possible to read the file!"); + } + + OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + + Moqu mock = importer.parse(content); + + WiremockMapper wiremockMapper = new WiremockMapper(); + + List definitions = wiremockMapper.map(mock); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).hasSize(2); + + softly.assertThat(definitions).anySatisfy(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/users/1"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()).isEqualTo("{\"name\": \"John Doe\"}"); + }); + + softly.assertThat(definitions).anySatisfy(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/frameworks/quarkus"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()) + .isEqualTo("{\"description\": \"Quarkus, build time augmentation toolkit\"}"); + }); + }); + } + + @Test + @DisplayName("Should convert with a combination of path param") + void shouldConvertWithACombinationOfPathParam() { + + String content = TestUtils.readContentFromFile("wiremock/path_param_two_path_params_combination.yml"); + if (content == null) { + Assertions.fail("Was not possible to read the file!"); + } + + OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + + Moqu mock = importer.parse(content); + + WiremockMapper wiremockMapper = new WiremockMapper(); + + List definitions = wiremockMapper.map(mock); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).hasSize(2); + + softly.assertThat(definitions).anySatisfy(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/users/1/books/80"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()) + .isEqualTo("{\"name\": \"Book for John\", \"chapters\": 8}"); + }); + + softly.assertThat(definitions).anySatisfy(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/users/2/books/70"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()) + .isEqualTo("{\"name\": \"Book for Mary\", \"chapters\": 10}"); + }); + }); + } + + @Test + @DisplayName("Should convert with a combination but only one with example") + void shouldConvertPathParamCombinationOnlyOneWithExample() { + + String content = TestUtils.readContentFromFile("wiremock/path_param_two_path_params_only_one_with_example.yml"); + if (content == null) { + Assertions.fail("Was not possible to read the file!"); + } + + OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + + Moqu mock = importer.parse(content); + + WiremockMapper wiremockMapper = new WiremockMapper(); + + List definitions = wiremockMapper.map(mock); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(definitions).hasSize(1); + + softly.assertThat(definitions).anySatisfy(wiremockDefinition -> { + // request + softly.assertThat(wiremockDefinition.request().url()).isEqualTo("/users/1/books/{bookId}"); + softly.assertThat(wiremockDefinition.request().method()).isEqualTo("GET"); + // response + softly.assertThat(wiremockDefinition.response().status()).isEqualTo(200); + softly.assertThat(wiremockDefinition.response().body()) + .isEqualTo("{\"name\": \"Book for John\", \"chapters\": 8}"); + }); + }); + } + +} diff --git a/moqu/core/src/test/resources/wiremock/full.yml b/moqu/core/src/test/resources/wiremock/full.yml new file mode 100644 index 000000000..d91f48923 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/full.yml @@ -0,0 +1,45 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/frameworks/{id}": + get: + parameters: + - name: id + in: path + examples: + quarkus: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/Framework" + description: Ok +components: + schemas: + Framework: + type: object + properties: + name: + type: string + example: "Quarkus" + versions: + type: array + example: ["999-SNAPSHOT", "3.15.1"] + supportsJava: + type: boolean + example: true + contributors: + type: integer + example: 1000 + rules: + type: object + example: + hello: world + diff --git a/moqu/core/src/test/resources/wiremock/mapper/should_map_one_wiremock_definition.yml b/moqu/core/src/test/resources/wiremock/mapper/should_map_one_wiremock_definition.yml new file mode 100644 index 000000000..92ea0200c --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/mapper/should_map_one_wiremock_definition.yml @@ -0,0 +1,28 @@ +openapi: 3.0.3 +info: + title: "Users API" + version: 1.0.0-alpha +servers: + - url: http://localhost:8888 +paths: + /users/{userId}: + get: + description: Get user by ID + parameters: + - name: userId + in: path + required: true + schema: + type: number + examples: + john: + value: 1 + responses: + "200": + description: Ok + content: + "application/json": + examples: + john: + value: + '{"id": 1, "name": "John Doe"}' \ No newline at end of file diff --git a/moqu/core/src/test/resources/wiremock/mapper/should_map_two_wiremock_definition.yml b/moqu/core/src/test/resources/wiremock/mapper/should_map_two_wiremock_definition.yml new file mode 100644 index 000000000..2dabf118f --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/mapper/should_map_two_wiremock_definition.yml @@ -0,0 +1,33 @@ +openapi: 3.0.3 +info: + title: "Users API" + version: 1.0.0-alpha +servers: + - url: http://localhost:8888 +paths: + /users/{userId}: + get: + description: Get user by ID + parameters: + - name: userId + in: path + required: true + schema: + type: number + examples: + john: + value: 1 + mary: + value: 2 + responses: + "200": + description: Ok + content: + "application/json": + examples: + john: + value: + '{"id": 1, "name": "John Doe"}' + mary: + value: + '{"id": 2, "name": "Mary Doe"}' \ No newline at end of file diff --git a/moqu/core/src/test/resources/wiremock/one_example_in_the_same_path.yml b/moqu/core/src/test/resources/wiremock/one_example_in_the_same_path.yml new file mode 100644 index 000000000..eac9598b5 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/one_example_in_the_same_path.yml @@ -0,0 +1,28 @@ +openapi: 3.0.3 +info: + title: "Users API" + version: 1.0.0-alpha +servers: + - url: http://localhost:8888 +paths: + /users/{id}: + get: + description: Get user by ID + parameters: + - name: id + in: path + required: true + schema: + type: number + examples: + john: + value: 1 + responses: + "200": + description: Ok + content: + "application/json": + examples: + john: + value: + '{"id": 1, "name": "John Doe"}' \ No newline at end of file diff --git a/moqu/core/src/test/resources/wiremock/path_param_one_path_param.yml b/moqu/core/src/test/resources/wiremock/path_param_one_path_param.yml new file mode 100644 index 000000000..a87227d57 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/path_param_one_path_param.yml @@ -0,0 +1,23 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/users/{userId}": + get: + parameters: + - name: userId + in: path + examples: + quarkus: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + value: '{"name": "Quarkus"}' + description: Ok diff --git a/moqu/core/src/test/resources/wiremock/path_param_two_params_but_different_path.yml b/moqu/core/src/test/resources/wiremock/path_param_two_params_but_different_path.yml new file mode 100644 index 000000000..26eb2dba8 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/path_param_two_params_but_different_path.yml @@ -0,0 +1,39 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/users/{userId}": + get: + parameters: + - name: userId + in: path + examples: + john: + value: 1 + responses: + 200: + content: + "application/json": + examples: + john: + value: '{"name": "John Doe"}' + description: Ok + "/frameworks/{name}": + get: + parameters: + - name: name + in: path + examples: + quarkus: + value: quarkus + responses: + 200: + content: + "application/json": + examples: + quarkus: + value: '{"description": "Quarkus, build time augmentation toolkit"}' + description: Ok diff --git a/moqu/core/src/test/resources/wiremock/path_param_two_path_params_combination.yml b/moqu/core/src/test/resources/wiremock/path_param_two_path_params_combination.yml new file mode 100644 index 000000000..140eec479 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/path_param_two_path_params_combination.yml @@ -0,0 +1,35 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/users/{userId}/books/{bookId}": + get: + parameters: + - name: userId + in: path + examples: + john: + value: 1 + mary: + value: 2 + - name: bookId + in: path + examples: + john: + value: 80 + mary: + value: 70 + + responses: + 200: + content: + "application/json": + examples: + john: + value: '{"name": "Book for John", "chapters": 8}' + mary: + value: '{"name": "Book for Mary", "chapters": 10}' + description: Ok diff --git a/moqu/core/src/test/resources/wiremock/path_param_two_path_params_only_one_with_example.yml b/moqu/core/src/test/resources/wiremock/path_param_two_path_params_only_one_with_example.yml new file mode 100644 index 000000000..3b1f159a0 --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/path_param_two_path_params_only_one_with_example.yml @@ -0,0 +1,25 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/users/{userId}/books/{bookId}": + get: + parameters: + - name: userId + in: path + examples: + john: + value: 1 + - name: bookId + in: path + responses: + 200: + content: + "application/json": + examples: + john: + value: '{"name": "Book for John", "chapters": 8}' + description: Ok \ No newline at end of file diff --git a/moqu/core/src/test/resources/wiremock/response_from_ref.yml b/moqu/core/src/test/resources/wiremock/response_from_ref.yml new file mode 100644 index 000000000..4e62b37fb --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/response_from_ref.yml @@ -0,0 +1,31 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/frameworks/{id}": + get: + parameters: + - name: id + in: path + examples: + quarkus: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/Framework" + description: Ok +components: + schemas: + Framework: + type: object + properties: + name: + type: string + example: "Quarkus" \ No newline at end of file diff --git a/moqu/core/src/test/resources/wiremock/response_from_ref_and_noref.yml b/moqu/core/src/test/resources/wiremock/response_from_ref_and_noref.yml new file mode 100644 index 000000000..b9537febc --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/response_from_ref_and_noref.yml @@ -0,0 +1,38 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/frameworks/{id}": + get: + parameters: + - name: id + in: path + examples: + quarkus: + value: 1 + vertx: + value: 2 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/Framework" + vertx: + value: '{ "name": "Vert.x", "versions": ["999-SNAPSHOT"]}' + description: Ok +components: + schemas: + Framework: + type: object + properties: + name: + type: string + example: "Quarkus" + versions: + type: array + example: [ "999-SNAPSHOT", "3.15.1" ] diff --git a/moqu/core/src/test/resources/wiremock/response_from_ref_array.yml b/moqu/core/src/test/resources/wiremock/response_from_ref_array.yml new file mode 100644 index 000000000..8707012bd --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/response_from_ref_array.yml @@ -0,0 +1,37 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/frameworks/{id}": + get: + parameters: + - name: id + in: path + examples: + quarkus: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/Framework" + description: Ok +components: + schemas: + Framework: + type: object + properties: + name: + type: string + example: "Quarkus" + versions: + type: array + example: ["999-SNAPSHOT", "3.15.1"] + supportsJava: + type: boolean + example: true diff --git a/moqu/core/src/test/resources/wiremock/two_examples_in_the_same_path.yml b/moqu/core/src/test/resources/wiremock/two_examples_in_the_same_path.yml new file mode 100644 index 000000000..2dabf118f --- /dev/null +++ b/moqu/core/src/test/resources/wiremock/two_examples_in_the_same_path.yml @@ -0,0 +1,33 @@ +openapi: 3.0.3 +info: + title: "Users API" + version: 1.0.0-alpha +servers: + - url: http://localhost:8888 +paths: + /users/{userId}: + get: + description: Get user by ID + parameters: + - name: userId + in: path + required: true + schema: + type: number + examples: + john: + value: 1 + mary: + value: 2 + responses: + "200": + description: Ok + content: + "application/json": + examples: + john: + value: + '{"id": 1, "name": "John Doe"}' + mary: + value: + '{"id": 2, "name": "Mary Doe"}' \ No newline at end of file diff --git a/moqu/deployment/pom.xml b/moqu/deployment/pom.xml new file mode 100644 index 000000000..0eb16fca6 --- /dev/null +++ b/moqu/deployment/pom.xml @@ -0,0 +1,66 @@ + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-parent + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-moqu-wiremock-deployment + Quarkus - Openapi Generator - Moqu - Wiremock - Deployment + + + + io.quarkus + quarkus-core-deployment + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-wiremock + ${project.version} + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-core + ${project.version} + + + + io.quarkus + quarkus-junit5-internal + + + + io.quarkus + quarkus-vertx-http-deployment + + + + io.rest-assured + rest-assured + test + + + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java new file mode 100644 index 000000000..94ed8ff79 --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java @@ -0,0 +1,102 @@ +package io.quarkiverse.openapi.generator; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Stream; + +import org.jboss.logging.Logger; + +import io.quarkiverse.openapi.generator.items.MoquBuildItem; +import io.quarkiverse.openapi.generator.items.MoquProjectBuildItem; +import io.quarkiverse.openapi.generator.moqu.MoquConfig; +import io.quarkiverse.openapi.moqu.Moqu; +import io.quarkiverse.openapi.moqu.OpenAPIMoquImporter; +import io.quarkus.deployment.IsDevelopment; +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.runtime.util.ClassPathUtils; + +public class MoquProjectProcessor { + + private static final Logger LOGGER = Logger.getLogger(MoquProjectProcessor.class); + + private static final Set SUPPORTED_EXTENSIONS = Set.of("yaml", "yml", "json"); + + @BuildStep + MoquProjectBuildItem generate(MoquConfig config) { + try { + + HashMap filesMap = new HashMap<>(); + ClassPathUtils.consumeAsPaths(config.resourceDir(), path -> { + try { + boolean directory = Files.isDirectory(path); + if (directory) { + try (Stream pathStream = Files.find(path, Integer.MAX_VALUE, + (p, a) -> Files.isRegularFile(p) && SUPPORTED_EXTENSIONS.contains( + getExtension(p.getFileName().toString())))) { + + pathStream.forEach(p -> { + try { + String filename = p.getFileName().toString(); + + MoquProjectBuildItem.File moquFile = new MoquProjectBuildItem.File( + removeExtension(filename), getExtension(filename), Files.readString(p)); + + filesMap.put(filename, moquFile); + + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + return new MoquProjectBuildItem(filesMap); + + } catch (IOException e) { + LOGGER.error("Was not possible to scan Moqu project files.", e); + throw new RuntimeException(e); + } + } + + @BuildStep(onlyIf = { IsDevelopment.class }) + void consume(Optional moquProject, + BuildProducer moquMocks) { + + OpenAPIMoquImporter importer = new OpenAPIMoquImporter(); + moquProject.ifPresent(project -> { + for (Map.Entry spec : project.specs().entrySet()) { + + MoquProjectBuildItem.File moquFile = spec.getValue(); + + Moqu moqu = importer.parse(moquFile.content()); + + moquMocks.produce(new MoquBuildItem( + moquFile.filename(), + moquFile.extension(), + moqu)); + } + }); + } + + public static String getExtension(String path) { + Objects.requireNonNull(path, "path is required"); + final int i = path.lastIndexOf("."); + return i > 0 ? path.substring(i + 1) : null; + } + + public static String removeExtension(String path) { + Objects.requireNonNull(path, "path is required"); + final int i = path.lastIndexOf("."); + return i > 0 ? path.substring(0, i) : path; + } +} diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquWiremockProcessor.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquWiremockProcessor.java new file mode 100644 index 000000000..086f65f88 --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquWiremockProcessor.java @@ -0,0 +1,12 @@ +package io.quarkiverse.openapi.generator; + +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; + +public class MoquWiremockProcessor { + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem("moqu-wiremock"); + } +} diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquModel.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquModel.java new file mode 100644 index 000000000..38cc5c795 --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquModel.java @@ -0,0 +1,5 @@ +package io.quarkiverse.openapi.generator.devui; + +public record MoquModel(String name, String link) { + +} diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquWiremockDevUIProcessor.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquWiremockDevUIProcessor.java new file mode 100644 index 000000000..0514701af --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/devui/MoquWiremockDevUIProcessor.java @@ -0,0 +1,81 @@ +package io.quarkiverse.openapi.generator.devui; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.quarkiverse.openapi.generator.items.MoquBuildItem; +import io.quarkiverse.openapi.generator.moqu.recorder.MoquRoutesRecorder; +import io.quarkiverse.openapi.moqu.marshall.ObjectMapperFactory; +import io.quarkiverse.openapi.moqu.wiremock.mapper.WiremockMapper; +import io.quarkiverse.openapi.moqu.wiremock.model.WiremockMapping; +import io.quarkus.deployment.IsDevelopment; +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.annotations.ExecutionTime; +import io.quarkus.deployment.annotations.Record; +import io.quarkus.devui.spi.page.CardPageBuildItem; +import io.quarkus.devui.spi.page.Page; +import io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem; +import io.quarkus.vertx.http.deployment.RouteBuildItem; + +public class MoquWiremockDevUIProcessor { + + private static final String MAPPINGS_KEY = "mappings"; + private static final String WIREMOCK_MAPPINGS_JSON = "/wiremock-mappings.json"; + + @BuildStep(onlyIf = IsDevelopment.class) + @Record(ExecutionTime.RUNTIME_INIT) + void generateWiremock(List mocks, NonApplicationRootPathBuildItem nonApplicationRootPath, + BuildProducer routes, + MoquRoutesRecorder recorder) { + + WiremockMapper wiremockMapper = new WiremockMapper(); + ObjectMapper objMapper = ObjectMapperFactory.getInstance(); + + for (MoquBuildItem mock : mocks) { + List wiremockMappings = wiremockMapper.map(mock.getMoqu()); + try { + String json = objMapper.writeValueAsString(Map.of( + MAPPINGS_KEY, wiremockMappings)); + + String uri = mock.prefixUri(nonApplicationRootPath.resolvePath("moqu")) + .concat(WIREMOCK_MAPPINGS_JSON); + + routes.produce(nonApplicationRootPath.routeBuilder() + .routeFunction(uri, recorder.handleFile(json)) + .displayOnNotFoundPage() + .build()); + + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + } + + @BuildStep(onlyIf = { IsDevelopment.class }) + CardPageBuildItem cardPageBuildItem( + List moquMocks, + NonApplicationRootPathBuildItem nonApplicationRootPath) { + CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + + List models = moquMocks.stream() + .map(m -> new MoquModel(m.getFullFilename(), m.prefixUri( + nonApplicationRootPath.resolvePath("moqu")) + .concat("/wiremock-mappings.json"))) + .toList(); + + cardPageBuildItem.addBuildTimeData("mocks", models); + + cardPageBuildItem.addPage( + Page.webComponentPageBuilder() + .title("Moqu Wiremock") + .icon("font-awesome-solid:server") + .componentLink("qwc-moqu.js") + .staticLabel(String.valueOf(moquMocks.size()))); + + return cardPageBuildItem; + } +} diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquBuildItem.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquBuildItem.java new file mode 100644 index 000000000..a6285f734 --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquBuildItem.java @@ -0,0 +1,37 @@ +package io.quarkiverse.openapi.generator.items; + +import io.quarkiverse.openapi.moqu.Moqu; +import io.quarkus.builder.item.MultiBuildItem; + +public final class MoquBuildItem extends MultiBuildItem { + + private final String filename; + private final String extension; + private final Moqu moqu; + + public MoquBuildItem(String filename, String extension, Moqu moqu) { + this.filename = filename; + this.extension = extension; + this.moqu = moqu; + } + + public String getFilename() { + return filename; + } + + public String getExtension() { + return extension; + } + + public Moqu getMoqu() { + return moqu; + } + + public String getFullFilename() { + return filename + "." + extension; + } + + public String prefixUri(String basePath) { + return String.format("%s/%s/%s", basePath, extension, filename); + } +} diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquProjectBuildItem.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquProjectBuildItem.java new file mode 100644 index 000000000..ea8de60a5 --- /dev/null +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/items/MoquProjectBuildItem.java @@ -0,0 +1,22 @@ +package io.quarkiverse.openapi.generator.items; + +import java.util.Collections; +import java.util.Map; + +import io.quarkus.builder.item.SimpleBuildItem; + +public final class MoquProjectBuildItem extends SimpleBuildItem { + + private final Map specs; + + public MoquProjectBuildItem(Map specs) { + this.specs = specs; + } + + public Map specs() { + return Collections.unmodifiableMap(specs); + } + + public record File(String filename, String extension, String content) { + } +} diff --git a/moqu/deployment/src/main/resources/dev-ui/qwc-moqu.js b/moqu/deployment/src/main/resources/dev-ui/qwc-moqu.js new file mode 100644 index 000000000..31d42cded --- /dev/null +++ b/moqu/deployment/src/main/resources/dev-ui/qwc-moqu.js @@ -0,0 +1,96 @@ +import {LitElement, html, css} from 'lit'; +import {columnBodyRenderer} from '@vaadin/grid/lit.js'; +import {mocks} from 'build-time-data'; +import '@vaadin/grid'; +import '@vaadin/vertical-layout'; +import '@vaadin/icon'; + +/** + * This component shows the Moqu mocks + */ +export class QwcMoqu extends LitElement { + + static styles = css` + .arctable { + height: 100%; + padding-bottom: 10px; + } + + .moqu-icon { + font-size: small; + color: var(--lumo-contrast-50pct); + cursor: pointer; + } + `; + + static properties = { + _mocks: {state: true} + }; + + constructor() { + super(); + this._mocks = mocks; + } + + render() { + if (this._mocks) { + return this._renderMockList(); + } else { + return html`No mocks found`; + } + } + + _renderMockList() { + return html` + + + + + + + + + `; + } + + _nameRenderer(mock) { + return html` + + ${mock.name} + + `; + } + + _linkDownloadRenderer(mock) { + return html` + + + + + + `; + } + + _linkSeeRenderer(mock) { + return html` + + + + + + `; + } + + +} + +customElements.define('qwc-moqu', QwcMoqu); diff --git a/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java b/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java new file mode 100644 index 000000000..76347c237 --- /dev/null +++ b/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java @@ -0,0 +1,47 @@ +package io.quarkiverse.openapi.generator; + +import org.hamcrest.Matchers; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusDevModeTest; +import io.restassured.RestAssured; + +public class MoquProjectProcessorTest { + + @RegisterExtension + static final QuarkusDevModeTest unitTest = new QuarkusDevModeTest() + .withApplicationRoot(javaArchive -> javaArchive + .addAsResource("api.yaml", "openapi/openapi.yaml") + .addAsResource("apiv2.json", "openapi/api.json")); + + @Test + void testModeAsSee() { + RestAssured.given() + .when().get("/q/moqu/yaml/openapi/wiremock-mappings.json?mode=see") + .then() + .statusCode(200) + .body(Matchers.containsString("Alice")) + .log().ifError(); + } + + @Test + void testModeAsDownload() { + RestAssured.given() + .when().get("/q/moqu/yaml/openapi/wiremock-mappings.json") + .then() + .statusCode(200) + .body(Matchers.containsString("Alice")) + .log().ifError(); + } + + @Test + void testModeAsDownloadUsingJson() { + RestAssured.given() + .when().get("/q/moqu/json/api/wiremock-mappings.json") + .then() + .statusCode(200) + .body(Matchers.containsString("Alice")) + .log().ifError(); + } +} diff --git a/moqu/deployment/src/test/resources/api.yaml b/moqu/deployment/src/test/resources/api.yaml new file mode 100644 index 000000000..802ebe7e6 --- /dev/null +++ b/moqu/deployment/src/test/resources/api.yaml @@ -0,0 +1,35 @@ +openapi: 3.0.3 +servers: + - url: http://localhost:8888 +info: + version: 999-SNAPSHOT + title: Method GET one path param +paths: + "/users/{id}": + get: + parameters: + - name: id + in: path + examples: + alice: + value: 1 + responses: + 200: + content: + "application/json": + examples: + quarkus: + $ref: "#/components/schemas/User" + description: Ok +components: + schemas: + User: + type: object + properties: + name: + type: string + example: "Alice" + age: + type: number + example: 80 + diff --git a/moqu/deployment/src/test/resources/apiv2.json b/moqu/deployment/src/test/resources/apiv2.json new file mode 100644 index 000000000..4bbe37c02 --- /dev/null +++ b/moqu/deployment/src/test/resources/apiv2.json @@ -0,0 +1,60 @@ +{ + "openapi": "3.0.3", + "servers": [ + { + "url": "http://localhost:8888" + } + ], + "info": { + "version": "999-SNAPSHOT", + "title": "Method GET one path param" + }, + "paths": { + "/users/{id}": { + "get": { + "parameters": [ + { + "name": "id", + "in": "path", + "examples": { + "alice": { + "value": 1 + } + } + } + ], + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "examples": { + "quarkus": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "User": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Alice" + }, + "age": { + "type": "number", + "example": 80 + } + } + } + } + } +} diff --git a/moqu/pom.xml b/moqu/pom.xml new file mode 100644 index 000000000..79569a72b --- /dev/null +++ b/moqu/pom.xml @@ -0,0 +1,19 @@ + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-parent + 3.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + pom + quarkus-openapi-generator-moqu-parent + Quarkus - Openapi Generator - Moqu - Parent + + + core + deployment + runtime + + diff --git a/moqu/runtime/pom.xml b/moqu/runtime/pom.xml new file mode 100644 index 000000000..404ab0227 --- /dev/null +++ b/moqu/runtime/pom.xml @@ -0,0 +1,77 @@ + + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-parent + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-moqu-wiremock + Quarkus - Openapi Generator - Moqu - Wiremock + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-core + ${project.version} + + + + io.quarkus + quarkus-core + + + + io.quarkus + quarkus-vertx-http + + + + io.quarkus + quarkus-junit5 + test + + + + io.rest-assured + rest-assured + test + + + + + + io.quarkus + quarkus-extension-maven-plugin + ${quarkus.version} + + + compile + + extension-descriptor + + + ${project.groupId}:${project.artifactId}-deployment:${project.version} + + true + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + diff --git a/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/MoquConfig.java b/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/MoquConfig.java new file mode 100644 index 000000000..ee9912ee8 --- /dev/null +++ b/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/MoquConfig.java @@ -0,0 +1,19 @@ +package io.quarkiverse.openapi.generator.moqu; + +import io.quarkus.runtime.annotations.ConfigPhase; +import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; + +@ConfigMapping(prefix = "quarkus.openapi-generator.moqu") +@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) +public interface MoquConfig { + + String DEFAULT_RESOURCE_DIR = "openapi"; + + /** + * Path to the Moqu (relative to the project). + */ + @WithDefault(DEFAULT_RESOURCE_DIR) + String resourceDir(); +} diff --git a/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/recorder/MoquRoutesRecorder.java b/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/recorder/MoquRoutesRecorder.java new file mode 100644 index 000000000..86d211c01 --- /dev/null +++ b/moqu/runtime/src/main/java/io/quarkiverse/openapi/generator/moqu/recorder/MoquRoutesRecorder.java @@ -0,0 +1,47 @@ +package io.quarkiverse.openapi.generator.moqu.recorder; + +import java.util.function.Consumer; + +import io.quarkus.runtime.annotations.Recorder; +import io.vertx.core.Handler; +import io.vertx.core.buffer.Buffer; +import io.vertx.core.http.HttpMethod; +import io.vertx.core.http.HttpServerRequest; +import io.vertx.core.http.HttpServerResponse; +import io.vertx.ext.web.Route; +import io.vertx.ext.web.RoutingContext; + +@Recorder +public class MoquRoutesRecorder { + + public Consumer handleFile(String content) { + return new Consumer() { + @Override + public void accept(Route route) { + route.method(HttpMethod.GET); + route.handler(new Handler() { + @Override + public void handle(RoutingContext routingContext) { + HttpServerResponse response = routingContext.response(); + HttpServerRequest request = routingContext.request(); + + String mode = request.getParam("mode"); + if (mode != null && mode.equalsIgnoreCase("see")) { + response.putHeader("Content-Type", "application/json; charset=utf-8"); + response.end(Buffer.buffer(content)); + } else { + setForDownloading(response, content); + } + } + + }); + } + }; + } + + private void setForDownloading(HttpServerResponse response, String content) { + response.putHeader("Content-Type", "application/octet-stream"); + response.putHeader("Content-Disposition", "attachment; filename=wiremock-mappings.json"); + response.end(Buffer.buffer(content)); + } +} diff --git a/moqu/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/moqu/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 000000000..c9383283a --- /dev/null +++ b/moqu/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,11 @@ +name: "OpenAPI Generator - Moqu - Wiremock Generator" +artifact: ${project.groupId}:${project.artifactId}:${project.version} +description: The OpenAPI Generator Moqu Wiremock extension converts an OpenAPI specification into a Wiremock definition. +metadata: + keywords: + - "openapi" + - "openapi-generator" + - "wiremock" + categories: + - "web" + status: "preview" diff --git a/pom.xml b/pom.xml index 391eecb3a..3028925ad 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,8 @@ client server + docs + moqu :git:git@github.com:quarkiverse/quarkus-openapi-generator.git @@ -32,6 +34,8 @@ 3.27.3 4.1.2 3.12.1 + 2.35.2 + 2.1.22 From 18d01825a4f3d4267d3274b4d7234977a85bcbe5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 07:46:46 -0300 Subject: [PATCH 113/166] Bump quarkus.version from 3.19.3 to 3.21.0 (#1056) Bumps `quarkus.version` from 3.19.3 to 3.21.0. Updates `io.quarkus:quarkus-bom` from 3.19.3 to 3.21.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.3...3.21.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.19.3 to 3.21.0 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.19.3 to 3.21.0 Updates `io.quarkus:quarkus-extension-processor` from 3.19.3 to 3.21.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.19.3 to 3.21.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.19.3...3.21.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3028925ad..2cb0e1ac3 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.19.3 + 3.21.0 1.1.1.Final 3.26.3 3.27.3 From 95a32db9c08507bb239a13713e2dae4ec4826215 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 07:47:18 -0300 Subject: [PATCH 114/166] Bump commons-io:commons-io from 2.16.1 to 2.18.0 (#1057) Bumps commons-io:commons-io from 2.16.1 to 2.18.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- moqu/core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index 06bd3b4a2..2a06bd1ba 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -13,7 +13,7 @@ Quarkus :: Openapi Generator :: Moqu :: Core - 2.16.1 + 2.18.0 From 7cabf3a05ca2c3fcb2cb8098aea08553f1fa2471 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 07:47:55 -0300 Subject: [PATCH 115/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.22 to 2.1.25 (#1058) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.22 to 2.1.25. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.22...v2.1.25) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2cb0e1ac3..a549bc416 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.1.2 3.12.1 2.35.2 - 2.1.22 + 2.1.25 From bbe84e7c0e817107fa81fcabb534dc997121c204 Mon Sep 17 00:00:00 2001 From: vladprado <76523900+vladprado@users.noreply.github.com> Date: Thu, 20 Mar 2025 07:50:46 -0300 Subject: [PATCH 116/166] Add codestarts to server extension (#1037) Add codestart to server extension - issue #1021 Adding codestarter to server extension - issue #1021 minor fixes and tests requested in PR Test update and final touches to codestart server extension Codestart test adjustments Adjust codestarts Add deps version Use install instead Add codestart for the server extension - issue #1021 Adding codestarts to server extension - issue #1021 Adding codestarts to server extension - issue #1021 --- .github/workflows/build.yml | 4 +- server/integration-tests/codestarts/pom.xml | 109 ++++++++++++++++++ .../src/main/resources/application.properties | 0 ...sOpenAPIGeneratorServerCodestartsTest.java | 27 +++++ server/integration-tests/pom.xml | 3 +- server/runtime/pom.xml | 20 ++++ .../openapi-generator-codestart/codestart.yml | 17 +++ .../java/README.tpl.qute.md | 24 ++++ .../java/src/main/resources/application.yml | 5 + .../src/main/resources/openapi/openapi.yml | 42 +++++++ .../resources/META-INF/quarkus-extension.yaml | 19 +++ 11 files changed, 267 insertions(+), 3 deletions(-) create mode 100644 server/integration-tests/codestarts/pom.xml create mode 100755 server/integration-tests/codestarts/src/main/resources/application.properties create mode 100644 server/integration-tests/codestarts/src/test/java/io/quarkiverse/openapi/server/generator/it/QuarkusOpenAPIGeneratorServerCodestartsTest.java create mode 100644 server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml create mode 100644 server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md create mode 100644 server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml create mode 100644 server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml create mode 100644 server/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f8f27159e..1e46d5f34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,7 +50,7 @@ jobs: cache: 'maven' - name: Build with Maven - run: mvn '-Dorg.slf4j.simpleLogger.log.org.openapitools=off' -B formatter:validate impsort:check verify --file pom.xml + run: mvn '-Dorg.slf4j.simpleLogger.log.org.openapitools=off' -B formatter:validate impsort:check install --file pom.xml build_reactive: name: Build - RESTEasy Reactive @@ -79,4 +79,4 @@ jobs: cache: 'maven' - name: Build with Maven - run: mvn -Presteasy-reactive '-Dorg.slf4j.simpleLogger.log.org.openapitools=off' -B formatter:validate impsort:check verify --file pom.xml + run: mvn -Presteasy-reactive '-Dorg.slf4j.simpleLogger.log.org.openapitools=off' -B formatter:validate impsort:check install --file pom.xml diff --git a/server/integration-tests/codestarts/pom.xml b/server/integration-tests/codestarts/pom.xml new file mode 100644 index 000000000..6f1941e5f --- /dev/null +++ b/server/integration-tests/codestarts/pom.xml @@ -0,0 +1,109 @@ + + + + quarkus-openapi-generator-server-integration-tests-parent + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + + quarkus-openapi-generator-server-integration-tests-codestarts + Quarkus - Openapi Generator - Server - Integration Tests - Codestarts + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-server + ${project.version} + + + io.quarkus + quarkus-devtools-testing + test + + + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus.version} + + + maven-surefire-plugin + ${version.surefire.plugin} + + + org.jboss.logmanager.LogManager + ${maven.home} + ${settings.localRepository} + + + + + maven-failsafe-plugin + ${failsafe-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + ${settings.localRepository} + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + + -parameters + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + copy-resources + generate-resources + + copy-resources + + + ${project.build.outputDirectory} + + + + ${project.basedir}/../runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java + + false + + + + + + + + io.quarkus + quarkus-maven-plugin + + + + build + generate-code + + + + + + + diff --git a/server/integration-tests/codestarts/src/main/resources/application.properties b/server/integration-tests/codestarts/src/main/resources/application.properties new file mode 100755 index 000000000..e69de29bb diff --git a/server/integration-tests/codestarts/src/test/java/io/quarkiverse/openapi/server/generator/it/QuarkusOpenAPIGeneratorServerCodestartsTest.java b/server/integration-tests/codestarts/src/test/java/io/quarkiverse/openapi/server/generator/it/QuarkusOpenAPIGeneratorServerCodestartsTest.java new file mode 100644 index 000000000..d9a480c1b --- /dev/null +++ b/server/integration-tests/codestarts/src/test/java/io/quarkiverse/openapi/server/generator/it/QuarkusOpenAPIGeneratorServerCodestartsTest.java @@ -0,0 +1,27 @@ +package io.quarkiverse.openapi.server.generator.it; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartCatalog; +import io.quarkus.devtools.testing.codestarts.QuarkusCodestartTest; + +public class QuarkusOpenAPIGeneratorServerCodestartsTest { + + @RegisterExtension + public static QuarkusCodestartTest codestartTest = QuarkusCodestartTest.builder() + .languages(QuarkusCodestartCatalog.Language.JAVA) + .setupStandaloneExtensionTest("io.quarkiverse.openapi.generator:quarkus-openapi-generator-server").build(); + + @Test + void testContent() throws Throwable { + codestartTest + .assertThatGeneratedFile(QuarkusCodestartCatalog.Language.JAVA, "src/main/resources/application.properties") + .content() + .contains("quarkus.openapi.generator.spec=openapi.yml"); + codestartTest + .assertThatGeneratedFile(QuarkusCodestartCatalog.Language.JAVA, "src/main/resources/openapi/openapi.yml") + .content() + .contains("title: Generated API"); + } +} diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 6653bd53c..7850ef7e7 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -16,6 +16,7 @@ reactive resteasy + codestarts - \ No newline at end of file + diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index f11333b23..e2d516092 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -59,6 +59,26 @@ + + maven-jar-plugin + + + generate-codestart-jar + generate-resources + + jar + + + ${project.basedir}/src/main + + codestarts/** + + codestarts + true + + + + diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml new file mode 100644 index 000000000..69006d404 --- /dev/null +++ b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml @@ -0,0 +1,17 @@ +name: openapi-generator-server +ref: openapi-generator-server +type: code +tags: extension-codestart +metadata: + title: OpenAPI Generator Codestart - Server Extension + description: This codestart generates a simple API with OpenAPI documentation. + related-guide-section: https://docs.quarkiverse.io/quarkus-openapi-generator/dev/server.html +language: + base: + data: + resource: + class-name: YourResource + path: "/your-api" + dependencies: + - io.quarkus:quarkus-resteasy + - io.quarkus:quarkus-smallrye-openapi \ No newline at end of file diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md new file mode 100644 index 000000000..0d8dc1409 --- /dev/null +++ b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md @@ -0,0 +1,24 @@ +{#include readme-header /} + +## Requirements + +If you do not have added the `io.quarkus:quarkus-smallrye-openapi` extension in your project, add it first: + +### SmallRye OpenAPI: + +Quarkus CLI: + +```bash +quarkus ext add io.quarkus:quarkus-smallrye-openapi +``` + +Maven: +```bash +./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-smallrye-openapi" +``` + +Gradle: + +```bash +./gradlew addExtension --extensions="io.quarkus:quarkus-smallrye-openapi" +``` \ No newline at end of file diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml new file mode 100644 index 000000000..ea7674128 --- /dev/null +++ b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml @@ -0,0 +1,5 @@ +quarkus: + openapi: + generator: + spec: + openapi.yml \ No newline at end of file diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml new file mode 100644 index 000000000..707eca341 --- /dev/null +++ b/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml @@ -0,0 +1,42 @@ +openapi: 3.0.3 +info: + title: Generated API + version: "1.0" +paths: + /pets: + get: + responses: + 200: + description: OK + content: + application/json: { } + post: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + 200: + description: OK + content: + application/json: { } + delete: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + 200: + description: OK + content: + application/json: { } +components: + schemas: + Pet: + properties: + description: + type: string + name: + type: string \ No newline at end of file diff --git a/server/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/server/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 000000000..fce904e16 --- /dev/null +++ b/server/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,19 @@ +name: "OpenAPI Generator - REST Server Generator" +description: "Provides personalized code generation to get started in a Server project " +artifact: ${project.groupId}:${project.artifactId}:${project.version} +metadata: + keywords: + - "openapi" + - "openapi-generator-server" + - "rest" + - "server" + categories: + - "web" + guide: "https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html" + icon-url: "https://raw.githubusercontent.com/quarkiverse/quarkus-openapi-generator/main/docs/modules/ROOT/assets/images/openapi.svg" + status: "preview" + codestart: + name: "openapi-generator-server" + languages: + - "java" + artifact: "io.quarkiverse.openapi.generator:quarkus-openapi-generator-server:codestarts:jar:${project.version}" \ No newline at end of file From caf823b9c679d96c1a1d16e1431c7177652b3c8b Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:11:39 -0300 Subject: [PATCH 117/166] Upgrade apicurio-codegen to 1.2.0.Final (#1015) --- .../ROOT/pages/includes/server-getting-started.adoc | 10 ++++++++++ pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 6 +++++- server/integration-tests/resteasy/pom.xml | 6 +++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/modules/ROOT/pages/includes/server-getting-started.adoc b/docs/modules/ROOT/pages/includes/server-getting-started.adoc index 44bdf7660..ea91a4739 100644 --- a/docs/modules/ROOT/pages/includes/server-getting-started.adoc +++ b/docs/modules/ROOT/pages/includes/server-getting-started.adoc @@ -10,6 +10,16 @@ Add the following dependency to your project's `pom.xml` file: ---- +By default, the generated resources are annotated with Microprofile OpenAPI annotations, add the `io.quarkus:quarkus-smallrye-openapi` dependency to your project’s `pom.xml` file: + +[source,xml] +---- + + io.quarkus + quarkus-smallrye-openapi + +---- + Note that since this extension has not been yet released, you'll need a local build of the dependency. You will also need to add or update the `quarkus-maven-plugin` configuration with the following: diff --git a/pom.xml b/pom.xml index a549bc416..e136f9dc4 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ UTF-8 UTF-8 3.21.0 - 1.1.1.Final + 1.2.0.Final 3.26.3 3.27.3 4.1.2 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index e5c6cfa8e..398339507 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -48,6 +48,10 @@ rest-assured test + + io.quarkus + quarkus-smallrye-openapi + @@ -106,4 +110,4 @@ - \ No newline at end of file + diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 7a74d2bd7..e74007f47 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -48,6 +48,10 @@ rest-assured test + + io.quarkus + quarkus-smallrye-openapi + @@ -106,4 +110,4 @@ - \ No newline at end of file + From 0b857359368b6a80f84a65303faa1ff5981e0ced Mon Sep 17 00:00:00 2001 From: vladprado <76523900+vladprado@users.noreply.github.com> Date: Thu, 20 Mar 2025 19:45:33 -0300 Subject: [PATCH 118/166] #1045 - Refactor inputExtension method to inputExtensions (#1052) #1045 - Refactor inputExtension method to inputExtensions# This is a combination of 2 commits. #1045 - Refactor inputExtension method to inputExtensions --- .../codegen/OpenApiGeneratorCodeGen.java | 13 +++++++++++++ .../codegen/OpenApiGeneratorCodeGenBase.java | 3 ++- .../codegen/OpenApiGeneratorJsonCodeGen.java | 14 -------------- .../codegen/OpenApiGeneratorOutputPaths.java | 4 +--- .../codegen/OpenApiGeneratorYamlCodeGen.java | 14 -------------- .../codegen/OpenApiGeneratorYmlCodeGen.java | 14 -------------- .../services/io.quarkus.deployment.CodeGenProvider | 4 +--- .../it/circuit/breaker/SimpleOpenApiTest.java | 2 +- 8 files changed, 18 insertions(+), 50 deletions(-) create mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGen.java delete mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorJsonCodeGen.java delete mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYamlCodeGen.java delete mode 100644 client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYmlCodeGen.java diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGen.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGen.java new file mode 100644 index 000000000..499304bc9 --- /dev/null +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGen.java @@ -0,0 +1,13 @@ +package io.quarkiverse.openapi.generator.deployment.codegen; + +public class OpenApiGeneratorCodeGen extends OpenApiGeneratorCodeGenBase { + @Override + public String providerId() { + return OpenApiGeneratorOutputPaths.OPENAPI_PATH; + } + + @Override + public String[] inputExtensions() { + return new String[] { JSON, YAML, YML }; + } +} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index 619611011..079189d8a 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; @@ -132,7 +133,7 @@ public boolean trigger(CodeGenContext context) throws CodeGenException { .filter(Files::isRegularFile) .filter(path -> { String fileName = path.getFileName().toString(); - return fileName.endsWith(inputExtension()) + return Arrays.stream(this.inputExtensions()).anyMatch(fileName::endsWith) && !filesToExclude.contains(fileName) && (filesToInclude.isEmpty() || filesToInclude.contains(fileName)); }).toList(); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorJsonCodeGen.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorJsonCodeGen.java deleted file mode 100644 index f20ac5123..000000000 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorJsonCodeGen.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.quarkiverse.openapi.generator.deployment.codegen; - -public class OpenApiGeneratorJsonCodeGen extends OpenApiGeneratorCodeGenBase { - - @Override - public String providerId() { - return OpenApiGeneratorOutputPaths.JSON_PATH; - } - - @Override - public String inputExtension() { - return JSON; - } -} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorOutputPaths.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorOutputPaths.java index 0a22d8bda..2bfc71f6a 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorOutputPaths.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorOutputPaths.java @@ -9,9 +9,7 @@ public class OpenApiGeneratorOutputPaths { - public static final String YAML_PATH = "open-api-yaml"; - public static final String YML_PATH = "open-api-yml"; - public static final String JSON_PATH = "open-api-json"; + public static final String OPENAPI_PATH = "open-api"; public static final String STREAM_PATH = "open-api-stream"; private static final Collection rootPaths = Arrays.asList(STREAM_PATH); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYamlCodeGen.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYamlCodeGen.java deleted file mode 100644 index e3be71761..000000000 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYamlCodeGen.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.quarkiverse.openapi.generator.deployment.codegen; - -public class OpenApiGeneratorYamlCodeGen extends OpenApiGeneratorCodeGenBase { - - @Override - public String providerId() { - return OpenApiGeneratorOutputPaths.YAML_PATH; - } - - @Override - public String inputExtension() { - return YAML; - } -} \ No newline at end of file diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYmlCodeGen.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYmlCodeGen.java deleted file mode 100644 index 5c14d8154..000000000 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorYmlCodeGen.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.quarkiverse.openapi.generator.deployment.codegen; - -public class OpenApiGeneratorYmlCodeGen extends OpenApiGeneratorCodeGenBase { - - @Override - public String providerId() { - return OpenApiGeneratorOutputPaths.YML_PATH; - } - - @Override - public String inputExtension() { - return YML; - } -} \ No newline at end of file diff --git a/client/deployment/src/main/resources/META-INF/services/io.quarkus.deployment.CodeGenProvider b/client/deployment/src/main/resources/META-INF/services/io.quarkus.deployment.CodeGenProvider index 075e856f5..da12e914a 100644 --- a/client/deployment/src/main/resources/META-INF/services/io.quarkus.deployment.CodeGenProvider +++ b/client/deployment/src/main/resources/META-INF/services/io.quarkus.deployment.CodeGenProvider @@ -1,4 +1,2 @@ -io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorJsonCodeGen -io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorYamlCodeGen -io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorYmlCodeGen +io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorCodeGen io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorStreamCodeGen \ No newline at end of file diff --git a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java index 73221966b..a0a5cd9ff 100644 --- a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java +++ b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java @@ -24,7 +24,7 @@ class SimpleOpenApiTest { @Test void circuitBreaker() throws IOException { - Path generatedRestClient = Paths.get("target", "generated-sources", "open-api-json", "org", "acme", + Path generatedRestClient = Paths.get("target", "generated-sources", "open-api", "org", "acme", "openapi", "simple", "api", "DefaultApi.java"); assertThat(generatedRestClient) From 5a83192e430d7ce19d487a87cfbe626e17b1108c Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Fri, 21 Mar 2025 13:37:20 -0300 Subject: [PATCH 119/166] Release 2.9.0 (#1063) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 892324b19..3cbc24c97 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.8.2 + current-version: 2.9.0 next-version: 3.0.0-SNAPSHOT From 011f1c6c2b1305c91843b6d30a8dcd06ff64751a Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:38:03 +0000 Subject: [PATCH 120/166] Update the latest release version 2.9.0 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 519b97c66..b44f00d68 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.8.2 +:project-version: 2.9.0 :examples-dir: ./../examples/ From cacab9406a319f0044ef8743f8d4fd6fa44d0c21 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:46:22 +0000 Subject: [PATCH 121/166] [maven-release-plugin] prepare release 2.9.0 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- moqu/core/pom.xml | 6 ++---- moqu/deployment/pom.xml | 5 ++--- moqu/pom.xml | 2 +- moqu/runtime/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/codestarts/pom.xml | 5 ++--- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 54 files changed, 58 insertions(+), 62 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 51ea8dc82..9fae30377 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index dcf21dff4..6c7650822 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index ccb5fd1c5..82b59cda6 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 021f68a8d..7a6bb0b03 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 7becd9518..2adc45b90 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 21ae66723..18f6d8fdd 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 6ec30ed95..c0a31ca3f 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-change-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index bc691350c..00c54ab66 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 22c590c25..0aee1c170 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 944bc43aa..23b7c3476 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index be6e5e381..8dc862082 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index b6afadfc2..98adf0d10 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 65ca3ddcf..7b31d5b0d 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index b9d0bf03e..50af7a0f3 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 39667b7b5..506d2c09c 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 96c1a7d09..cf174e00f 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index f8c9fd9c7..cfe4beaa3 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-generation-input Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 2d699f578..a1439fd95 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-generation-tests Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 237a370f6..61ce74f8b 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 9f5162425..6890af72d 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 32cdab012..ad4a3ba40 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 74108384d..40c33a117 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index c0bc3c05d..201c2a3e6 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index eb71dd670..4da2a3a5a 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 878b31e21..db8ad6524 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index efa483146..04bdaed3a 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index bc8e14ecb..3e2e2efd6 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 7098980c1..a920e704e 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 184df406a..a52475050 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index fa996369c..033125a4c 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index be31c56f8..11cb592f2 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 4b2c58ce4..453617ab6 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index dbc79ac92..3e9c137f2 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 5b678a044..b7a07a01b 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 1b90d9ae9..b358430cc 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7d258890f..c82b28058 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 752f4dee3..cd71b4d84 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 0dfc506b4..ee6a54e89 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 9c394590e..5b2d9f0ca 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 67a5e03aa..96a11f1e5 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index e72a863c7..1fd90f85f 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 3f90e53db..56318c216 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml quarkus-openapi-generator-docs diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index 2a06bd1ba..ecffc6c41 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.9.0 quarkus-openapi-generator-moqu-core diff --git a/moqu/deployment/pom.xml b/moqu/deployment/pom.xml index 0eb16fca6..d9184c88f 100644 --- a/moqu/deployment/pom.xml +++ b/moqu/deployment/pom.xml @@ -1,10 +1,9 @@ - + io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/moqu/pom.xml b/moqu/pom.xml index 79569a72b..5e25a9de3 100644 --- a/moqu/pom.xml +++ b/moqu/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/moqu/runtime/pom.xml b/moqu/runtime/pom.xml index 404ab0227..81fa52f1c 100644 --- a/moqu/runtime/pom.xml +++ b/moqu/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/pom.xml b/pom.xml index e136f9dc4..ec43e3cfb 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.9.0 pom Quarkus - OpenAPI Generator - Parent @@ -21,7 +21,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.9.0 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 270e10270..3e952c7b1 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/codestarts/pom.xml b/server/integration-tests/codestarts/pom.xml index 6f1941e5f..3672e1621 100644 --- a/server/integration-tests/codestarts/pom.xml +++ b/server/integration-tests/codestarts/pom.xml @@ -1,10 +1,9 @@ - + quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 7850ef7e7..0366ac86a 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index 398339507..2a0e12a69 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index e74007f47..abab93297 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index e60c5ed55..a29c57d15 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index e2d516092..1cca36f89 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.9.0 ../pom.xml 4.0.0 From 65edb177c2586690e3f93cd92b004760aae025cb Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:46:22 +0000 Subject: [PATCH 122/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- moqu/core/pom.xml | 2 +- moqu/deployment/pom.xml | 2 +- moqu/pom.xml | 2 +- moqu/runtime/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/codestarts/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 54 files changed, 55 insertions(+), 55 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 9fae30377..51ea8dc82 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 6c7650822..dcf21dff4 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 82b59cda6..ccb5fd1c5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 7a6bb0b03..021f68a8d 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 2adc45b90..7becd9518 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 18f6d8fdd..21ae66723 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index c0a31ca3f..6ec30ed95 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index 00c54ab66..bc691350c 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 0aee1c170..22c590c25 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 23b7c3476..944bc43aa 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 8dc862082..be6e5e381 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 98adf0d10..b6afadfc2 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 7b31d5b0d..65ca3ddcf 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index 50af7a0f3..b9d0bf03e 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 506d2c09c..39667b7b5 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index cf174e00f..96c1a7d09 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index cfe4beaa3..f8c9fd9c7 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index a1439fd95..2d699f578 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 61ce74f8b..237a370f6 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 6890af72d..9f5162425 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index ad4a3ba40..32cdab012 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 40c33a117..74108384d 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index 201c2a3e6..c0bc3c05d 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 4da2a3a5a..eb71dd670 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index db8ad6524..878b31e21 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index 04bdaed3a..efa483146 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 3e2e2efd6..bc8e14ecb 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index a920e704e..7098980c1 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index a52475050..184df406a 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 033125a4c..fa996369c 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 11cb592f2..be31c56f8 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 453617ab6..4b2c58ce4 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 3e9c137f2..dbc79ac92 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index b7a07a01b..5b678a044 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index b358430cc..1b90d9ae9 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index c82b28058..7d258890f 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index cd71b4d84..752f4dee3 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index ee6a54e89..0dfc506b4 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 5b2d9f0ca..9c394590e 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 96a11f1e5..67a5e03aa 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 1fd90f85f..e72a863c7 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index 56318c216..3f90e53db 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index ecffc6c41..47292201a 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.9.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-moqu-core diff --git a/moqu/deployment/pom.xml b/moqu/deployment/pom.xml index d9184c88f..5d111692b 100644 --- a/moqu/deployment/pom.xml +++ b/moqu/deployment/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/moqu/pom.xml b/moqu/pom.xml index 5e25a9de3..79569a72b 100644 --- a/moqu/pom.xml +++ b/moqu/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/moqu/runtime/pom.xml b/moqu/runtime/pom.xml index 81fa52f1c..404ab0227 100644 --- a/moqu/runtime/pom.xml +++ b/moqu/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index ec43e3cfb..e136f9dc4 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.9.0 + 3.0.0-SNAPSHOT pom Quarkus - OpenAPI Generator - Parent @@ -21,7 +21,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.9.0 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 3e952c7b1..270e10270 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/codestarts/pom.xml b/server/integration-tests/codestarts/pom.xml index 3672e1621..dff0b139a 100644 --- a/server/integration-tests/codestarts/pom.xml +++ b/server/integration-tests/codestarts/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 0366ac86a..7850ef7e7 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index 2a0e12a69..398339507 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index abab93297..e74007f47 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index a29c57d15..e60c5ed55 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 1cca36f89..e2d516092 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.9.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From 04a46b6730ccc1e9dcd1fbfcf8a2411dbbe22d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Guilherme=20Hagemann?= <42047435+jghagemann@users.noreply.github.com> Date: Sun, 23 Mar 2025 11:33:47 -0300 Subject: [PATCH 123/166] improving form clarity (#1062) --- .github/ISSUE_TEMPLATE/bug-report.yml | 100 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature-request.yml | 60 +++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 000000000..4083272ee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,100 @@ +name: Bug Report +description: Create a bug report +labels: ["type: bug"] +body: + + - type: markdown + attributes: + value: | + Thank you for contributing with Quarkus OpenAPI Generator with this bug report! Submit your issue below: + + - type: markdown + attributes: + value: | + ## Bug Report + + - type: dropdown + id: extension + attributes: + label: "Tell us the extension you're using" + multiple: false + options: + - Client + - Server + - Mock + validations: + required: true + + - type: textarea + id: i-tried-this + attributes: + label: "I tried this:" + placeholder: "What did you try to do? A code snippet or example helps." + validations: + required: true + + - type: textarea + id: instead-what-happened + attributes: + label: "This happened:" + placeholder: "What happened instead of what you've expected?" + validations: + required: true + + - type: textarea + id: what-did-you-expect + attributes: + label: "I expected this:" + placeholder: "What did you expect to happen? Describe the output or behavior you expected to see (unless it's obvious)." + + - type: textarea + id: workaround + attributes: + label: "Is there a workaround?" + placeholder: "What's the workaround to avoid this issue?" + + - type: textarea + id: reproduce + attributes: + label: "How can we try to reproduce the issue?" + placeholder: "What steps or configuration do we need to reproduce the erratic behavior?" + + - type: textarea + attributes: + label: Anything else? + placeholder: | + Links? References? Logs? Anything that will give us more context about the issue you are encountering. + Tip: You can attach images or log files by dragging files in. + + - type: markdown + attributes: + value: | + ## Environment + + - type: input + attributes: + label: Output of `uname -a` or `ver` + - type: input + attributes: + label: Output of `java -version` + - type: input + attributes: + label: Quarkus OpenApi version or git rev + - type: input + attributes: + label: Build tool (ie. output of `mvnw --version` or `gradlew --version`) + - type: textarea + attributes: + label: Additional information + description: > + If you have any additional information for us, please feel free to use the field below. + You can attach screenshots or screen recordings here, by + dragging and dropping files in the field below. + + - type: textarea + attributes: + label: Community Notes + value: | + + * Please vote by adding a 👍 reaction to the issue to help us prioritize. + * If you are interested to work on this issue, please leave a comment.name: Bug Report 🐞 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 000000000..5c965d0ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,60 @@ +name: Feature Request +description: Request a new feature +labels: ["type: feature"] +body: + + - type: markdown + attributes: + value: | + :pray: Thanks for taking the time to fill out this feature request! + + - type: markdown + attributes: + value: | + ## Feature Request + + - type: dropdown + id: extension + attributes: + label: "Tell us the extension to which you'd like to add the feature." + multiple: false + options: + - Client + - Server + - Mock + validations: + required: true + + - type: textarea + id: what-would-you-like-to-add + attributes: + label: "What kind of feature would you like to add?" + placeholder: "Description of the feature you'd like to see." + validations: + required: true + + - type: textarea + id: proposals + attributes: + label: "Proposal(s):" + placeholder: "Describe your proposal(s) and any relevant details here." + + - type: textarea + id: alternatives + attributes: + label: "Alternative(s):" + placeholder: "Describe any alternative approaches, options, or suggestions you’d like to consider." + + - type: textarea + id: additional-info + attributes: + label: "Additional info:" + placeholder: "Provide any supplementary details, context, or supporting information here." + + - type: textarea + attributes: + label: Community Notes + value: | + + * Please vote by adding a 👍 reaction to the feature to help us prioritize. + * If you want to work on this feature, please leave a comment. \ No newline at end of file From 80c63260ece76dd38dde0b0612ec17282579f87c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 11:37:23 -0300 Subject: [PATCH 124/166] docs: add jghagemann as a contributor for doc (#1068) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index fb43d2e72..b552c03cc 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -436,6 +436,15 @@ "contributions": [ "doc" ] + }, + { + "login": "jghagemann", + "name": "João Guilherme Hagemann", + "avatar_url": "https://avatars.githubusercontent.com/u/42047435?v=4", + "profile": "https://github.com/jghagemann", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index f1906cf90..9cf435d39 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-47-orange.svg?style=flat-square)](#contributors-) [![Build]()](https://github.com/quarkiverse/quarkus-openapi-generator/actions?query=workflow%3ABuild) [![Maven Central](https://img.shields.io/maven-central/v/io.quarkiverse.openapi.generator/quarkus-openapi-generator.svg?label=Maven%20Central&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.openapi.generator/quarkus-openapi-generator) @@ -104,6 +104,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Juan Piero Santisteban Quiroz
Juan Piero Santisteban Quiroz

💻 ⚠️ Jochen Schalanda
Jochen Schalanda

💻 Luis Fabrício De Llamas
Luis Fabrício De Llamas

📖 + João Guilherme Hagemann
João Guilherme Hagemann

📖 From 4fe173b8671ca500d231e794055dc1cfd649851f Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Mon, 24 Mar 2025 08:54:36 -0300 Subject: [PATCH 125/166] Add description to server/runtime/pom.xml (#1069) --- server/runtime/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index e2d516092..69fd55b67 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -11,6 +11,7 @@ quarkus-openapi-generator-server Quarkus - OpenAPI Generator - Server + Generates REST servers based on OpenAPI specification files From 2a6e2c2c6c468eff0292a8d8a1a4beb3b484e5f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 08:30:39 -0300 Subject: [PATCH 126/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.25 to 2.1.26 (#1072) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.25 to 2.1.26. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.25...v2.1.26) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e136f9dc4..127a82f4a 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.1.2 3.12.1 2.35.2 - 2.1.25 + 2.1.26
From f739e6b022b466c9f7213525260c510fed869f51 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Mon, 31 Mar 2025 09:08:03 -0300 Subject: [PATCH 127/166] Adjust moqu wiremock docs (#1080) * Adjust Moqu Wiremock documentation * Remove dollar from expression --- docs/modules/ROOT/pages/moqu.adoc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/modules/ROOT/pages/moqu.adoc b/docs/modules/ROOT/pages/moqu.adoc index 846cd9bbc..cb8e62c1f 100644 --- a/docs/modules/ROOT/pages/moqu.adoc +++ b/docs/modules/ROOT/pages/moqu.adoc @@ -15,16 +15,16 @@ Currently, this extension supports only link:https://wiremock.org/[WireMock] def [source,xml] ---- - io.quarkiverse.openapi.generator - quarkus-openapi-generator-moqu - {project-version} + io.quarkiverse.openapi.generator + quarkus-openapi-generator-moqu-wiremock + {project-version} ---- Now, create the following OpenAPI specification file under your `src/resources/openapi` directory: [source,yaml] -.src/main/openapi/hello.yaml +.src/main/resources/openapi/hello.yaml ---- openapi: 3.0.3 servers: @@ -74,11 +74,11 @@ components: Execute now your application on Dev mode, and access the Dev UI for getting you wiremock stubbing: -image::moqu-devui-card-framework.png[] +image::moqu-devui-card-framework.png[alt=Moque Dev UI card,width=640,height=480] Click on `Moqu Wiremock`, you will se a table containing all wiremock definitions: -image::table-wiremock.png[] +image::table-wiremock.png[alt=Wiremock mappings table,width=640,height=480] Now, you can `see` or `download` the Wiremock stubbing. @@ -203,4 +203,4 @@ The Wiremock definition using the OpenAPI specification above, looks something l } ] } ----- \ No newline at end of file +---- From f77cbfec9c14fe6696dc679a9685472f7b42a37b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 09:32:44 -0300 Subject: [PATCH 128/166] Bump com.github.javaparser:javaparser-core from 3.26.3 to 3.26.4 (#1084) Bumps [com.github.javaparser:javaparser-core](https://github.com/javaparser/javaparser) from 3.26.3 to 3.26.4. - [Release notes](https://github.com/javaparser/javaparser/releases) - [Changelog](https://github.com/javaparser/javaparser/blob/master/changelog.md) - [Commits](https://github.com/javaparser/javaparser/compare/javaparser-parent-3.26.3...javaparser-parent-3.26.4) --- updated-dependencies: - dependency-name: com.github.javaparser:javaparser-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 127a82f4a..671de6596 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ UTF-8 3.21.0 1.2.0.Final - 3.26.3 + 3.26.4 3.27.3 4.1.2 3.12.1 From 6985a1f7f5fdacc612a661ab64bfef875127232f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 09:17:16 -0300 Subject: [PATCH 129/166] Bump quarkus.version from 3.21.0 to 3.21.1 (#1087) Bumps `quarkus.version` from 3.21.0 to 3.21.1. Updates `io.quarkus:quarkus-bom` from 3.21.0 to 3.21.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.0...3.21.1) Updates `io.quarkus:quarkus-maven-plugin` from 3.21.0 to 3.21.1 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.21.0 to 3.21.1 Updates `io.quarkus:quarkus-extension-processor` from 3.21.0 to 3.21.1 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.21.0 to 3.21.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.0...3.21.1) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.21.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.21.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.21.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.21.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.21.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 671de6596..a144e5aa8 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.21.0 + 3.21.1 1.2.0.Final 3.26.4 3.27.3 From 81ca0f5be733451b368191ddead48c5cf4517f7b Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:43:08 -0300 Subject: [PATCH 130/166] Fix #1035 - Add Interfaces to Configuration objects (#1089) Signed-off-by: Ricardo Zanini --- .../deployment/CommonItemConfig.java | 6 + .../generator/deployment/SpecItemConfig.java | 13 + .../openapi-generator-codestart/codestart.yml | 6 +- .../openapi/generator/AuthConfig.java | 125 +++++--- .../includes/quarkus-openapi-generator.adoc | 271 ++++++++++++++++++ ...i-generator_quarkus.openapi-generator.adoc | 271 ++++++++++++++++++ 6 files changed, 645 insertions(+), 47 deletions(-) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index 487403b55..f0fffc0a6 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -177,4 +177,10 @@ public interface CommonItemConfig { */ @WithName("equals-hashcode") Optional equalsHashcode(); + + /** + * Add additional properties as attribute. + */ + @WithName("additional-properties-as-attribute") + Optional additionalPropertiesAsAttribute(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index bffb801fd..32ae2f30b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -19,6 +19,12 @@ public interface SpecItemConfig extends CommonItemConfig { @WithName("base-package") Optional basePackage(); + /** + * Custom config key to use in place of the openapi spec file + */ + @WithName("config-key") + Optional configKey(); + /** * Suffix name for generated api classes */ @@ -55,4 +61,11 @@ public interface SpecItemConfig extends CommonItemConfig { */ @WithName("remove-operation-id-prefix-count") Optional removeOperationIdPrefixCount(); + + /** + * Set serializable model + */ + @WithName("serializable-model") + Optional serializableModel(); + } diff --git a/client/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml b/client/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml index cc83535aa..29eabb85d 100644 --- a/client/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml +++ b/client/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml @@ -3,6 +3,6 @@ ref: openapi-generator type: code tags: extension-codestart metadata: - title: OpenAPI Generator Codestart - description: Start to code with the OpenAPI Generator extension. - related-guide-section: https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html \ No newline at end of file + title: OpenAPI Generator Client Codestart + description: Start to code with the OpenAPI Generator Client extension. + related-guide-section: https://docs.quarkiverse.io/quarkus-openapi-generator/dev/client.html \ No newline at end of file diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java index 5a1e57987..0169d1524 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthConfig.java @@ -1,23 +1,18 @@ package io.quarkiverse.openapi.generator; -import java.util.Map; import java.util.Optional; -import io.quarkiverse.openapi.generator.providers.ApiKeyAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; -import io.quarkiverse.openapi.generator.providers.BearerAuthenticationProvider; import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; /** * This class represents the runtime authentication related configuration for an individual securityScheme present * on an OpenApi spec definition, i.e. the provided files. */ @ConfigGroup -public class AuthConfig { +public interface AuthConfig { - public static final String TOKEN_PROPAGATION = "token-propagation"; - public static final String HEADER_NAME = "header-name"; + String TOKEN_PROPAGATION = "token-propagation"; + String HEADER_NAME = "header-name"; /** * Enables the authentication token propagation for this particular securityScheme. @@ -31,8 +26,7 @@ public class AuthConfig { * @see SpecItemConfig * @see OpenApiGeneratorConfig */ - @ConfigItem(defaultValue = "false") - public Optional tokenPropagation; + Optional tokenPropagation(); /** * Configures a particular http header attribute from were to take the security token from when the token propagation @@ -47,48 +41,91 @@ public class AuthConfig { * @see SpecItemConfig * @see OpenApiGeneratorConfig */ - @ConfigItem - public Optional headerName; + Optional headerName(); /** - * Configures a particular parameter value to be used by any of the different internal authentication filters - * that processes the different securityScheme definitions. - *

+ * Sets the Basic Authentication username for a given OpenAPI securityScheme. + *

* For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of - * http basic authentication type, the following configuration can establish the user and password to be used. - * must be used. - *

+ * http basic authentication type, the following configuration can establish the user to be used. + *

* quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName - * quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword * - * @see AuthsConfig - * @see SpecItemConfig - * @see OpenApiGeneratorConfig - * @see BasicAuthenticationProvider - * @see BearerAuthenticationProvider - * @see ApiKeyAuthenticationProvider + * @return the username portion for Basic Authentication + * @see AuthConfig#password() + * @see 4.8.27.2.1 Basic Authentication + * Sample */ - @ConfigItem(name = ConfigItem.PARENT) - public Map authConfigParams; + Optional username(); - public Optional getTokenPropagation() { - return tokenPropagation; - } + /** + * Sets the Basic Authentication password for a given OpenAPI securityScheme. + *

+ * For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of + * http basic authentication type, the following configuration can establish the password to be used. + *

+ * quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword + *

+ * Ignored if the given securityScheme is not Basic Authentication + * + * @return the password portion for Basic Authentication + * @see AuthConfig#username() + * @see 4.8.27.2.1 Basic Authentication + * Sample + */ + Optional password(); - public Optional getHeaderName() { - return headerName; - } + /** + * Sets the Bearer Token for a given OpenAPI securityScheme. + *

+ * For example, given a file named petstore.json with a securityScheme named "petstore-bearer-auth", that is of + * bearer authentication type, the following configuration can establish the token to be used. + *

+ * quarkus.openapi-generator.petstore_json.auth.petstore_bearer_auth.token=1234567890 + *

+ * Ignored if the given securityScheme is not Bearer Token Authentication + * + * @return the token + * @see 4.8.27.2.3 JWT Bearer Sample + */ + Optional bearerToken(); - public Optional getConfigParam(String paramName) { - return Optional.ofNullable(authConfigParams.get(paramName)); - } + /** + * Sets the API Key for a given OpenAPI securityScheme. + *

+ * For example, given a file named petstore.json with a securityScheme named "petstore-apikey-auth", that is of + * API Key authentication type, the following configuration can establish the API Key to be used. + *

+ * quarkus.openapi-generator.petstore_json.auth.petstore_apikey_auth.api-key=${MY_SECRET_KEY_IN_AN_ENV_VAR} + *

+ * Ignored if the given securityScheme is not API Key Authentication + * + * @return the token + * @see 4.8.27.2.2 API Key Samplee + */ + Optional apiKey(); - @Override - public String toString() { - return "AuthConfig{" + - "tokenPropagation=" + tokenPropagation + - ", headerName=" + headerName + - ", authConfigParams=" + authConfigParams + - '}'; - } + /** + * Only valid for API Key Authentication. + *

+ * When to add the `Authorization` value to the API Key in the authentication header. + *

+ * For example, if this property is set to `true`, the API Key will be sent to the server in the header along with + * `Authorization`: + *

+ * [source] + * --- + * Authentication: Authorization MY-API-KEY + * --- + *

+ * If set to `false`, the header should be: + *

+ * [source] + * --- + * Authentication: MY-API-KEY + * --- + * + * @return whether to use the prefix `Authorization` when sending an API Key using headers. + */ + Optional useAuthorizationHeaderValue(); } diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index 4e1262425..bcb8f8e72 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -454,6 +454,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-properties-as-attribute]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-properties-as-attribute[`quarkus.openapi-generator.codegen.additional-properties-as-attribute`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-properties-as-attribute+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add additional properties as attribute. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] @@ -1048,6 +1069,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-properties-as-attribute]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-properties-as-attribute[`quarkus.openapi-generator.codegen.spec."spec-item".additional-properties-as-attribute`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-properties-as-attribute+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add additional properties as attribute. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] @@ -1069,6 +1111,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-config-key]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-config-key[`quarkus.openapi-generator.codegen.spec."spec-item".config-key`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".config-key+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Custom config key to use in place of the openapi spec file + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__CONFIG_KEY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__CONFIG_KEY+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix+++[] @@ -1195,5 +1258,213 @@ endif::add-copy-button-to-env-var[] |int | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-serializable-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-serializable-model[`quarkus.openapi-generator.codegen.spec."spec-item".serializable-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".serializable-model+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Set serializable model + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SERIALIZABLE_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SERIALIZABLE_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enables the authentication token propagation for this particular securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".header-name+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-username]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-username[`quarkus.openapi-generator."item-configs".auth."auth-configs".username`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".username+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Basic Authentication username for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USERNAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USERNAME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-password]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-password[`quarkus.openapi-generator."item-configs".auth."auth-configs".password`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".password+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Basic Authentication password for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the password to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword + +Ignored if the given securityScheme is not Basic Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__PASSWORD+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__PASSWORD+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-bearer-token]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-bearer-token[`quarkus.openapi-generator."item-configs".auth."auth-configs".bearer-token`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".bearer-token+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Bearer Token for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-bearer-auth", that is of bearer authentication type, the following configuration can establish the token to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_bearer_auth.token=1234567890 + +Ignored if the given securityScheme is not Bearer Token Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__BEARER_TOKEN+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__BEARER_TOKEN+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-api-key]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-api-key[`quarkus.openapi-generator."item-configs".auth."auth-configs".api-key`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".api-key+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the API Key for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-apikey-auth", that is of API Key authentication type, the following configuration can establish the API Key to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_apikey_auth.api-key=$++{++MY_SECRET_KEY_IN_AN_ENV_VAR++}++ + +Ignored if the given securityScheme is not API Key Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__API_KEY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__API_KEY+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-use-authorization-header-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-use-authorization-header-value[`quarkus.openapi-generator."item-configs".auth."auth-configs".use-authorization-header-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".use-authorization-header-value+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Only valid for API Key Authentication. + +When to add the `Authorization` value to the API Key in the authentication header. + +For example, if this property is set to `true`, the API Key will be sent to the server in the header along with `Authorization`: + +++[++source++]++ --- Authentication: Authorization MY-API-KEY --- + +If set to `false`, the header should be: + +++[++source++]++ --- Authentication: MY-API-KEY --- + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USE_AUTHORIZATION_HEADER_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USE_AUTHORIZATION_HEADER_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + |=== diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc index 4e1262425..bcb8f8e72 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -454,6 +454,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-properties-as-attribute]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-additional-properties-as-attribute[`quarkus.openapi-generator.codegen.additional-properties-as-attribute`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.additional-properties-as-attribute+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add additional properties as attribute. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] @@ -1048,6 +1069,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-properties-as-attribute]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-additional-properties-as-attribute[`quarkus.openapi-generator.codegen.spec."spec-item".additional-properties-as-attribute`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".additional-properties-as-attribute+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Add additional properties as attribute. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__ADDITIONAL_PROPERTIES_AS_ATTRIBUTE+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] @@ -1069,6 +1111,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-config-key]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-config-key[`quarkus.openapi-generator.codegen.spec."spec-item".config-key`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".config-key+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Custom config key to use in place of the openapi spec file + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__CONFIG_KEY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__CONFIG_KEY+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-api-name-suffix[`quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".api-name-suffix+++[] @@ -1195,5 +1258,213 @@ endif::add-copy-button-to-env-var[] |int | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-serializable-model]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-serializable-model[`quarkus.openapi-generator.codegen.spec."spec-item".serializable-model`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".serializable-model+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Set serializable model + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SERIALIZABLE_MODEL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__SERIALIZABLE_MODEL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Enables the authentication token propagation for this particular securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-header-name[`quarkus.openapi-generator."item-configs".auth."auth-configs".header-name`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".header-name+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios. + +For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-username]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-username[`quarkus.openapi-generator."item-configs".auth."auth-configs".username`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".username+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Basic Authentication username for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USERNAME+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USERNAME+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-password]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-password[`quarkus.openapi-generator."item-configs".auth."auth-configs".password`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".password+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Basic Authentication password for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the password to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword + +Ignored if the given securityScheme is not Basic Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__PASSWORD+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__PASSWORD+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-bearer-token]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-bearer-token[`quarkus.openapi-generator."item-configs".auth."auth-configs".bearer-token`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".bearer-token+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the Bearer Token for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-bearer-auth", that is of bearer authentication type, the following configuration can establish the token to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_bearer_auth.token=1234567890 + +Ignored if the given securityScheme is not Bearer Token Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__BEARER_TOKEN+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__BEARER_TOKEN+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-api-key]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-api-key[`quarkus.openapi-generator."item-configs".auth."auth-configs".api-key`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".api-key+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Sets the API Key for a given OpenAPI securityScheme. + +For example, given a file named petstore.json with a securityScheme named "petstore-apikey-auth", that is of API Key authentication type, the following configuration can establish the API Key to be used. + +quarkus.openapi-generator.petstore_json.auth.petstore_apikey_auth.api-key=$++{++MY_SECRET_KEY_IN_AN_ENV_VAR++}++ + +Ignored if the given securityScheme is not API Key Authentication + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__API_KEY+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__API_KEY+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-use-authorization-header-value]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-use-authorization-header-value[`quarkus.openapi-generator."item-configs".auth."auth-configs".use-authorization-header-value`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".use-authorization-header-value+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Only valid for API Key Authentication. + +When to add the `Authorization` value to the API Key in the authentication header. + +For example, if this property is set to `true`, the API Key will be sent to the server in the header along with `Authorization`: + +++[++source++]++ --- Authentication: Authorization MY-API-KEY --- + +If set to `false`, the header should be: + +++[++source++]++ --- Authentication: MY-API-KEY --- + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USE_AUTHORIZATION_HEADER_VALUE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__USE_AUTHORIZATION_HEADER_VALUE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +| + |=== From 1b5fdfdf9b78e96a3e1b042abf6839ce8309ad8a Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Tue, 8 Apr 2025 09:54:55 -0300 Subject: [PATCH 131/166] Fix #1065 - Add Dynamic URL support (#1094) * Add @Url annotation by default on every api.qute generated methods Signed-off-by: Ricardo Zanini * Fix #1065 - Add Dynamic URL support Signed-off-by: Ricardo Zanini * Remove debug leftovers Signed-off-by: Ricardo Zanini --------- Signed-off-by: Ricardo Zanini --- .../generator/deployment/CodegenConfig.java | 3 +- .../generator/deployment/SpecItemConfig.java | 11 + .../codegen/OpenApiGeneratorCodeGenBase.java | 3 + .../OpenApiClientGeneratorWrapper.java | 6 + .../templates/libraries/microprofile/api.qute | 6 +- .../OpenApiClientGeneratorWrapperTest.java | 447 +++++++----------- docs/modules/ROOT/pages/client.adoc | 5 + .../ROOT/pages/includes/dynamic-url.adoc | 16 + .../includes/quarkus-openapi-generator.adoc | 21 + ...i-generator_quarkus.openapi-generator.adoc | 21 + docs/pom.xml | 2 +- 11 files changed, 270 insertions(+), 271 deletions(-) create mode 100644 docs/modules/ROOT/pages/includes/dynamic-url.adoc diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index 883a6cf95..d926ac2f5 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -77,7 +77,8 @@ enum ConfigName { GENERATE_MODELS("generate-models"), BEAN_VALIDATION("use-bean-validation"), SERIALIZABLE_MODEL("serializable-model"), - EQUALS_HASHCODE("equals-hashcode"); + EQUALS_HASHCODE("equals-hashcode"), + USE_DYNAMIC_URL("use-dynamic-url"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index 32ae2f30b..8c6652124 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -2,6 +2,7 @@ import java.util.Optional; +import io.smallrye.config.WithDefault; import io.smallrye.config.WithName; /* @@ -68,4 +69,14 @@ public interface SpecItemConfig extends CommonItemConfig { @WithName("serializable-model") Optional serializableModel(); + /** + * Whether to enable Dynamic URLs on APIs methods. + * By enabling this property every method on `RestClients` will be annotated with `io.quarkus.rest.client.reactive.Url`. + * + * @see Dynamic base URLs + */ + @WithName("use-dynamic-url") + @WithDefault("false") + Optional useDynamicUrl(); + } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index 079189d8a..22bcad244 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -339,6 +339,9 @@ protected void generate(OpenApiGeneratorOptions options) { OpenApiClientGeneratorWrapper.SUPPORTS_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE, additionalPropertiesAsAttribute.toString()); + getValues(smallRyeConfig, openApiFilePath, CodegenConfig.ConfigName.USE_DYNAMIC_URL, Boolean.class) + .ifPresent(generator::withUseDynamicUrl); + generator.generate(basePackage); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 3ce73326a..9c1525bc1 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -111,6 +111,7 @@ private void setDefaults() { this.configurator.addAdditionalProperty("verbose", FALSE); this.configurator.addAdditionalProperty(CodegenConstants.SERIALIZABLE_MODEL, FALSE); this.configurator.addAdditionalProperty("equals-hashcode", TRUE); + this.configurator.addAdditionalProperty("use-dynamic-url", FALSE); } /** @@ -323,6 +324,11 @@ public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNameP return this; } + public OpenApiClientGeneratorWrapper withUseDynamicUrl(final Boolean useDynamicUrl) { + this.configurator.addAdditionalProperty("use-dynamic-url", useDynamicUrl); + return this; + } + /** * Main entrypoint, or where to generate the files based on the given base package. * 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 5948d8a68..7b4ddc519 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -126,7 +126,11 @@ public interface {classname} { {#if additionalRequestArgs} {#for arg in additionalRequestArgs}{! !}{arg}{#if arg_hasNext}, {/if}{/for}{! - !}{#if op.hasFormParams || op.allParams},{/if} + !}{#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} {/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 f354135bd..6fde9d9ac 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 @@ -36,7 +36,6 @@ import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.MemberValuePair; import com.github.javaparser.ast.expr.SimpleName; -import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr; import com.github.javaparser.ast.nodeTypes.NodeWithName; import com.github.javaparser.ast.type.Type; @@ -70,9 +69,10 @@ void verifyOAuthDuplicateAnnotationOnCompositeAuthProvider() throws URISyntaxExc .orElseThrow(() -> new AssertionError("Class not found in the file")); // Collect all OauthAuthenticationMarker annotations - long oauthAnnotationsCount = classDeclaration.getAnnotations().stream() - .filter(annotation -> annotation.getNameAsString() - .equals("io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker")) + long oauthAnnotationsCount = classDeclaration + .getAnnotations().stream().filter( + annotation -> annotation.getNameAsString() + .equals("io.quarkiverse.openapi.generator.markers.OauthAuthenticationMarker")) .filter(Expression::isNormalAnnotationExpr) .filter(annotation -> annotation .findFirst(MemberValuePair.class, @@ -121,14 +121,13 @@ void verifyAllOfDiscriminatorGeneration() throws java.net.URISyntaxException, Fi assertNotNull(generatedFiles); assertFalse(generatedFiles.isEmpty()); - final Optional classWithDiscriminator = generatedFiles.stream() - .filter(f -> f.getName().startsWith("Thing.java")).findFirst(); + final Optional classWithDiscriminator = generatedFiles.stream().filter(f -> f.getName().startsWith("Thing.java")) + .findFirst(); assertThat(classWithDiscriminator).isPresent(); final CompilationUnit compilationUnit = StaticJavaParser.parse(classWithDiscriminator.orElseThrow()); assertThat(compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) - .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))) - .isPresent(); + .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))).isPresent(); } @Test @@ -147,8 +146,7 @@ void verifyFlink() throws URISyntaxException, FileNotFoundException { assertThat(vars).isNotEmpty(); // This openApi file has a duplicated field - assertThat(vars.stream() - .filter(v -> "failureCause".equals(v.getNameAsString())).count()).isEqualTo(4); + assertThat(vars.stream().filter(v -> "failureCause".equals(v.getNameAsString())).count()).isEqualTo(4); } @Test @@ -203,8 +201,7 @@ void verifyAuthBasicWithMissingSecurityDefinition(String defaultSecurityScheme) List methodDeclarations = compilationUnit.findAll(MethodDeclaration.class); assertThat(methodDeclarations).isNotEmpty(); - Optional initMethod = methodDeclarations.stream() - .filter(m -> m.getNameAsString().equals("filter")) + Optional initMethod = methodDeclarations.stream().filter(m -> m.getNameAsString().equals("filter")) .findAny(); assertThat(initMethod).isPresent(); @@ -221,17 +218,14 @@ void verifyAuthBearerGenerated() throws URISyntaxException { @Test void verifyEnumGeneration() throws URISyntaxException, FileNotFoundException { - final List generatedFiles = createGeneratorWrapper("issue-28.yaml") - .generate("org.issue28"); + final List generatedFiles = createGeneratorWrapper("issue-28.yaml").generate("org.issue28"); final Optional enumFile = generatedFiles.stream() .filter(f -> f.getName().endsWith("ConnectorNamespaceState.java")).findFirst(); assertThat(enumFile).isPresent(); final CompilationUnit cu = StaticJavaParser.parse(enumFile.orElseThrow()); final List constants = cu.findAll(EnumConstantDeclaration.class); - assertThat(constants) - .hasSize(3) - .extracting(EnumConstantDeclaration::getNameAsString) + assertThat(constants).hasSize(3).extracting(EnumConstantDeclaration::getNameAsString) .containsExactlyInAnyOrder("DISCONNECTED", "READY", "DELETING"); } @@ -239,23 +233,20 @@ void verifyEnumGeneration() throws URISyntaxException, FileNotFoundException { void verifyDeprecatedFields() throws URISyntaxException, FileNotFoundException { final Map codegenConfig = ClassCodegenConfigParser .parse(MockConfigUtils.getTestConfig("/codegen/application.properties"), "org.issue38"); - final List generatedFiles = this.createGeneratorWrapper("issue-38.yaml") - .withClassesCodeGenConfig(codegenConfig) + final List generatedFiles = this.createGeneratorWrapper("issue-38.yaml").withClassesCodeGenConfig(codegenConfig) .generate("org.issue38"); // we have two attributes that will be generated with the same name, one of them is deprecated - final Optional metaV1Condition = generatedFiles.stream() - .filter(f -> f.getName().endsWith("MetaV1Condition.java")).findFirst(); + final Optional metaV1Condition = generatedFiles.stream().filter(f -> f.getName().endsWith("MetaV1Condition.java")) + .findFirst(); assertThat(metaV1Condition).isPresent(); final CompilationUnit cu = StaticJavaParser.parse(metaV1Condition.orElseThrow()); final List fields = cu.findAll(FieldDeclaration.class); assertThat(fields).extracting(FieldDeclaration::getVariables).hasSize(10); - assertThat(fields.stream() - .flatMap(v -> v.getVariables().stream()) - .anyMatch(f -> f.getNameAsString().equals("lastTransitionTime"))) - .isTrue(); + assertThat(fields.stream().flatMap(v -> v.getVariables().stream()) + .anyMatch(f -> f.getNameAsString().equals("lastTransitionTime"))).isTrue(); // this one we optionally removed the deprecated attribute final Optional connectorDeploymentSpec = generatedFiles.stream() @@ -264,10 +255,8 @@ void verifyDeprecatedFields() throws URISyntaxException, FileNotFoundException { final CompilationUnit cu2 = StaticJavaParser.parse(connectorDeploymentSpec.orElseThrow()); final List fields2 = cu2.findAll(FieldDeclaration.class); - assertThat(fields2.stream() - .flatMap(v -> v.getVariables().stream()) - .anyMatch(f -> f.getNameAsString().equals("allowUpgrade"))) - .isFalse(); + assertThat(fields2.stream().flatMap(v -> v.getVariables().stream()) + .anyMatch(f -> f.getNameAsString().equals("allowUpgrade"))).isFalse(); // this class has a deprecated attribute, so we check the default behavior final Optional connectorDeploymentStatus = generatedFiles.stream() @@ -276,24 +265,19 @@ void verifyDeprecatedFields() throws URISyntaxException, FileNotFoundException { final CompilationUnit cu3 = StaticJavaParser.parse(connectorDeploymentStatus.orElseThrow()); final List fields3 = cu3.findAll(FieldDeclaration.class); - assertThat(fields3.stream() - .flatMap(v -> v.getVariables().stream()) - .anyMatch(f -> f.getNameAsString().equals("availableUpgrades"))) - .isTrue(); + assertThat(fields3.stream().flatMap(v -> v.getVariables().stream()) + .anyMatch(f -> f.getNameAsString().equals("availableUpgrades"))).isTrue(); } @Test void verifyDeprecatedOperations() throws URISyntaxException, FileNotFoundException { final Map codegenConfig = ClassCodegenConfigParser .parse(MockConfigUtils.getTestConfig("/deprecated/application.properties"), "org.deprecated"); - List generatedFiles = this.createGeneratorWrapper("deprecated.json") - .withClassesCodeGenConfig(codegenConfig) + List generatedFiles = this.createGeneratorWrapper("deprecated.json").withClassesCodeGenConfig(codegenConfig) .generate("org.deprecated"); assertFalse(generatedFiles.isEmpty()); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("DefaultApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("DefaultApi.java")).findAny(); assertThat(file).isNotEmpty(); @@ -309,14 +293,12 @@ void verifyDeprecatedOperations() throws URISyntaxException, FileNotFoundExcepti // hello operation is NOT deprecated and should be generated Optional helloMethod = methodDeclarations.stream() - .filter(m -> m.getNameAsString().equals("helloGet")) - .findAny(); + .filter(m -> m.getNameAsString().equals("helloGet")).findAny(); assertThat(helloMethod).isNotEmpty(); // bye operation is deprecated and should NOT be generated - Optional byeMethod = methodDeclarations.stream() - .filter(m -> m.getNameAsString().equals("byeGet")) + Optional byeMethod = methodDeclarations.stream().filter(m -> m.getNameAsString().equals("byeGet")) .findAny(); assertThat(byeMethod).isEmpty(); @@ -329,9 +311,7 @@ void checkAnnotations() throws URISyntaxException, FileNotFoundException { assertNotNull(restClientFiles); assertFalse(restClientFiles.isEmpty()); - Optional file = restClientFiles.stream() - .filter(f -> f.getName().endsWith("DefaultApi.java")) - .findAny(); + Optional file = restClientFiles.stream().filter(f -> f.getName().endsWith("DefaultApi.java")).findAny(); assertThat(file).isNotEmpty(); @@ -358,30 +338,23 @@ void checkAnnotations() throws URISyntaxException, FileNotFoundException { }); Optional byeMethod = methodDeclarations.stream() - .filter(m -> m.getNameAsString().equals(byeMethodGet)) - .findAny(); + .filter(m -> m.getNameAsString().equals(byeMethodGet)).findAny(); assertThat(byeMethod).isNotEmpty(); - assertThat(byeMethod.orElseThrow()) - .hasCircuitBreakerAnnotation() - .doesNotHaveAnyCircuitBreakerAttribute(); + assertThat(byeMethod.orElseThrow()).hasCircuitBreakerAnnotation().doesNotHaveAnyCircuitBreakerAttribute(); - methodDeclarations.stream() - .filter(m -> !m.getNameAsString().equals(byeMethodGet)) + methodDeclarations.stream().filter(m -> !m.getNameAsString().equals(byeMethodGet)) .forEach(m -> assertThat(m).doesNotHaveCircuitBreakerAnnotation()); } @Test void verifyMultipartFormAnnotationIsGeneratedForParameter() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("multipart-openapi.yml") - .withSkipFormModelConfig("false") + List generatedFiles = createGeneratorWrapper("multipart-openapi.yml").withSkipFormModelConfig("false") .generate("org.acme"); assertThat(generatedFiles).isNotEmpty(); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("UserProfileDataApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("UserProfileDataApi.java")).findAny(); assertThat(file).isPresent(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); @@ -389,8 +362,7 @@ void verifyMultipartFormAnnotationIsGeneratedForParameter() throws URISyntaxExce assertThat(methodDeclarations).isNotEmpty(); Optional multipartPostMethod = methodDeclarations.stream() - .filter(m -> m.getNameAsString().equals("postUserProfileData")) - .findAny(); + .filter(m -> m.getNameAsString().equals("postUserProfileData")).findAny(); assertThat(multipartPostMethod).isPresent(); List parameters = multipartPostMethod.orElseThrow().getParameters(); @@ -402,21 +374,16 @@ void verifyMultipartFormAnnotationIsGeneratedForParameter() throws URISyntaxExce @Test void verifyMultipartPojoGeneratedAndFieldsHaveAnnotations() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("multipart-openapi.yml") - .withSkipFormModelConfig("false") + List generatedFiles = createGeneratorWrapper("multipart-openapi.yml").withSkipFormModelConfig("false") .generate("org.acme"); assertFalse(generatedFiles.isEmpty()); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("UserProfileDataApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("UserProfileDataApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); Optional multipartPojo = compilationUnit.findAll(ClassOrInterfaceDeclaration.class) - .stream() - .filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")) - .findAny(); + .stream().filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")).findAny(); assertThat(multipartPojo).isNotEmpty(); List fields = multipartPojo.orElseThrow().getFields(); @@ -433,20 +400,15 @@ void verifyMultipartPojoGeneratedAndFieldsHaveAnnotations() throws URISyntaxExce @Test void shouldMapFileTypeToFullyQualifiedInputStream() throws URISyntaxException, FileNotFoundException { List generatedFiles = createGeneratorWrapper("multipart-openapi.yml") - .withTypeMappings(Map.of("File", "java.io.InputStream")) - .generate("org.acme"); + .withTypeMappings(Map.of("File", "java.io.InputStream")).generate("org.acme"); assertFalse(generatedFiles.isEmpty()); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("UserProfileDataApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("UserProfileDataApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); Optional multipartPojo = compilationUnit.findAll(ClassOrInterfaceDeclaration.class) - .stream() - .filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")) - .findAny(); + .stream().filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")).findAny(); assertThat(multipartPojo).isNotEmpty(); Optional fileUploadVariable = findVariableByName(multipartPojo.orElseThrow().getFields(), @@ -456,76 +418,55 @@ void shouldMapFileTypeToFullyQualifiedInputStream() throws URISyntaxException, F @Test void shouldReplaceFileImportWithInputStream() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("multipart-openapi.yml") - .withSkipFormModelConfig("false") - .withTypeMappings(Map.of("File", "InputStream")) - .withImportMappings(Map.of("File", "java.io.InputStream")) + List generatedFiles = createGeneratorWrapper("multipart-openapi.yml").withSkipFormModelConfig("false") + .withTypeMappings(Map.of("File", "InputStream")).withImportMappings(Map.of("File", "java.io.InputStream")) .generate("org.acme"); assertFalse(generatedFiles.isEmpty()); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("UserProfileDataApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("UserProfileDataApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); Optional multipartPojo = compilationUnit.findAll(ClassOrInterfaceDeclaration.class) - .stream() - .filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")) - .findAny(); + .stream().filter(c -> c.getNameAsString().equals("PostUserProfileDataMultipartForm")).findAny(); assertThat(multipartPojo).isNotEmpty(); Optional fileUploadVariable = findVariableByName(multipartPojo.orElseThrow().getFields(), "profileImage"); assertThat(fileUploadVariable.orElseThrow().getType().asString()).isEqualTo("InputStream"); - List imports = compilationUnit.findAll(ImportDeclaration.class) - .stream() - .map(importDeclaration -> importDeclaration.getName().asString()) - .collect(Collectors.toList()); - assertThat(imports).contains("java.io.InputStream") - .doesNotContain("java.io.File"); + List imports = compilationUnit.findAll(ImportDeclaration.class).stream() + .map(importDeclaration -> importDeclaration.getName().asString()).collect(Collectors.toList()); + assertThat(imports).contains("java.io.InputStream").doesNotContain("java.io.File"); } @Test void withoutAnyTypeOrImportMappingsItShouldGenerateUsingJava8DatesAndTimes() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("datetime-regression.yml") - .generate("org.datetime.regression"); + List generatedFiles = createGeneratorWrapper("datetime-regression.yml").generate("org.datetime.regression"); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("SomeName.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("SomeName.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List classes = compilationUnit.findAll(ClassOrInterfaceDeclaration.class); assertThat(classes).hasSize(2); ClassOrInterfaceDeclaration generatedPojoClass = classes.get(0); - verifyGeneratedDateAndTimeTypes( - generatedPojoClass, - Map.of( - "someDate", "LocalDate", - "someDateTime", "OffsetDateTime", - "dateArray", "List", - "dateTimeArray", "List", - "dateSet", "Set", - "dateTimeSet", "Set", - "dateMap", "Map", - "dateTimeMap", "Map")); - assertThat(compilationUnit.getImports().stream().map(NodeWithName::getNameAsString)) - .contains("java.time.LocalDate", "java.time.OffsetDateTime"); + verifyGeneratedDateAndTimeTypes(generatedPojoClass, + Map.of("someDate", "LocalDate", "someDateTime", "OffsetDateTime", "dateArray", "List", + "dateTimeArray", "List", "dateSet", "Set", "dateTimeSet", + "Set", "dateMap", "Map", "dateTimeMap", + "Map")); + assertThat(compilationUnit.getImports().stream().map(NodeWithName::getNameAsString)).contains("java.time.LocalDate", + "java.time.OffsetDateTime"); } @Test void shouldBeAbleToEnableMutiny() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("simple-openapi.json") - .withMutiny(true) + List generatedFiles = createGeneratorWrapper("simple-openapi.json").withMutiny(true) .generate("org.mutiny.enabled"); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("DefaultApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("DefaultApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List methodDeclarations = compilationUnit.findAll(MethodDeclaration.class); @@ -541,14 +482,10 @@ void shouldBeAbleToEnableMutiny() throws URISyntaxException, FileNotFoundExcepti @Test void shouldBeAbleToApplyMutinyOnSpecificEndpoints() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("simple-openapi.json") - .withMutiny(true) - .withMutinyReturnTypes(Map.of("helloMethod", "Uni", "Bye method_get", "Multi")) - .generate("org.mutiny.enabled"); + List generatedFiles = createGeneratorWrapper("simple-openapi.json").withMutiny(true) + .withMutinyReturnTypes(Map.of("helloMethod", "Uni", "Bye method_get", "Multi")).generate("org.mutiny.enabled"); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("DefaultApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("DefaultApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List methodDeclarations = compilationUnit.findAll(MethodDeclaration.class); @@ -558,10 +495,8 @@ void shouldBeAbleToApplyMutinyOnSpecificEndpoints() throws URISyntaxException, F "helloMethod"); Optional byeMethodGetDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "byeMethodGet"); - Optional getUserDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, - "getUser"); - Optional getNumbersDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, - "getNumbers"); + Optional getUserDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "getUser"); + Optional getNumbersDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "getNumbers"); assertThat(helloMethodDeclaration).hasValueSatisfying( methodDeclaration -> assertEquals("io.smallrye.mutiny.Uni", methodDeclaration.getType().toString())); @@ -569,21 +504,18 @@ void shouldBeAbleToApplyMutinyOnSpecificEndpoints() throws URISyntaxException, F methodDeclaration -> assertEquals("io.smallrye.mutiny.Multi", methodDeclaration.getType().toString())); assertThat(getUserDeclaration).hasValueSatisfying( methodDeclaration -> assertEquals("GetUser200Response", methodDeclaration.getType().toString())); - assertThat(getNumbersDeclaration).hasValueSatisfying( - methodDeclaration -> assertEquals("List", methodDeclaration.getType().toString())); + assertThat(getNumbersDeclaration) + .hasValueSatisfying(methodDeclaration -> assertEquals("List", methodDeclaration.getType().toString())); } @Test void shouldBeAbleToApplyMutinyOnSpecificEndpointsWhenUserDefineWrongConfiguration() throws URISyntaxException, FileNotFoundException { - List generatedFiles = createGeneratorWrapper("simple-openapi.json") - .withMutiny(true) + List generatedFiles = createGeneratorWrapper("simple-openapi.json").withMutiny(true) .withMutinyReturnTypes(Map.of("helloMethod", "Uni", "Bye method_get", "BadConfig")) .generate("org.mutiny.enabled"); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("DefaultApi.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("DefaultApi.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List methodDeclarations = compilationUnit.findAll(MethodDeclaration.class); @@ -593,10 +525,8 @@ void shouldBeAbleToApplyMutinyOnSpecificEndpointsWhenUserDefineWrongConfiguratio "helloMethod"); Optional byeMethodGetDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "byeMethodGet"); - Optional getUserDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, - "getUser"); - Optional getNumbersDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, - "getNumbers"); + Optional getUserDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "getUser"); + Optional getNumbersDeclaration = getMethodDeclarationByIdentifier(methodDeclarations, "getNumbers"); assertThat(helloMethodDeclaration).hasValueSatisfying( methodDeclaration -> assertEquals("io.smallrye.mutiny.Uni", methodDeclaration.getType().toString())); @@ -604,54 +534,40 @@ void shouldBeAbleToApplyMutinyOnSpecificEndpointsWhenUserDefineWrongConfiguratio methodDeclaration -> assertEquals("io.smallrye.mutiny.Uni", methodDeclaration.getType().toString())); assertThat(getUserDeclaration).hasValueSatisfying( methodDeclaration -> assertEquals("GetUser200Response", methodDeclaration.getType().toString())); - assertThat(getNumbersDeclaration).hasValueSatisfying( - methodDeclaration -> assertEquals("List", methodDeclaration.getType().toString())); + assertThat(getNumbersDeclaration) + .hasValueSatisfying(methodDeclaration -> assertEquals("List", methodDeclaration.getType().toString())); } @Test void shouldBeAbleToAddCustomDateAndTimeMappings() throws URISyntaxException, FileNotFoundException { List generatedFiles = createGeneratorWrapper("datetime-regression.yml") - .withTypeMappings(Map.of( - "date", "ThaiBuddhistDate", - "DateTime", "Instant")) - .withImportMappings(Map.of( - "ThaiBuddhistDate", "java.time.chrono.ThaiBuddhistDate", - "Instant", "java.time.Instant")) + .withTypeMappings(Map.of("date", "ThaiBuddhistDate", "DateTime", "Instant")) + .withImportMappings( + Map.of("ThaiBuddhistDate", "java.time.chrono.ThaiBuddhistDate", "Instant", "java.time.Instant")) .generate("org.datetime.mappings"); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("SomeName.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("SomeName.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List classes = compilationUnit.findAll(ClassOrInterfaceDeclaration.class); assertThat(classes).hasSize(2); ClassOrInterfaceDeclaration generatedPojoClass = classes.get(0); - verifyGeneratedDateAndTimeTypes( - generatedPojoClass, - Map.of( - "someDate", "ThaiBuddhistDate", - "someDateTime", "Instant", - "dateArray", "List", - "dateTimeArray", "List", - "dateSet", "Set", - "dateTimeSet", "Set", - "dateMap", "Map", - "dateTimeMap", "Map")); + verifyGeneratedDateAndTimeTypes(generatedPojoClass, + Map.of("someDate", "ThaiBuddhistDate", "someDateTime", "Instant", "dateArray", "List", + "dateTimeArray", "List", "dateSet", "Set", "dateTimeSet", "Set", + "dateMap", "Map", "dateTimeMap", "Map")); assertThat(compilationUnit.getImports().stream().map(NodeWithName::getNameAsString)) .contains("java.time.chrono.ThaiBuddhistDate", "java.time.Instant"); } - private void verifyGeneratedDateAndTimeTypes( - ClassOrInterfaceDeclaration classDeclaration, + private void verifyGeneratedDateAndTimeTypes(ClassOrInterfaceDeclaration classDeclaration, Map expectedFieldsAndTypes) { expectedFieldsAndTypes.forEach((fieldName, expectedFieldType) -> { Optional fieldDeclaration = classDeclaration.getFieldByName(fieldName); assertThat(fieldDeclaration).isPresent(); Optional fieldVariableDeclaration = fieldDeclaration.orElseThrow().getChildNodes().stream() - .filter(it -> it instanceof VariableDeclarator) - .findFirst(); + .filter(it -> it instanceof VariableDeclarator).findFirst(); assertThat(fieldVariableDeclaration).isPresent(); Type fieldType = ((VariableDeclarator) fieldVariableDeclaration.orElseThrow()).getType(); @@ -666,19 +582,17 @@ void verifyAdditionalModelTypeAnnotations() throws URISyntaxException { .generate("org.additionalmodeltypeannotations"); assertFalse(generatedFiles.isEmpty()); - generatedFiles.stream() - .filter(file -> file.getPath().matches(".*/model/.*.java")) + generatedFiles.stream().filter(file -> file.getPath().matches(".*/model/.*.java")) .forEach(this::verifyModelAdditionalAnnotations); } private void verifyModelAdditionalAnnotations(File file) { try { CompilationUnit compilationUnit = StaticJavaParser.parse(file); - compilationUnit.findAll(ClassOrInterfaceDeclaration.class) - .forEach(c -> { - assertThat(c.getAnnotationByName("Foo")).isPresent(); - assertThat(c.getAnnotationByName("Bar")).isPresent(); - }); + compilationUnit.findAll(ClassOrInterfaceDeclaration.class).forEach(c -> { + assertThat(c.getAnnotationByName("Foo")).isPresent(); + assertThat(c.getAnnotationByName("Bar")).isPresent(); + }); } catch (FileNotFoundException e) { throw new RuntimeException(e.getMessage()); } @@ -686,25 +600,22 @@ private void verifyModelAdditionalAnnotations(File file) { @Test void verifyAdditionalApiTypeAnnotations() throws URISyntaxException { - List generatedFiles = createGeneratorWrapper("petstore-openapi.json") - .withEnabledSecurityGeneration(false) + List generatedFiles = createGeneratorWrapper("petstore-openapi.json").withEnabledSecurityGeneration(false) .withAdditionalApiTypeAnnotationsConfig("@org.test.Foo;@org.test.Bar") .generate("org.additionalapitypeannotations"); assertFalse(generatedFiles.isEmpty()); - generatedFiles.stream() - .filter(file -> file.getPath().matches(".*api.*Api.java")) + generatedFiles.stream().filter(file -> file.getPath().matches(".*api.*Api.java")) .forEach(this::verifyApiAdditionalAnnotations); } private void verifyApiAdditionalAnnotations(File file) { try { CompilationUnit compilationUnit = StaticJavaParser.parse(file); - compilationUnit.findAll(ClassOrInterfaceDeclaration.class) - .forEach(c -> { - assertThat(c.getAnnotationByName("Foo")).isPresent(); - assertThat(c.getAnnotationByName("Bar")).isPresent(); - }); + compilationUnit.findAll(ClassOrInterfaceDeclaration.class).forEach(c -> { + assertThat(c.getAnnotationByName("Foo")).isPresent(); + assertThat(c.getAnnotationByName("Bar")).isPresent(); + }); } catch (FileNotFoundException e) { throw new RuntimeException(e.getMessage()); } @@ -712,86 +623,34 @@ private void verifyApiAdditionalAnnotations(File file) { @Test void verifyAdditionalRequestArgs() throws URISyntaxException { - List generatedFiles = createGeneratorWrapper("petstore-openapi.json") - .withEnabledSecurityGeneration(false) + List generatedFiles = createGeneratorWrapper("petstore-openapi.json").withEnabledSecurityGeneration(false) .withAdditionalRequestArgs( "@HeaderParam(\"jaxrs-style-header\") String headerValue;@HeaderParam(\"x-correlation-id\") String correlationId;@PathParam(\"stream\") String stream") .generate("org.additionalHTTPHeaders"); assertFalse(generatedFiles.isEmpty()); - generatedFiles.stream() - .filter(file -> file.getPath() - .matches(".*api.*Api.java")) + generatedFiles.stream().filter(file -> file.getPath().matches(".*api.*Api.java")) .forEach(this::verifyApiAdditionalHTTPHeaders); } - private void verifyApiAdditionalHTTPHeaders(File file) { - try { - CompilationUnit compilationUnit = StaticJavaParser.parse(file); - compilationUnit.findAll(MethodDeclaration.class) - .forEach(c -> { - assertParameter(c.getParameterByName("correlationId"), - "String", - Map.of("HeaderParam", - "\"x-correlation-id\"")); - assertParameter(c.getParameterByName("headerValue"), - "String", - Map.of("HeaderParam", - "\"jaxrs-style-header\"")); - assertParameter(c.getParameterByName("stream"), - "String", - Map.of("PathParam", - "\"stream\"")); - }); - } catch (FileNotFoundException e) { - throw new RuntimeException(e.getMessage()); - } - } - - private void assertParameter(Optional optionalParameter, - String type, - Map annotations) { - assertThat(optionalParameter).isPresent(); - var parameter = optionalParameter.orElseThrow(); - assertThat(parameter.getTypeAsString()).isEqualTo(type); - annotations.forEach((annotationName, annotationValue) -> { - var parameterAnnotation = parameter.getAnnotationByName(annotationName); - assertThat(parameterAnnotation).isPresent(); - assertThat(parameterAnnotation.get() - .asSingleMemberAnnotationExpr() - .getMemberValue() - .toString()).hasToString(annotationValue); - }); - } - @Test void verifyCookieParams() throws URISyntaxException { - List generatedFiles = createGeneratorWrapper("petstore-openapi.json") - .generate("org.cookieParams"); - - generatedFiles.stream() - .filter(file -> file.getPath() - .matches("PetApi.java")) - .forEach(file -> { - try { - CompilationUnit compilationUnit = StaticJavaParser.parse(file); - var positiveFounds = compilationUnit.findAll(MethodDeclaration.class) - .stream() - .filter(c -> c.getNameAsString() - .equals("findPetsByStatus")) - .filter(c -> { - assertParameter(c.getParameterByName("exampleCookie"), - "String", - Map.of("CookieParam", - "\"example-cookie\"")); - return true; - }) - .count(); - assertThat(positiveFounds).isEqualTo(1); - } catch (FileNotFoundException e) { - throw new RuntimeException(e.getMessage()); - } - }); + List generatedFiles = createGeneratorWrapper("petstore-openapi.json").generate("org.cookieParams"); + + generatedFiles.stream().filter(file -> file.getPath().matches("PetApi.java")).forEach(file -> { + try { + CompilationUnit compilationUnit = StaticJavaParser.parse(file); + var positiveFounds = compilationUnit.findAll(MethodDeclaration.class).stream() + .filter(c -> c.getNameAsString().equals("findPetsByStatus")).filter(c -> { + assertParameter(c.getParameterByName("exampleCookie"), "String", + Map.of("CookieParam", "\"example-cookie\"")); + return true; + }).count(); + assertThat(positiveFounds).isEqualTo(1); + } catch (FileNotFoundException e) { + throw new RuntimeException(e.getMessage()); + } + }); } @Test @@ -803,9 +662,7 @@ void verifyAPINormalization() throws Exception { assertNotNull(generatedFiles); assertFalse(generatedFiles.isEmpty()); - Optional file = generatedFiles.stream() - .filter(f -> f.getName().endsWith("Primate.java")) - .findAny(); + Optional file = generatedFiles.stream().filter(f -> f.getName().endsWith("Primate.java")).findAny(); assertThat(file).isNotEmpty(); CompilationUnit compilationUnit = StaticJavaParser.parse(file.orElseThrow()); List types = compilationUnit.findAll(ClassOrInterfaceDeclaration.class); @@ -815,31 +672,53 @@ void verifyAPINormalization() throws Exception { assertThat(types.get(0).getExtendedTypes(0).getName()).isEqualTo(new SimpleName("Mammal")); } - private Optional getRegisterProviderAnnotation(ClassOrInterfaceDeclaration declaration, - String annotationValue) { - return declaration.getAnnotations() + @Test + void verifyDynamicUrlAnnotation() throws Exception { + List generatedFiles = createGeneratorWrapperReactive("petstore-openapi.json") + .withUseDynamicUrl(true) + .generate("org.dynamic.url") .stream() - .filter(annotationExpr -> "RegisterProvider".equals(annotationExpr.getNameAsString()) && - annotationExpr instanceof SingleMemberAnnotationExpr && - annotationValue.equals(((SingleMemberAnnotationExpr) annotationExpr).getMemberValue() - .toString())) - .findFirst(); + .filter(file -> file.getPath().endsWith("PetApi.java")).toList(); + + assertThat(generatedFiles).isNotEmpty(); + for (File file : generatedFiles) { + try { + CompilationUnit compilationUnit = StaticJavaParser.parse(file); + var positiveFounds = compilationUnit.findAll(MethodDeclaration.class).stream() + .filter(c -> c.getNameAsString().equals("findPetsByStatus")).filter(c -> { + assertMarkerAnnotationParameter(c.getParameterByName("dynUrl"), "Url"); + return true; + }).count(); + assertThat(positiveFounds).isEqualTo(1); + } catch (FileNotFoundException e) { + throw new RuntimeException(e.getMessage()); + } + } } private List generateRestClientFiles() throws URISyntaxException { - OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("simple-openapi.json") - .withCircuitBreakerConfig(Map.of( - "org.openapitools.client.api.DefaultApi", List.of("opThatDoesNotExist", "byeMethodGet"))); + OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("simple-openapi.json").withCircuitBreakerConfig( + Map.of("org.openapitools.client.api.DefaultApi", List.of("opThatDoesNotExist", "byeMethodGet"))); return generatorWrapper.generate("org.openapitools.client"); } + private OpenApiClientGeneratorWrapper createGeneratorWrapperReactive(String specFileName) throws URISyntaxException { + final Path openApiSpec = getOpenApiSpecPath(specFileName); + return new OpenApiReactiveClientGeneratorWrapper(openApiSpec, getOpenApiTargetPath(openApiSpec), false, true); + } + private OpenApiClientGeneratorWrapper createGeneratorWrapper(String specFileName) throws URISyntaxException { - final Path openApiSpec = Path - .of(requireNonNull(this.getClass().getResource(String.format("/openapi/%s", specFileName))).toURI()); - final Path targetPath = Paths.get(getTargetDir(), "openapi-gen"); + final Path openApiSpec = getOpenApiSpecPath(specFileName); + return new OpenApiClassicClientGeneratorWrapper(openApiSpec, getOpenApiTargetPath(openApiSpec), false, true); + } + + private Path getOpenApiSpecPath(String specFileName) throws URISyntaxException { + return Path.of(requireNonNull(this.getClass().getResource(String.format("/openapi/%s", specFileName))).toURI()); + } - return new OpenApiClassicClientGeneratorWrapper(openApiSpec, targetPath, false, true); + private Path getOpenApiTargetPath(Path openApiSpec) throws URISyntaxException { + return Paths.get(getTargetDir(), "openapi-gen"); } private String getTargetDir() throws URISyntaxException { @@ -848,7 +727,39 @@ private String getTargetDir() throws URISyntaxException { private Optional findVariableByName(List fields, String name) { return fields.stream().map(field -> field.getVariable(0)) - .filter((VariableDeclarator variable) -> name.equals(variable.getName().asString())) - .findFirst(); + .filter((VariableDeclarator variable) -> name.equals(variable.getName().asString())).findFirst(); + } + + private void verifyApiAdditionalHTTPHeaders(File file) { + try { + CompilationUnit compilationUnit = StaticJavaParser.parse(file); + compilationUnit.findAll(MethodDeclaration.class).forEach(c -> { + assertParameter(c.getParameterByName("correlationId"), "String", Map.of("HeaderParam", "\"x-correlation-id\"")); + assertParameter(c.getParameterByName("headerValue"), "String", Map.of("HeaderParam", "\"jaxrs-style-header\"")); + assertParameter(c.getParameterByName("stream"), "String", Map.of("PathParam", "\"stream\"")); + }); + } catch (FileNotFoundException e) { + throw new RuntimeException(e.getMessage()); + } + } + + private void assertParameter(Optional optionalParameter, String type, Map annotations) { + assertThat(optionalParameter).isPresent(); + var parameter = optionalParameter.orElseThrow(); + assertThat(parameter.getTypeAsString()).isEqualTo(type); + annotations.forEach((annotationName, annotationValue) -> { + var parameterAnnotation = parameter.getAnnotationByName(annotationName); + assertThat(parameterAnnotation).isPresent(); + assertThat(parameterAnnotation.get().asSingleMemberAnnotationExpr().getMemberValue().toString()) + .hasToString(annotationValue); + }); + } + + private void assertMarkerAnnotationParameter(Optional optionalParameter, String annotationName) { + assertThat(optionalParameter).isPresent(); + var parameter = optionalParameter.orElseThrow(); + var parameterAnnotation = parameter.getAnnotationByName(annotationName); + assertThat(parameterAnnotation).isPresent(); + assertThat(parameterAnnotation.get().asMarkerAnnotationExpr()).isNotNull(); } } diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index 4e8ecd509..e2b6350e8 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -199,6 +199,11 @@ quarkus.openapi-generator.codegen.spec.my_openapi_yaml.serializable-model=true include::./includes/equals-hashcode.adoc[leveloffset=+1, opts=optional] +[[dynamic-url]] +== Dynamic base URLs + +include::./includes/dynamic-url.adoc[leveloffset=+1, opts=optional] + == Known Limitations === Supported Arguments diff --git a/docs/modules/ROOT/pages/includes/dynamic-url.adoc b/docs/modules/ROOT/pages/includes/dynamic-url.adoc new file mode 100644 index 000000000..f4b36df11 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/dynamic-url.adoc @@ -0,0 +1,16 @@ + +If you need the generated `RestClient` to target different server URLs at runtime—rather than relying solely on the static URL from the application configuration—you can enable dynamic base URL support. + +To do so, set the following property in your configuration: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.use-dynamic-url=true +---- + +When this property is enabled and `quarkus-rest-client` is present on the classpath, the generator will include a method parameter annotated with `@io.quarkus.rest.client.reactive.Url`. This allows your application to supply the target URL dynamically at runtime. + +This feature is particularly useful when integrating with multiple instances of the same API or switching endpoints based on contextual information. + +For more details, refer to the official Quarkus documentation: +https://quarkus.io/version/3.20/guides/rest-client#dynamic-base-urls diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index bcb8f8e72..5886094b1 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -1279,6 +1279,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-dynamic-url]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-dynamic-url[`quarkus.openapi-generator.codegen.spec."spec-item".use-dynamic-url`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-dynamic-url+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether to enable Dynamic URLs on APIs methods. By enabling this property every method on `RestClients` will be annotated with `io.quarkus.rest.client.reactive.Url`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_DYNAMIC_URL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_DYNAMIC_URL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation+++[] diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc index bcb8f8e72..5886094b1 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -1279,6 +1279,27 @@ endif::add-copy-button-to-env-var[] |boolean | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-dynamic-url]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-use-dynamic-url[`quarkus.openapi-generator.codegen.spec."spec-item".use-dynamic-url`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".use-dynamic-url+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether to enable Dynamic URLs on APIs methods. By enabling this property every method on `RestClients` will be annotated with `io.quarkus.rest.client.reactive.Url`. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_DYNAMIC_URL+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__USE_DYNAMIC_URL+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + a| [[quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-item-configs-auth-auth-configs-token-propagation[`quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator."item-configs".auth."auth-configs".token-propagation+++[] diff --git a/docs/pom.xml b/docs/pom.xml index 3f90e53db..bfff96074 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -9,7 +9,7 @@ ../pom.xml quarkus-openapi-generator-docs - Quarkus - OpenAPI Generator - Client - Documentation + Quarkus - OpenAPI Generator - Documentation From 8aff9c14be0b22c2e289af91a5cbfc7beeba69be Mon Sep 17 00:00:00 2001 From: Melloware Date: Wed, 9 Apr 2025 13:18:05 -0400 Subject: [PATCH 132/166] Fix #1098: Rename key local variable to mapKey (#1099) --- .../main/resources/templates/libraries/microprofile/pojo.qute | 4 ++-- .../templates/libraries/microprofile/pojoQueryParam.qute | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index bcdfa1b68..cb995e110 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -103,11 +103,11 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl } {/if} {#if v.isMap} - public {m.classname} put{v.nameInPascalCase}Item(String key, {v.items.datatypeWithEnum} {v.name}Item) { + public {m.classname} put{v.nameInPascalCase}Item(String mapKey, {v.items.datatypeWithEnum} {v.name}Item) { if (this.{v.name} == null){ {v.name} = {#if v.defaultValue}{v.defaultValue}{#else}new HashMap<>(){/if}; } - this.{v.name}.put(key, {v.name}Item); + this.{v.name}.put(mapKey, {v.name}Item); return this; } {/if} diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute index cb0ccd9ee..91612c3c5 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute @@ -89,8 +89,8 @@ } {/if} {#if v.isMap} - public {m.classname}QueryParam put{v.nameInPascalCase}Item(String key, {v.items.datatypeWithEnum} {v.name}Item) { - this.{v.name}.put(key, {v.name}Item); + public {m.classname}QueryParam put{v.nameInPascalCase}Item(String mapKey, {v.items.datatypeWithEnum} {v.name}Item) { + this.{v.name}.put(mapKey, {v.name}Item); return this; } {/if} From b9c32b21b5241f879b2c8b45192fd8dfe151e32e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:33:39 -0300 Subject: [PATCH 133/166] Bump quarkus.version from 3.21.1 to 3.21.2 (#1101) Bumps `quarkus.version` from 3.21.1 to 3.21.2. Updates `io.quarkus:quarkus-bom` from 3.21.1 to 3.21.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.1...3.21.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.21.1 to 3.21.2 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.21.1 to 3.21.2 Updates `io.quarkus:quarkus-extension-processor` from 3.21.1 to 3.21.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.21.1 to 3.21.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.1...3.21.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.21.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.21.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.21.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.21.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.21.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a144e5aa8..98c3d221e 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.21.1 + 3.21.2 1.2.0.Final 3.26.4 3.27.3 From c3e144b77e3935a9dc699aed0734ea9371cb0c06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:34:24 -0300 Subject: [PATCH 134/166] Bump io.quarkiverse:quarkiverse-parent from 19 to 20 (#1102) Bumps [io.quarkiverse:quarkiverse-parent](https://github.com/quarkiverse/quarkiverse-parent) from 19 to 20. - [Release notes](https://github.com/quarkiverse/quarkiverse-parent/releases) - [Commits](https://github.com/quarkiverse/quarkiverse-parent/commits) --- updated-dependencies: - dependency-name: io.quarkiverse:quarkiverse-parent dependency-version: '20' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 98c3d221e..bb12add0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse quarkiverse-parent - 19 + 20 io.quarkiverse.openapi.generator quarkus-openapi-generator-parent From 699d955d4b47dafd60953f8edc03ebd17214b7de Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Fri, 11 Apr 2025 18:35:55 -0300 Subject: [PATCH 135/166] Fix #1088 - Add support for custom credentials provider in runtime (#1104) Signed-off-by: Ricardo Zanini --- .../deployment/GeneratorProcessor.java | 4 + .../template/QuteTemplatingEngineAdapter.java | 10 +-- .../OAuth2AuthenticationProvider.java | 3 +- .../generator/AuthenticationRecorder.java | 12 ++- .../providers/AbstractAuthProvider.java | 12 ++- .../ApiKeyAuthenticationProvider.java | 33 ++++---- .../BasicAuthenticationProvider.java | 24 +++--- .../BearerAuthenticationProvider.java | 23 +++--- .../providers/ConfigCredentialsProvider.java | 66 ++++++++++++++++ .../providers/CredentialsProvider.java | 47 +++++++++++ .../ApiKeyOpenApiSpecProviderTest.java | 2 +- .../BearerOpenApiSpecProviderTest.java | 16 ++-- docs/modules/ROOT/pages/client.adoc | 5 ++ .../pages/includes/custom-auth-provider.adoc | 78 +++++++++++++++++++ 14 files changed, 270 insertions(+), 65 deletions(-) create mode 100644 client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ConfigCredentialsProvider.java create mode 100644 client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CredentialsProvider.java create mode 100644 docs/modules/ROOT/pages/includes/custom-auth-provider.adoc diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java index 1f6978c36..397e43974 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java @@ -34,6 +34,7 @@ import io.quarkiverse.openapi.generator.providers.ApiKeyIn; import io.quarkiverse.openapi.generator.providers.AuthProvider; import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; +import io.quarkiverse.openapi.generator.providers.CredentialsProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.deployment.SyntheticBeanBuildItem; @@ -201,6 +202,7 @@ void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, .annotation(OpenApiSpec.class) .addValue("openApiSpecId", openApiSpecId) .done() + .addInjectionPoint(ClassType.create(DotName.createSimple(CredentialsProvider.class))) .createWith(recorder.recordBasicAuthProvider(sanitizeAuthName(name), openApiSpecId, operations)) .unremovable() .done()); @@ -240,6 +242,7 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, .annotation(OpenApiSpec.class) .addValue("openApiSpecId", openApiSpecId) .done() + .addInjectionPoint(ClassType.create(DotName.createSimple(CredentialsProvider.class))) .createWith(recorder.recordBearerAuthProvider(sanitizeAuthName(name), scheme, openApiSpecId, operations)) .unremovable() .done()); @@ -282,6 +285,7 @@ void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, .annotation(OpenApiSpec.class) .addValue("openApiSpecId", openApiSpecId) .done() + .addInjectionPoint(ClassType.create(DotName.createSimple(CredentialsProvider.class))) .createWith(recorder.recordApiKeyAuthProvider(sanitizeAuthName(name), openApiSpecId, apiKeyIn, apiKeyName, operations)) .unremovable() diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java index 9d3abde30..651ee91b3 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java @@ -1,6 +1,5 @@ package io.quarkiverse.openapi.generator.deployment.template; -import java.io.IOException; import java.util.Map; import org.openapitools.codegen.api.AbstractTemplatingEngineAdapter; @@ -12,8 +11,8 @@ public class QuteTemplatingEngineAdapter extends AbstractTemplatingEngineAdapter { - public static final String IDENTIFIER = "qute"; - public static final String[] INCLUDE_TEMPLATES = { + private static final String IDENTIFIER = "qute"; + private static final String[] DEFAULT_TEMPLATES = { "additionalEnumTypeAnnotations.qute", "additionalEnumTypeUnexpectedMember.qute", "additionalModelTypeAnnotations.qute", @@ -60,8 +59,7 @@ public String[] getFileExtensions() { } @Override - public String compileTemplate(TemplatingExecutor executor, Map bundle, String templateFile) - throws IOException { + public String compileTemplate(TemplatingExecutor executor, Map bundle, String templateFile) { this.cacheTemplates(executor); Template template = engine.getTemplate(templateFile); if (template == null) { @@ -72,7 +70,7 @@ public String compileTemplate(TemplatingExecutor executor, Map b } public void cacheTemplates(TemplatingExecutor executor) { - for (String templateId : INCLUDE_TEMPLATES) { + for (String templateId : DEFAULT_TEMPLATES) { Template incTemplate = engine.getTemplate(templateId); if (incTemplate == null) { incTemplate = engine.parse(executor.getFullTemplateContents(templateId)); diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java index 211e3bb2a..f4f7009ed 100644 --- a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java @@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory; import io.quarkiverse.openapi.generator.providers.AbstractAuthProvider; +import io.quarkiverse.openapi.generator.providers.ConfigCredentialsProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.oidc.common.runtime.OidcConstants; @@ -23,7 +24,7 @@ public class OAuth2AuthenticationProvider extends AbstractAuthProvider { public OAuth2AuthenticationProvider(String name, String openApiSpecId, OidcClientRequestFilterDelegate delegate, List operations) { - super(name, openApiSpecId, operations); + super(name, openApiSpecId, operations, new ConfigCredentialsProvider()); this.delegate = delegate; validateConfig(); } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java index 8672be8e8..74ec86904 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/AuthenticationRecorder.java @@ -13,6 +13,7 @@ import io.quarkiverse.openapi.generator.providers.BaseCompositeAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BasicAuthenticationProvider; import io.quarkiverse.openapi.generator.providers.BearerAuthenticationProvider; +import io.quarkiverse.openapi.generator.providers.CredentialsProvider; import io.quarkiverse.openapi.generator.providers.OperationAuthInfo; import io.quarkus.arc.SyntheticCreationalContext; import io.quarkus.runtime.annotations.Recorder; @@ -35,7 +36,8 @@ public Function, AuthProvider> recordAp ApiKeyIn apiKeyIn, String apiKeyName, List operations) { - return context -> new ApiKeyAuthenticationProvider(openApiSpecId, name, apiKeyIn, apiKeyName, operations); + return context -> new ApiKeyAuthenticationProvider(openApiSpecId, name, apiKeyIn, + apiKeyName, operations, context.getInjectedReference(CredentialsProvider.class)); } public Function, AuthProvider> recordBearerAuthProvider( @@ -43,14 +45,18 @@ public Function, AuthProvider> recordBe String scheme, String openApiSpecId, List operations) { - return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, operations); + return context -> new BearerAuthenticationProvider(openApiSpecId, name, scheme, + operations, context.getInjectedReference(CredentialsProvider.class)); } public Function, AuthProvider> recordBasicAuthProvider( String name, String openApiSpecId, List operations) { - return context -> new BasicAuthenticationProvider(openApiSpecId, name, operations); + + return context -> new BasicAuthenticationProvider(openApiSpecId, name, + operations, context.getInjectedReference(CredentialsProvider.class)); + } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java index 8d10fae3b..da4983d2e 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java @@ -16,6 +16,8 @@ public abstract class AbstractAuthProvider implements AuthProvider { + CredentialsProvider credentialsProvider; + private static final String BEARER_WITH_SPACE = "Bearer "; private static final String CANONICAL_AUTH_CONFIG_PROPERTY_NAME = "quarkus." + RUNTIME_TIME_CONFIG_PREFIX + ".%s.auth.%s.%s"; @@ -24,10 +26,12 @@ public abstract class AbstractAuthProvider implements AuthProvider { private final String name; private final List applyToOperations = new ArrayList<>(); - protected AbstractAuthProvider(String name, String openApiSpecId, List operations) { + protected AbstractAuthProvider(String name, String openApiSpecId, List operations, + CredentialsProvider credentialsProvider) { this.name = name; this.openApiSpecId = openApiSpecId; this.applyToOperations.addAll(operations); + this.credentialsProvider = credentialsProvider; } protected static String sanitizeBearerToken(String token) { @@ -69,6 +73,10 @@ public List operationsToFilter() { } public final String getCanonicalAuthConfigPropertyName(String authPropertyName) { - return String.format(CANONICAL_AUTH_CONFIG_PROPERTY_NAME, getOpenApiSpecId(), getName(), authPropertyName); + return getCanonicalAuthConfigPropertyName(authPropertyName, getOpenApiSpecId(), getName()); + } + + public static String getCanonicalAuthConfigPropertyName(String authPropertyName, String openApiSpecId, String authName) { + return String.format(CANONICAL_AUTH_CONFIG_PROPERTY_NAME, openApiSpecId, authName, authPropertyName); } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java index eefe00f56..2f3db8393 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ApiKeyAuthenticationProvider.java @@ -11,8 +11,6 @@ import jakarta.ws.rs.core.UriBuilder; import org.eclipse.microprofile.config.ConfigProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.quarkiverse.openapi.generator.OpenApiGeneratorException; @@ -21,30 +19,33 @@ */ public class ApiKeyAuthenticationProvider extends AbstractAuthProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(ApiKeyAuthenticationProvider.class); - - static final String API_KEY = "api-key"; static final String USE_AUTHORIZATION_HEADER_VALUE = "use-authorization-header-value"; - private final ApiKeyIn apiKeyIn; private final String apiKeyName; public ApiKeyAuthenticationProvider(final String openApiSpecId, final String name, final ApiKeyIn apiKeyIn, - final String apiKeyName, List operations) { - super(name, openApiSpecId, operations); + final String apiKeyName, List operations, CredentialsProvider credentialsProvider) { + super(name, openApiSpecId, operations, credentialsProvider); this.apiKeyIn = apiKeyIn; this.apiKeyName = apiKeyName; validateConfig(); } + public ApiKeyAuthenticationProvider(final String openApiSpecId, final String name, final ApiKeyIn apiKeyIn, + final String apiKeyName, List operations) { + this(openApiSpecId, name, apiKeyIn, apiKeyName, operations, new ConfigCredentialsProvider()); + } + @Override public void filter(ClientRequestContext requestContext) throws IOException { switch (apiKeyIn) { case query: - requestContext.setUri(UriBuilder.fromUri(requestContext.getUri()).queryParam(apiKeyName, getApiKey()).build()); + requestContext.setUri( + UriBuilder.fromUri(requestContext.getUri()).queryParam(apiKeyName, getApiKey(requestContext)).build()); break; case cookie: - requestContext.getHeaders().add(HttpHeaders.COOKIE, new Cookie.Builder(apiKeyName).value(getApiKey()).build()); + requestContext.getHeaders().add(HttpHeaders.COOKIE, + new Cookie.Builder(apiKeyName).value(getApiKey(requestContext)).build()); break; case header: if (requestContext.getHeaderString("Authorization") != null @@ -52,19 +53,13 @@ public void filter(ClientRequestContext requestContext) throws IOException { && isUseAuthorizationHeaderValue()) { requestContext.getHeaders().putSingle(apiKeyName, requestContext.getHeaderString("Authorization")); } else - requestContext.getHeaders().putSingle(apiKeyName, getApiKey()); + requestContext.getHeaders().putSingle(apiKeyName, getApiKey(requestContext)); break; } } - private String getApiKey() { - final String key = ConfigProvider.getConfig() - .getOptionalValue(getCanonicalAuthConfigPropertyName(API_KEY), String.class).orElse(""); - if (key.isEmpty()) { - LOGGER.warn("configured {} property (see application.properties) is empty. hint: configure it.", - getCanonicalAuthConfigPropertyName(API_KEY)); - } - return key; + private String getApiKey(ClientRequestContext requestContext) { + return credentialsProvider.getApiKey(requestContext, getOpenApiSpecId(), getName()); } private boolean isUseAuthorizationHeaderValue() { diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java index 6158a1787..e2c8c19b8 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java @@ -8,8 +8,6 @@ import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.HttpHeaders; -import org.eclipse.microprofile.config.ConfigProvider; - import io.quarkiverse.openapi.generator.OpenApiGeneratorException; /** @@ -19,28 +17,28 @@ */ public class BasicAuthenticationProvider extends AbstractAuthProvider { - static final String USER_NAME = "username"; - static final String PASSWORD = "password"; + public BasicAuthenticationProvider(final String openApiSpecId, String name, List operations, + CredentialsProvider credentialsProvider) { + super(name, openApiSpecId, operations, credentialsProvider); + validateConfig(); + } public BasicAuthenticationProvider(final String openApiSpecId, String name, List operations) { - super(name, openApiSpecId, operations); - validateConfig(); + this(openApiSpecId, name, operations, new ConfigCredentialsProvider()); } - private String getUsername() { - return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(USER_NAME), String.class) - .orElse(""); + private String getUsername(ClientRequestContext requestContext) { + return credentialsProvider.getBasicUsername(requestContext, getOpenApiSpecId(), getName()); } - private String getPassword() { - return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(PASSWORD), String.class) - .orElse(""); + private String getPassword(ClientRequestContext requestContext) { + return credentialsProvider.getBasicPassword(requestContext, getOpenApiSpecId(), getName()); } @Override public void filter(ClientRequestContext requestContext) throws IOException { requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, - AuthUtils.basicAuthAccessToken(getUsername(), getPassword())); + AuthUtils.basicAuthAccessToken(getUsername(requestContext), getPassword(requestContext))); } private void validateConfig() { diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java index da3d1e334..4362e5a2e 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java @@ -6,8 +6,6 @@ import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.HttpHeaders; -import org.eclipse.microprofile.config.ConfigProvider; - /** * Provides bearer token authentication or any other valid scheme. * @@ -15,16 +13,19 @@ */ public class BearerAuthenticationProvider extends AbstractAuthProvider { - static final String BEARER_TOKEN = "bearer-token"; - private final String scheme; public BearerAuthenticationProvider(final String openApiSpecId, final String name, final String scheme, - List operations) { - super(name, openApiSpecId, operations); + List operations, CredentialsProvider credentialsProvider) { + super(name, openApiSpecId, operations, credentialsProvider); this.scheme = scheme; } + public BearerAuthenticationProvider(final String openApiSpecId, final String name, final String scheme, + List operations) { + this(openApiSpecId, name, scheme, operations, new ConfigCredentialsProvider()); + } + @Override public void filter(ClientRequestContext requestContext) throws IOException { String bearerToken; @@ -32,16 +33,14 @@ public void filter(ClientRequestContext requestContext) throws IOException { bearerToken = getTokenForPropagation(requestContext.getHeaders()); bearerToken = sanitizeBearerToken(bearerToken); } else { - bearerToken = getBearerToken(); + bearerToken = getBearerToken(requestContext); } if (!bearerToken.isBlank()) { - requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, - AuthUtils.authTokenOrBearer(this.scheme, bearerToken)); + requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, AuthUtils.authTokenOrBearer(this.scheme, bearerToken)); } } - private String getBearerToken() { - return ConfigProvider.getConfig().getOptionalValue(getCanonicalAuthConfigPropertyName(BEARER_TOKEN), String.class) - .orElse(""); + private String getBearerToken(ClientRequestContext requestContext) { + return credentialsProvider.getBearerToken(requestContext, getOpenApiSpecId(), getName()); } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ConfigCredentialsProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ConfigCredentialsProvider.java new file mode 100644 index 000000000..8f78ee1e8 --- /dev/null +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ConfigCredentialsProvider.java @@ -0,0 +1,66 @@ +package io.quarkiverse.openapi.generator.providers; + +import jakarta.annotation.Priority; +import jakarta.enterprise.context.Dependent; +import jakarta.enterprise.inject.Alternative; +import jakarta.ws.rs.client.ClientRequestContext; + +import org.eclipse.microprofile.config.ConfigProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Dependent +@Alternative +@Priority(100) +public class ConfigCredentialsProvider implements CredentialsProvider { + + static final String USER_NAME = "username"; + static final String PASSWORD = "password"; + static final String BEARER_TOKEN = "bearer-token"; + static final String API_KEY = "api-key"; + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigCredentialsProvider.class); + + public ConfigCredentialsProvider() { + + } + + @Override + public String getApiKey(ClientRequestContext requestContext, String openApiSpecId, String authName) { + final String key = ConfigProvider.getConfig() + .getOptionalValue(AbstractAuthProvider.getCanonicalAuthConfigPropertyName(API_KEY, openApiSpecId, authName), + String.class) + .orElse(""); + if (key.isEmpty()) { + LOGGER.warn("configured {} property (see application.properties) is empty. hint: configure it.", + AbstractAuthProvider.getCanonicalAuthConfigPropertyName(API_KEY, openApiSpecId, authName)); + } + return key; + } + + @Override + public String getBasicUsername(ClientRequestContext requestContext, String openApiSpecId, String authName) { + return ConfigProvider.getConfig() + .getOptionalValue(AbstractAuthProvider.getCanonicalAuthConfigPropertyName(USER_NAME, openApiSpecId, authName), + String.class) + .orElse(""); + } + + @Override + public String getBasicPassword(ClientRequestContext requestContext, String openApiSpecId, String authName) { + return ConfigProvider.getConfig() + .getOptionalValue(AbstractAuthProvider.getCanonicalAuthConfigPropertyName(PASSWORD, openApiSpecId, authName), + String.class) + .orElse(""); + } + + @Override + public String getBearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName) { + return ConfigProvider.getConfig() + .getOptionalValue( + AbstractAuthProvider.getCanonicalAuthConfigPropertyName(BEARER_TOKEN, openApiSpecId, authName), + String.class) + .orElse(""); + } + +} diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CredentialsProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CredentialsProvider.java new file mode 100644 index 000000000..3f15dd67c --- /dev/null +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CredentialsProvider.java @@ -0,0 +1,47 @@ +package io.quarkiverse.openapi.generator.providers; + +import jakarta.ws.rs.client.ClientRequestContext; + +/** + * Provider for security credentials. Clients can implement this interface to control how to provide security credentials in + * runtime. + * Annotate your bean with @RequestScope (or @Dependant) and @Priority(1). + */ +public interface CredentialsProvider { + + /** + * Gets the API Key given the OpenAPI definition and security schema + * + * @param openApiSpecId the OpenAPI Spec identification as defined by the OpenAPI Extension + * @param authName The security schema for this API Key definition + * @return the API Key to use when filtering the request + */ + String getApiKey(ClientRequestContext requestContext, String openApiSpecId, String authName); + + /** + * Gets the username given the OpenAPI definition and security schema + * + * @param openApiSpecId the OpenAPI Spec identification as defined by the OpenAPI Extension + * @param authName The security schema for this Basic Authorization definition + * @return the username to use when filtering the request + */ + String getBasicUsername(ClientRequestContext requestContext, String openApiSpecId, String authName); + + /** + * Gets the password given the OpenAPI definition and security schema + * + * @param openApiSpecId the OpenAPI Spec identification as defined by the OpenAPI Extension + * @param authName The security schema for this Basic Authorization definition + * @return the password to use when filtering the request + */ + String getBasicPassword(ClientRequestContext requestContext, String openApiSpecId, String authName); + + /** + * Gets the Bearer Token given the OpenAPI definition and security schema + * + * @param openApiSpecId the OpenAPI Spec identification as defined by the OpenAPI Extension + * @param authName The security schema for this Bearer Token definition + * @return the Bearer Token to use when filtering the request + */ + String getBearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName); +} diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java index da7b221c4..d6ffd6fab 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/ApiKeyOpenApiSpecProviderTest.java @@ -69,7 +69,7 @@ void filterHeaderNotFromAuthorizationHeaderCase() throws IOException { provider.getCanonicalAuthConfigPropertyName(ApiKeyAuthenticationProvider.USE_AUTHORIZATION_HEADER_VALUE), Boolean.class)).thenReturn(Optional.of(false)); when(mockedConfig.getOptionalValue( - provider.getCanonicalAuthConfigPropertyName(ApiKeyAuthenticationProvider.API_KEY), String.class)) + provider.getCanonicalAuthConfigPropertyName(ConfigCredentialsProvider.API_KEY), String.class)) .thenReturn(Optional.of(API_KEY_VALUE)); doReturn(API_KEY_AUTH_HEADER_VALUE).when(requestContext).getHeaderString("Authorization"); diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java index e1fa92a55..447c39f1c 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java @@ -21,6 +21,14 @@ class BearerOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest filterWithPropagationTestValues() { + return Stream.of( + Arguments.of(null, "bearer", "Bearer " + INCOMING_TOKEN), + Arguments.of(null, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN), + Arguments.of(HEADER_NAME, "bearer", "Bearer " + INCOMING_TOKEN), + Arguments.of(HEADER_NAME, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN)); + } + @Override protected BearerAuthenticationProvider createProvider() { return new BearerAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, null, @@ -65,12 +73,4 @@ void filterWithPropagation(String headerName, headers.putSingle(propagatedHeaderName, INCOMING_TOKEN); filter(bearerScheme, expectedAuthorizationHeader); } - - static Stream filterWithPropagationTestValues() { - return Stream.of( - Arguments.of(null, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(null, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN)); - } } diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index e2b6350e8..9745df213 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -42,6 +42,11 @@ include::./includes/authentication-support.adoc[leveloffset=+1, opts=optional] include::./includes/authorization-token-propagation.adoc[leveloffset=+1, opts=optional] +[[custom-credentials-provider]] +== Custom Credentials Provider + +include::./includes/custom-auth-provider.adoc[leveloffset=+1, opts=optional] + [[circuit-breaker]] == Circuit Breaker diff --git a/docs/modules/ROOT/pages/includes/custom-auth-provider.adoc b/docs/modules/ROOT/pages/includes/custom-auth-provider.adoc new file mode 100644 index 000000000..6d2c5b5a2 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/custom-auth-provider.adoc @@ -0,0 +1,78 @@ + +Instead of relying solely on application properties to provide runtime credentials, you can implement the `io.quarkiverse.openapi.generator.providers.CredentialsProvider` interface. This approach lets you override the default behavior of looking up configuration values and instead supply credentials dynamically at runtime. + +== Default Behavior + +By default, the extension searches for pre-configured values. For instance, to provide a `username` and `password` for a specific OpenAPI security schema definition, you might add these properties to your configuration: + +[source,properties] +---- +quarkus.openapi-generator.myopenapi_yaml.auth.mybasicsecscheme.username=alice +quarkus.openapi-generator.myopenapi_yaml.auth.mybasicsecscheme.password=${SECRET} +---- + +== Overriding with a Custom Implementation + +In some cases, you might need to determine credentials at runtime—for example, when the credentials depend on the server's current URL or other request-specific details. To do this, you can implement the `CredentialsProvider` interface. + +For example: + +[source,java] +---- +import jakarta.ws.rs.client.ClientRequestContext; +import jakarta.enterprise.context.RequestScoped; +import jakarta.annotation.Priority; +import jakarta.enterprise.inject.Alternative; +import io.quarkiverse.openapi.generator.providers.CredentialsProvider; + +@RequestScoped +@Alternative +@Priority(10) // A higher priority than the default provider. +public class RuntimeCredentialsProvider implements CredentialsProvider { + + @Override + public String getApiKey(ClientRequestContext requestContext, String openApiSpecId, String authName) { + // Example: return an API key dynamically based on the current request. + // You could inspect requestContext to decide which API key to return. + return "runtimeApiKey"; + } + + @Override + public String getBasicUsername(ClientRequestContext requestContext, String openApiSpecId, String authName) { + // Use requestContext to obtain dynamic request data (like URL or headers) + // for your custom lookup logic. + return "runtimeUser"; + } + + @Override + public String getBasicPassword(ClientRequestContext requestContext, String openApiSpecId, String authName) { + // Return the password dynamically, potentially using details from requestContext. + return "runtimePassword"; + } + + @Override + public String getBearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName) { + // Dynamically compute or look up the bearer token using data in requestContext. + return "runtimeBearerToken"; + } +} +---- + +== How It Works + +* `openApiSpecId` – Identifies the specific OpenAPI specification file. +* `authName` – Refers to the name of the security schema defined in your OpenAPI file. +* `ClientRequestContext` – Provides access to information about the current request (for example, the URL and headers). This data can be crucial if credential resolution depends on runtime request details, such as when different servers or endpoints require different authentication credentials. + +When you implement the provider, the extension will pass the current `ClientRequestContext` along with the identifiers. Your custom code can then use any available request information to dynamically look up or compute the appropriate credentials before they are applied by the authentication filter. + +== Summary + +By implementing the `CredentialsProvider` interface, you gain the following benefits: + +* **Dynamic Credential Resolution:** Obtain credentials at runtime, which is useful if they vary based on the current request context. +* **Custom Lookup Logic:** Use request-specific data (via `ClientRequestContext`) such as URL or headers to determine the correct authentication values. +* **Seamless Integration:** Your custom provider integrates into the authentication filter, replacing static configuration with dynamic behavior as needed. + +This design provides maximum flexibility and control over how authentication credentials are supplied in your application. + From afb46bc6f34f6c0e66626afb293b9af58ab72a2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:38:46 -0300 Subject: [PATCH 136/166] Bump commons-io:commons-io from 2.18.0 to 2.19.0 (#1107) Bumps commons-io:commons-io from 2.18.0 to 2.19.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-version: 2.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- moqu/core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index 47292201a..686e31cae 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -11,7 +11,7 @@ Quarkus :: Openapi Generator :: Moqu :: Core - 2.18.0 + 2.19.0 From ca6d5d13f216abd1b1637cb972845cc3c66a9610 Mon Sep 17 00:00:00 2001 From: gabriel-farache Date: Mon, 14 Apr 2025 17:57:21 +0200 Subject: [PATCH 137/166] Add support for basic auth propagation (#1078) * Fix propagation test for bearer provider Signed-off-by: gabriel-farache * Add suport for basic auth token propagation Signed-off-by: gabriel-farache * Refactor based on feedback and update tests acordingly Co-authored-by: Francisco Javier Tirado Sarti <65240126+fjtirado@users.noreply.github.com> --------- Signed-off-by: gabriel-farache Co-authored-by: Francisco Javier Tirado Sarti <65240126+fjtirado@users.noreply.github.com> Co-authored-by: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> --- .../providers/AbstractAuthProvider.java | 9 ++++ .../generator/providers/AuthUtils.java | 8 +++- .../BasicAuthenticationProvider.java | 27 ++++++----- .../BearerAuthenticationProvider.java | 9 ++-- .../BasicOpenApiSpecProviderTest.java | 46 +++++++++++++++---- .../BearerOpenApiSpecProviderTest.java | 36 ++++++++++++--- .../authorization-token-propagation.adoc | 2 +- 7 files changed, 101 insertions(+), 36 deletions(-) diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java index da4983d2e..d5a776fc1 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java @@ -19,6 +19,8 @@ public abstract class AbstractAuthProvider implements AuthProvider { CredentialsProvider credentialsProvider; private static final String BEARER_WITH_SPACE = "Bearer "; + private static final String BASIC_WITH_SPACE = "Basic "; + private static final String CANONICAL_AUTH_CONFIG_PROPERTY_NAME = "quarkus." + RUNTIME_TIME_CONFIG_PREFIX + ".%s.auth.%s.%s"; @@ -41,6 +43,13 @@ protected static String sanitizeBearerToken(String token) { return token; } + protected static String sanitizeBasicToken(String token) { + if (token != null && token.toLowerCase().startsWith(BASIC_WITH_SPACE.toLowerCase())) { + return token.substring(BASIC_WITH_SPACE.length()); + } + return token; + } + public String getOpenApiSpecId() { return openApiSpecId; } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AuthUtils.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AuthUtils.java index 3baed3bca..2948e0108 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AuthUtils.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AuthUtils.java @@ -10,10 +10,14 @@ public final class AuthUtils { private AuthUtils() { } - public static String basicAuthAccessToken(final String username, final String password) { + public static String basicAuthAccessTokenWithoutPrefix(final String username, final String password) { + return Base64.getEncoder().encodeToString(String.format("%s:%s", username, password).getBytes()); + } + + public static String basicAuthAccessToken(final String basicToken) { return String.format("%s %s", BASIC_HEADER_PREFIX, - Base64.getEncoder().encodeToString(String.format("%s:%s", username, password).getBytes())); + basicToken); } public static String authTokenOrBearer(final String scheme, final String token) { diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java index e2c8c19b8..10011a9b3 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java @@ -1,14 +1,13 @@ package io.quarkiverse.openapi.generator.providers; -import static io.quarkiverse.openapi.generator.AuthConfig.TOKEN_PROPAGATION; - import java.io.IOException; import java.util.List; import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.core.HttpHeaders; -import io.quarkiverse.openapi.generator.OpenApiGeneratorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Provider for Basic Authentication. @@ -16,11 +15,11 @@ * during build time. */ public class BasicAuthenticationProvider extends AbstractAuthProvider { + private static final Logger LOGGER = LoggerFactory.getLogger(BasicAuthenticationProvider.class); public BasicAuthenticationProvider(final String openApiSpecId, String name, List operations, CredentialsProvider credentialsProvider) { super(name, openApiSpecId, operations, credentialsProvider); - validateConfig(); } public BasicAuthenticationProvider(final String openApiSpecId, String name, List operations) { @@ -37,18 +36,18 @@ private String getPassword(ClientRequestContext requestContext) { @Override public void filter(ClientRequestContext requestContext) throws IOException { - requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, - AuthUtils.basicAuthAccessToken(getUsername(requestContext), getPassword(requestContext))); - } + String basicToken = AuthUtils.basicAuthAccessTokenWithoutPrefix(getUsername(requestContext), + getPassword(requestContext)); - private void validateConfig() { if (isTokenPropagation()) { - throw new OpenApiGeneratorException( - "Token propagation is not admitted for the OpenApi securitySchemes of \"type\": \"http\", \"scheme\": \"basic\"." - + - " A potential source of the problem might be that the configuration property " + - getCanonicalAuthConfigPropertyName(TOKEN_PROPAGATION) + - " was set with the value true in your application, please check your configuration."); + LOGGER.warn("Token propagation enabled for BasicAuthentication"); + basicToken = sanitizeBasicToken(getTokenForPropagation(requestContext.getHeaders())); } + + if (!basicToken.isBlank()) { + requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, + AuthUtils.basicAuthAccessToken(basicToken)); + } + } } diff --git a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java index 4362e5a2e..5454b1808 100644 --- a/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java +++ b/client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java @@ -28,13 +28,12 @@ public BearerAuthenticationProvider(final String openApiSpecId, final String nam @Override public void filter(ClientRequestContext requestContext) throws IOException { - String bearerToken; + String bearerToken = getBearerToken(requestContext); + if (isTokenPropagation()) { - bearerToken = getTokenForPropagation(requestContext.getHeaders()); - bearerToken = sanitizeBearerToken(bearerToken); - } else { - bearerToken = getBearerToken(requestContext); + bearerToken = sanitizeBearerToken(getTokenForPropagation(requestContext.getHeaders())); } + if (!bearerToken.isBlank()) { requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, AuthUtils.authTokenOrBearer(this.scheme, bearerToken)); } diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java index 86716bb85..20a26d577 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BasicOpenApiSpecProviderTest.java @@ -1,18 +1,22 @@ package io.quarkiverse.openapi.generator.providers; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory.propagationHeaderName; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.Base64; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import jakarta.ws.rs.core.HttpHeaders; import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.ConfigProvider; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.mockito.MockedStatic; import org.mockito.Mockito; @@ -20,9 +24,16 @@ class BasicOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest { + private static final String PROPAGATED_TOKEN = "PROPAGATED_TOKEN"; private static final String USER = "USER"; private static final String PASSWORD = "PASSWORD"; + private static final String USER_PROP = "username"; + private static final String PASSWORD_PROP = "password"; + + private static final String CUSTOM_SCHEMA = "custom_scheme"; + private static final String HEADER_NAME = "HEADER_NAME"; + private static final String EXPECTED_BASIC_TOKEN = "Basic " + Base64.getEncoder().encodeToString((USER + ":" + PASSWORD).getBytes()); @@ -33,22 +44,41 @@ protected BasicAuthenticationProvider createProvider() { @Test void filter() throws IOException { + filter(EXPECTED_BASIC_TOKEN); + } + + private void filter(String expectedAuthorizationHeader) throws IOException { provider.filter(requestContext); - assertHeader(requestContext.getHeaders(), HttpHeaders.AUTHORIZATION, EXPECTED_BASIC_TOKEN); + assertHeader(requestContext.getHeaders(), HttpHeaders.AUTHORIZATION, expectedAuthorizationHeader); } - @Test - void tokenPropagationNotSupported() { + @ParameterizedTest + @MethodSource("filterWithPropagationTestValues") + void filterWithPropagation(String headerName, + String expectedAuthorizationHeader) throws IOException { + String propagatedHeaderName = headerName == null + ? propagationHeaderName(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, HttpHeaders.AUTHORIZATION) + : propagationHeaderName(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, HEADER_NAME); try (MockedStatic configProviderMocked = Mockito.mockStatic(ConfigProvider.class)) { Config mockedConfig = Mockito.mock(Config.class); configProviderMocked.when(ConfigProvider::getConfig).thenReturn(mockedConfig); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), Boolean.class)).thenReturn(Optional.of(true)); - - assertThatThrownBy(() -> new BasicAuthenticationProvider(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, List.of())) - .hasMessageContaining("quarkus.openapi-generator.%s.auth.%s.token-propagation", OPEN_API_FILE_SPEC_ID, - AUTH_SCHEME_NAME); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME), + String.class)).thenReturn(Optional.of(headerName == null ? HttpHeaders.AUTHORIZATION : headerName)); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(USER_PROP), + String.class)).thenReturn(Optional.of(USER)); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(PASSWORD_PROP), + String.class)).thenReturn(Optional.of(PASSWORD)); + headers.putSingle(propagatedHeaderName, PROPAGATED_TOKEN); + filter(expectedAuthorizationHeader); } + } + static Stream filterWithPropagationTestValues() { + return Stream.of( + Arguments.of(null, "Basic " + PROPAGATED_TOKEN), + Arguments.of(HEADER_NAME, "Basic " + PROPAGATED_TOKEN)); } } diff --git a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java index 447c39f1c..0321b99da 100644 --- a/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java +++ b/client/runtime/src/test/java/io/quarkiverse/openapi/generator/providers/BearerOpenApiSpecProviderTest.java @@ -1,32 +1,44 @@ package io.quarkiverse.openapi.generator.providers; import static io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory.propagationHeaderName; +import static org.mockito.Mockito.when; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.stream.Stream; import jakarta.ws.rs.core.HttpHeaders; +import org.eclipse.microprofile.config.Config; +import org.eclipse.microprofile.config.ConfigProvider; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import io.quarkiverse.openapi.generator.AuthConfig; class BearerOpenApiSpecProviderTest extends AbstractOpenApiSpecProviderTest { private static final String INCOMING_TOKEN = "INCOMING_TOKEN"; + private static final String PROPAGATED_TOKEN = "PROPAGATED_TOKEN"; + private static final String BEARER_SCHEMA = "bearer"; + + private static final String BEARER_TOKEN = "bearer-token"; private static final String CUSTOM_SCHEMA = "custom_scheme"; private static final String HEADER_NAME = "HEADER_NAME"; static Stream filterWithPropagationTestValues() { return Stream.of( - Arguments.of(null, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(null, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, "bearer", "Bearer " + INCOMING_TOKEN), - Arguments.of(HEADER_NAME, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + INCOMING_TOKEN)); + Arguments.of(null, "bearer", "Bearer " + PROPAGATED_TOKEN), + Arguments.of(null, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + PROPAGATED_TOKEN), + Arguments.of(HEADER_NAME, "bearer", "Bearer " + PROPAGATED_TOKEN), + Arguments.of(HEADER_NAME, CUSTOM_SCHEMA, CUSTOM_SCHEMA + " " + PROPAGATED_TOKEN)); } @Override @@ -70,7 +82,19 @@ void filterWithPropagation(String headerName, propagatedHeaderName = propagationHeaderName(OPEN_API_FILE_SPEC_ID, AUTH_SCHEME_NAME, HEADER_NAME); } - headers.putSingle(propagatedHeaderName, INCOMING_TOKEN); - filter(bearerScheme, expectedAuthorizationHeader); + try (MockedStatic configProviderMocked = Mockito.mockStatic(ConfigProvider.class)) { + Config mockedConfig = Mockito.mock(Config.class); + configProviderMocked.when(ConfigProvider::getConfig).thenReturn(mockedConfig); + + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), + Boolean.class)).thenReturn(Optional.of(true)); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME), + String.class)).thenReturn(Optional.of(headerName == null ? HttpHeaders.AUTHORIZATION : headerName)); + when(mockedConfig.getOptionalValue(provider.getCanonicalAuthConfigPropertyName(BEARER_TOKEN), + String.class)).thenReturn(Optional.of(INCOMING_TOKEN)); + + headers.putSingle(propagatedHeaderName, PROPAGATED_TOKEN); + filter(bearerScheme, expectedAuthorizationHeader); + } } } diff --git a/docs/modules/ROOT/pages/includes/authorization-token-propagation.adoc b/docs/modules/ROOT/pages/includes/authorization-token-propagation.adoc index 58726989b..656d39d46 100644 --- a/docs/modules/ROOT/pages/includes/authorization-token-propagation.adoc +++ b/docs/modules/ROOT/pages/includes/authorization-token-propagation.adoc @@ -78,7 +78,7 @@ WARNING: When configured, the token propagation applies to all the operations se === Propagation flow configuration -The token propagation can be used with type "oauth2" or "bearer" security schemes. Finally, considering that a given security scheme might be configured on a set of operations in the same specification file when configured, it'll apply to all these operations. +The token propagation can be used with type "oauth2", "bearer" or "basic" security schemes. Finally, considering that a given security scheme might be configured on a set of operations in the same specification file when configured, it'll apply to all these operations. [%autowidth] |=== From 5d06194a92f6cdc2bd28f178f346dc4963b7f8fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Apr 2025 08:11:05 -0300 Subject: [PATCH 138/166] Bump quarkus.version from 3.21.2 to 3.21.3 (#1114) Bumps `quarkus.version` from 3.21.2 to 3.21.3. Updates `io.quarkus:quarkus-bom` from 3.21.2 to 3.21.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.2...3.21.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.21.2 to 3.21.3 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.21.2 to 3.21.3 Updates `io.quarkus:quarkus-extension-processor` from 3.21.2 to 3.21.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.21.2 to 3.21.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.2...3.21.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.21.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.21.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.21.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.21.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.21.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bb12add0e..fd56984b4 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.21.2 + 3.21.3 1.2.0.Final 3.26.4 3.27.3 From 3d6c5733d817edbd14bb20d7f9a8a640993d4867 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 08:59:11 -0300 Subject: [PATCH 139/166] Bump io.apicurio:apicurio-codegen from 1.2.0.Final to 1.2.1.Final (#1115) Bumps [io.apicurio:apicurio-codegen](https://github.com/apicurio/apicurio-codegen) from 1.2.0.Final to 1.2.1.Final. - [Release notes](https://github.com/apicurio/apicurio-codegen/releases) - [Commits](https://github.com/apicurio/apicurio-codegen/compare/1.2.0.Final...1.2.1.Final) --- updated-dependencies: - dependency-name: io.apicurio:apicurio-codegen dependency-version: 1.2.1.Final dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fd56984b4..8b1abf4f6 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ UTF-8 UTF-8 3.21.3 - 1.2.0.Final + 1.2.1.Final 3.26.4 3.27.3 4.1.2 From 25d39704d2033c6565befa73fdd8dcf5648035a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 09:07:58 -0300 Subject: [PATCH 140/166] Bump quarkus.version from 3.21.3 to 3.22.0 (#1119) Bumps `quarkus.version` from 3.21.3 to 3.22.0. Updates `io.quarkus:quarkus-bom` from 3.21.3 to 3.22.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.3...3.22.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.21.3 to 3.22.0 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.21.3 to 3.22.0 Updates `io.quarkus:quarkus-extension-processor` from 3.21.3 to 3.22.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.21.3 to 3.22.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.21.3...3.22.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8b1abf4f6..2e0e97ff3 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.21.3 + 3.22.0 1.2.1.Final 3.26.4 3.27.3 From 64a1eb9765c25eacd31f52ff5ddb17bbbe6cdbce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Apr 2025 08:25:47 -0300 Subject: [PATCH 141/166] Bump org.wiremock:wiremock from 3.12.1 to 3.13.0 (#1122) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.12.1 to 3.13.0. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.12.1...3.13.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-version: 3.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e0e97ff3..5ace32480 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 3.26.4 3.27.3 4.1.2 - 3.12.1 + 3.13.0 2.35.2 2.1.26 From 93cb710fe1765a3593d3721304eec374ca67f70d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:41:50 -0300 Subject: [PATCH 142/166] Bump org.openapitools:openapi-generator from 7.12.0 to 7.13.0 (#1124) Bumps [org.openapitools:openapi-generator](https://github.com/openapitools/openapi-generator) from 7.12.0 to 7.13.0. - [Release notes](https://github.com/openapitools/openapi-generator/releases) - [Changelog](https://github.com/OpenAPITools/openapi-generator/blob/master/docs/3.0.0-release-note.md) - [Commits](https://github.com/openapitools/openapi-generator/compare/v7.12.0...v7.13.0) --- updated-dependencies: - dependency-name: org.openapitools:openapi-generator dependency-version: 7.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/deployment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 51ea8dc82..34f31f572 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -11,7 +11,7 @@ Quarkus - OpenAPI Generator - Client - Deployment - 7.12.0 + 7.13.0 2.0.17 4.3.1 From 5a397ae7789b2be490ecefa67e5a77bc483a4f9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 08:12:42 -0300 Subject: [PATCH 143/166] Bump quarkus.version from 3.22.0 to 3.22.1 (#1128) Bumps `quarkus.version` from 3.22.0 to 3.22.1. Updates `io.quarkus:quarkus-bom` from 3.22.0 to 3.22.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.0...3.22.1) Updates `io.quarkus:quarkus-maven-plugin` from 3.22.0 to 3.22.1 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.22.0 to 3.22.1 Updates `io.quarkus:quarkus-extension-processor` from 3.22.0 to 3.22.1 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.22.0 to 3.22.1 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.0...3.22.1) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.22.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.22.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.22.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.22.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.22.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ace32480..5ea0ac99c 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.22.0 + 3.22.1 1.2.1.Final 3.26.4 3.27.3 From bf04196308624ed552aa8b8223866c0dc837b481 Mon Sep 17 00:00:00 2001 From: fkischewski99 <56124748+fkischewski99@users.noreply.github.com> Date: Tue, 6 May 2025 21:09:57 +0200 Subject: [PATCH 144/166] Add initialize empty collection parameter (#1129) * Add initialize empty collection parameter * Fixed wrong spec name and wrong import in initialize-empty-collection test --------- Co-authored-by: Sebastian Brune Co-authored-by: Frederik Kischewski --- .../generator/deployment/CodegenConfig.java | 1 + .../deployment/CommonItemConfig.java | 6 + .../codegen/OpenApiGeneratorCodeGenBase.java | 6 + .../OpenApiClientGeneratorWrapper.java | 5 + .../libraries/microprofile/pojo.qute | 2 +- .../initialize-empty-collections/pom.xml | 89 ++++++ ...rkus-simple-openapi-empty-collections.yaml | 282 ++++++++++++++++++ ...arkus-simple-openapi-null-collections.yaml | 282 ++++++++++++++++++ .../src/main/resources/application.properties | 5 + ...nitialiseEmptyCollectionWhenFalseTest.java | 35 +++ ...InitialiseEmptyCollectionWhenTrueTest.java | 40 +++ client/integration-tests/pom.xml | 1 + docs/modules/ROOT/pages/client.adoc | 5 + .../initialize-empty-collections.adoc | 9 + .../includes/quarkus-openapi-generator.adoc | 42 +++ ...i-generator_quarkus.openapi-generator.adoc | 42 +++ 16 files changed, 851 insertions(+), 1 deletion(-) create mode 100644 client/integration-tests/initialize-empty-collections/pom.xml create mode 100644 client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-empty-collections.yaml create mode 100644 client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-null-collections.yaml create mode 100644 client/integration-tests/initialize-empty-collections/src/main/resources/application.properties create mode 100644 client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenFalseTest.java create mode 100644 client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenTrueTest.java create mode 100644 docs/modules/ROOT/pages/includes/initialize-empty-collections.adoc diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index d926ac2f5..6927b2275 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -69,6 +69,7 @@ enum ConfigName { PART_FILENAME_VALUE("part-filename-value"), USE_FIELD_NAME_IN_PART_FILENAME("use-field-name-in-part-filename"), ADDITIONAL_PROPERTIES_AS_ATTRIBUTE("additional-properties-as-attribute"), + INITIALIZE_EMPTY_COLLECTIONS("initialize-empty-collections"), ADDITIONAL_REQUEST_ARGS("additional-request-args"), REMOVE_OPERATION_ID_PREFIX("remove-operation-id-prefix"), REMOVE_OPERATION_ID_PREFIX_DELIMITER("remove-operation-id-prefix-delimiter"), diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java index f0fffc0a6..218ef12e5 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CommonItemConfig.java @@ -183,4 +183,10 @@ public interface CommonItemConfig { */ @WithName("additional-properties-as-attribute") Optional additionalPropertiesAsAttribute(); + + /** + * Initialise collections as empty instead of null + */ + @WithName("initialize-empty-collections") + Optional initializeEmptyCollections(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index 22bcad244..34ad096ec 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -335,6 +335,12 @@ protected void generate(OpenApiGeneratorOptions options) { .ifPresent(generator::withMutinyReturnTypes); generator.withAdditionalPropertiesAsAttribute(additionalPropertiesAsAttribute); + + Boolean initialiseEmptyCollection = getValues(smallRyeConfig, openApiFilePath, + CodegenConfig.ConfigName.INITIALIZE_EMPTY_COLLECTIONS, Boolean.class) + .orElse(Boolean.FALSE); + generator.withInitializeEmptyCollections(initialiseEmptyCollection); + GlobalSettings.setProperty( OpenApiClientGeneratorWrapper.SUPPORTS_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE, additionalPropertiesAsAttribute.toString()); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 9c1525bc1..3b1320afb 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -89,6 +89,7 @@ private void setDefaults() { // Set default values directly here this.configurator.addAdditionalProperty("additionalApiTypeAnnotations", new String[0]); this.configurator.addAdditionalProperty("additionalPropertiesAsAttribute", FALSE); + this.configurator.addAdditionalProperty("initializeEmptyCollections", FALSE); this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMember", FALSE); this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberName", ""); this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberStringValue", ""); @@ -368,6 +369,10 @@ public void withAdditionalPropertiesAsAttribute(final Boolean enable) { this.configurator.addAdditionalProperty("additionalPropertiesAsAttribute", Optional.ofNullable(enable).orElse(FALSE)); } + public void withInitializeEmptyCollections(final Boolean enable) { + this.configurator.addAdditionalProperty("initializeEmptyCollections", Optional.ofNullable(enable).orElse(FALSE)); + } + public static String transformToSafeConfigKey(String input) { return input.replaceAll("[^a-zA-Z0-9\\-_]", "_"); } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index cb995e110..ef43ddd2b 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -39,7 +39,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializabl {/if} {#if v.hasValidation || v.required}{#include beanValidation.qute p=v/}{/if} {#if v.isContainer} - private {v.datatypeWithEnum} {v.name}{#if v.required && v.defaultValue} = {v.defaultValue}{/if}; + private {v.datatypeWithEnum} {v.name}{#if v.required && v.defaultValue} = {v.defaultValue}{#else if v.isArray && initializeEmptyCollections} = new {#if v.uniqueItems}LinkedHashSet{/if}{#if !v.uniqueItems}ArrayList{/if}<>(){#else if v.isMap && initializeEmptyCollections} = new HashMap<>(){/if}; {#else} private {v.datatypeWithEnum} {v.name}{#if v.defaultValue} = {v.defaultValue}{/if}; {/if} diff --git a/client/integration-tests/initialize-empty-collections/pom.xml b/client/integration-tests/initialize-empty-collections/pom.xml new file mode 100644 index 000000000..5e96d575f --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/pom.xml @@ -0,0 +1,89 @@ + + + + quarkus-openapi-generator-integration-tests + io.quarkiverse.openapi.generator + 3.0.0-SNAPSHOT + + 4.0.0 + + quarkus-openapi-generator-it-initialize-empty-collections + Quarkus - OpenAPI Generator - Integration Tests - Client - Initialize Empty Collections + + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-junit5 + test + + + + + + io.quarkus + quarkus-maven-plugin + true + + + + build + generate-code + generate-code-tests + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + + + \ No newline at end of file diff --git a/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-empty-collections.yaml b/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-empty-collections.yaml new file mode 100644 index 000000000..559d04451 --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-empty-collections.yaml @@ -0,0 +1,282 @@ +--- +openapi: 3.0.3 +info: + title: greeting-flow API + version: "1.0" +paths: + /: + post: + requestBody: + content: + '*/*': + schema: + $ref: '#/components/schemas/CloudEvent' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Response' + /hello: + get: + tags: + - Reactive Greeting Resource + operationId: hello + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + /messaging/topics: + get: + tags: + - Quarkus Topics Information Resource + responses: + "200": + description: OK +components: + schemas: + Type: + type: object + properties: + tags: + uniqueItems: true + type: array + items: + type: string + CloudEvent: + type: object + properties: + specVersion: + $ref: '#/components/schemas/SpecVersion' + id: + type: string + type: + type: string + source: + format: uri + type: string + dataContentType: + type: string + dataSchema: + format: uri + type: string + subject: + type: string + time: + format: date-time + type: string + attributeNames: + uniqueItems: true + type: array + items: + type: string + extensionNames: + uniqueItems: true + type: array + items: + type: string + data: + $ref: '#/components/schemas/CloudEventData' + CloudEventData: + type: object + EntityTag: + type: object + properties: + value: + type: string + weak: + type: boolean + Family: + enum: + - INFORMATIONAL + - SUCCESSFUL + - REDIRECTION + - CLIENT_ERROR + - SERVER_ERROR + - OTHER + type: string + Link: + type: object + properties: + uri: + format: uri + type: string + uriBuilder: + $ref: '#/components/schemas/UriBuilder' + rel: + type: string + rels: + type: array + items: + type: string + title: + type: string + type: + type: string + params: + type: object + additionalProperties: + type: string + Locale: + type: object + properties: + language: + type: string + script: + type: string + country: + type: string + variant: + type: string + extensionKeys: + uniqueItems: true + type: array + items: + format: byte + type: string + unicodeLocaleAttributes: + uniqueItems: true + type: array + items: + type: string + unicodeLocaleKeys: + uniqueItems: true + type: array + items: + type: string + iSO3Language: + type: string + iSO3Country: + type: string + displayLanguage: + type: string + displayScript: + type: string + displayCountry: + type: string + displayVariant: + type: string + displayName: + type: string + MediaType: + type: object + properties: + type: + type: string + subtype: + type: string + parameters: + type: object + additionalProperties: + type: string + wildcardType: + type: boolean + wildcardSubtype: + type: boolean + MultivaluedMapStringObject: + type: object + additionalProperties: + type: array + items: + type: object + MultivaluedMapStringString: + type: object + additionalProperties: + type: array + items: + type: string + NewCookie: + type: object + properties: + name: + type: string + value: + type: string + version: + format: int32 + type: integer + path: + type: string + domain: + type: string + comment: + type: string + maxAge: + format: int32 + type: integer + expiry: + format: date + type: string + secure: + type: boolean + httpOnly: + type: boolean + Response: + type: object + properties: + status: + format: int32 + type: integer + statusInfo: + $ref: '#/components/schemas/StatusType' + entity: + type: object + mediaType: + $ref: '#/components/schemas/MediaType' + language: + $ref: '#/components/schemas/Locale' + length: + format: int32 + type: integer + allowedMethods: + uniqueItems: true + type: array + items: + type: string + cookies: + type: object + additionalProperties: + $ref: '#/components/schemas/NewCookie' + entityTag: + $ref: '#/components/schemas/EntityTag' + date: + format: date + type: string + lastModified: + format: date + type: string + location: + format: uri + type: string + links: + uniqueItems: true + type: array + items: + $ref: '#/components/schemas/Link' + metadata: + $ref: '#/components/schemas/MultivaluedMapStringObject' + headers: + $ref: '#/components/schemas/MultivaluedMapStringObject' + stringHeaders: + $ref: '#/components/schemas/MultivaluedMapStringString' + SpecVersion: + enum: + - V03 + - V1 + type: string + StatusType: + type: object + properties: + statusCode: + format: int32 + type: integer + family: + $ref: '#/components/schemas/Family' + reasonPhrase: + type: string + UriBuilder: + type: object diff --git a/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-null-collections.yaml b/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-null-collections.yaml new file mode 100644 index 000000000..559d04451 --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/src/main/openapi/quarkus-simple-openapi-null-collections.yaml @@ -0,0 +1,282 @@ +--- +openapi: 3.0.3 +info: + title: greeting-flow API + version: "1.0" +paths: + /: + post: + requestBody: + content: + '*/*': + schema: + $ref: '#/components/schemas/CloudEvent' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Response' + /hello: + get: + tags: + - Reactive Greeting Resource + operationId: hello + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + /messaging/topics: + get: + tags: + - Quarkus Topics Information Resource + responses: + "200": + description: OK +components: + schemas: + Type: + type: object + properties: + tags: + uniqueItems: true + type: array + items: + type: string + CloudEvent: + type: object + properties: + specVersion: + $ref: '#/components/schemas/SpecVersion' + id: + type: string + type: + type: string + source: + format: uri + type: string + dataContentType: + type: string + dataSchema: + format: uri + type: string + subject: + type: string + time: + format: date-time + type: string + attributeNames: + uniqueItems: true + type: array + items: + type: string + extensionNames: + uniqueItems: true + type: array + items: + type: string + data: + $ref: '#/components/schemas/CloudEventData' + CloudEventData: + type: object + EntityTag: + type: object + properties: + value: + type: string + weak: + type: boolean + Family: + enum: + - INFORMATIONAL + - SUCCESSFUL + - REDIRECTION + - CLIENT_ERROR + - SERVER_ERROR + - OTHER + type: string + Link: + type: object + properties: + uri: + format: uri + type: string + uriBuilder: + $ref: '#/components/schemas/UriBuilder' + rel: + type: string + rels: + type: array + items: + type: string + title: + type: string + type: + type: string + params: + type: object + additionalProperties: + type: string + Locale: + type: object + properties: + language: + type: string + script: + type: string + country: + type: string + variant: + type: string + extensionKeys: + uniqueItems: true + type: array + items: + format: byte + type: string + unicodeLocaleAttributes: + uniqueItems: true + type: array + items: + type: string + unicodeLocaleKeys: + uniqueItems: true + type: array + items: + type: string + iSO3Language: + type: string + iSO3Country: + type: string + displayLanguage: + type: string + displayScript: + type: string + displayCountry: + type: string + displayVariant: + type: string + displayName: + type: string + MediaType: + type: object + properties: + type: + type: string + subtype: + type: string + parameters: + type: object + additionalProperties: + type: string + wildcardType: + type: boolean + wildcardSubtype: + type: boolean + MultivaluedMapStringObject: + type: object + additionalProperties: + type: array + items: + type: object + MultivaluedMapStringString: + type: object + additionalProperties: + type: array + items: + type: string + NewCookie: + type: object + properties: + name: + type: string + value: + type: string + version: + format: int32 + type: integer + path: + type: string + domain: + type: string + comment: + type: string + maxAge: + format: int32 + type: integer + expiry: + format: date + type: string + secure: + type: boolean + httpOnly: + type: boolean + Response: + type: object + properties: + status: + format: int32 + type: integer + statusInfo: + $ref: '#/components/schemas/StatusType' + entity: + type: object + mediaType: + $ref: '#/components/schemas/MediaType' + language: + $ref: '#/components/schemas/Locale' + length: + format: int32 + type: integer + allowedMethods: + uniqueItems: true + type: array + items: + type: string + cookies: + type: object + additionalProperties: + $ref: '#/components/schemas/NewCookie' + entityTag: + $ref: '#/components/schemas/EntityTag' + date: + format: date + type: string + lastModified: + format: date + type: string + location: + format: uri + type: string + links: + uniqueItems: true + type: array + items: + $ref: '#/components/schemas/Link' + metadata: + $ref: '#/components/schemas/MultivaluedMapStringObject' + headers: + $ref: '#/components/schemas/MultivaluedMapStringObject' + stringHeaders: + $ref: '#/components/schemas/MultivaluedMapStringString' + SpecVersion: + enum: + - V03 + - V1 + type: string + StatusType: + type: object + properties: + statusCode: + format: int32 + type: integer + family: + $ref: '#/components/schemas/Family' + reasonPhrase: + type: string + UriBuilder: + type: object diff --git a/client/integration-tests/initialize-empty-collections/src/main/resources/application.properties b/client/integration-tests/initialize-empty-collections/src/main/resources/application.properties new file mode 100644 index 000000000..fb4e9b409 --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/src/main/resources/application.properties @@ -0,0 +1,5 @@ +# with initialise empty collections = TRUE +quarkus.openapi-generator.codegen.spec.quarkus_simple_openapi_empty_collections_yaml.initialize-empty-collections=true +# with initialise empty collections = TRUE +quarkus.openapi-generator.codegen.spec.quarkus_simple_openapi_null_collections_yaml.initialize-empty-collections=false +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenFalseTest.java b/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenFalseTest.java new file mode 100644 index 000000000..86bc197c3 --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenFalseTest.java @@ -0,0 +1,35 @@ +package io.quarkiverse.openapi.generator.initialiseEmptyCollections; + +import jakarta.inject.Inject; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.openapi.quarkus.quarkus_simple_openapi_null_collections_yaml.model.CloudEvent; +import org.openapi.quarkus.quarkus_simple_openapi_null_collections_yaml.model.Link; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class QuarkusInitialiseEmptyCollectionWhenFalseTest { + + @Inject + ObjectMapper objectMapper; + + @Test + void when_initialize_empty_collections_is_false_then_should_not_initialize_collections() { + var cloudEvent = new CloudEvent(); + Assertions.assertThat(cloudEvent.getAttributeNames()).isNull(); + var link = new Link(); + Assertions.assertThat(link.getRels()).isNull(); + } + + @Test + void when_initialize_empty_collections_is_false_then_jackson_should_map_collections_correctly() + throws JsonProcessingException { + Assertions.assertThat(objectMapper.writeValueAsString(new Link())) + .isEqualTo("{}"); + } +} diff --git a/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenTrueTest.java b/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenTrueTest.java new file mode 100644 index 000000000..ba98762f5 --- /dev/null +++ b/client/integration-tests/initialize-empty-collections/src/test/java/io/quarkiverse/openapi/generator/initialiseEmptyCollections/QuarkusInitialiseEmptyCollectionWhenTrueTest.java @@ -0,0 +1,40 @@ +package io.quarkiverse.openapi.generator.initialiseEmptyCollections; + +import java.util.ArrayList; +import java.util.LinkedHashSet; + +import jakarta.inject.Inject; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.openapi.quarkus.quarkus_simple_openapi_empty_collections_yaml.model.CloudEvent; +import org.openapi.quarkus.quarkus_simple_openapi_empty_collections_yaml.model.Link; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class QuarkusInitialiseEmptyCollectionWhenTrueTest { + + @Inject + ObjectMapper objectMapper; + + @Test + void when_initialize_empty_collections_is_true_then_should_initialize_collections() { + var cloudEvent = new CloudEvent(); + Assertions.assertThat(cloudEvent.getAttributeNames()).isNotNull().isEmpty(); + Assertions.assertThat(cloudEvent.getAttributeNames()).isInstanceOf(LinkedHashSet.class); + var link = new Link(); + Assertions.assertThat(link.getRels()).isNotNull().isEmpty(); + Assertions.assertThat(link.getRels()).isInstanceOf(ArrayList.class); + } + + @Test + void when_initialize_empty_collections_is_true_then_jackson_should_map_collections_correctly() + throws JsonProcessingException { + Assertions.assertThat(objectMapper.writeValueAsString(new Link())) + .isEqualTo("{\"rels\":[],\"params\":{}}"); + } +} diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 7098980c1..b2a36db4a 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -27,6 +27,7 @@ generation-input generation-tests include + initialize-empty-collections multipart-request mutiny mutiny-return-response diff --git a/docs/modules/ROOT/pages/client.adoc b/docs/modules/ROOT/pages/client.adoc index 9745df213..605a1b1a5 100644 --- a/docs/modules/ROOT/pages/client.adoc +++ b/docs/modules/ROOT/pages/client.adoc @@ -199,6 +199,11 @@ to true: quarkus.openapi-generator.codegen.spec.my_openapi_yaml.serializable-model=true ---- +[[initialize-empty-collections]] +== Initialize Empty Collections + +include::./includes/initialize-empty-collections.adoc[leveloffset=+1, opts=optional] + [[equals-hashcode]] == Equals and hashcode diff --git a/docs/modules/ROOT/pages/includes/initialize-empty-collections.adoc b/docs/modules/ROOT/pages/includes/initialize-empty-collections.adoc new file mode 100644 index 000000000..dd34d6568 --- /dev/null +++ b/docs/modules/ROOT/pages/includes/initialize-empty-collections.adoc @@ -0,0 +1,9 @@ +In the default configuration, the generated RestClient is designed to set container types (e.g., lists, maps, or other collections) to null when no data is provided by the API. + +However, if you prefer container types to default to empty values instead (e.g., an empty list or map), you can override the default behavior by setting the following property in your configuration: + +[source,properties] +quarkus.openapi-generator.codegen.spec.my_openapi_yaml.initialize-empty-collections=true + +When this property is set to true, the generator will ensure that container types are initialized with empty values instead of null, allowing you to avoid null-checks and directly work with populated collections. +This feature is particularly useful when you expect the generated code to follow a defensive programming approach, or when dealing with APIs that always expect empty containers instead of null values. \ No newline at end of file diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc index 5886094b1..41d33043d 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc @@ -475,6 +475,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-initialize-empty-collections]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-initialize-empty-collections[`quarkus.openapi-generator.codegen.initialize-empty-collections`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.initialize-empty-collections+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Initialise collections as empty instead of null + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INITIALIZE_EMPTY_COLLECTIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INITIALIZE_EMPTY_COLLECTIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] @@ -1090,6 +1111,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-initialize-empty-collections]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-initialize-empty-collections[`quarkus.openapi-generator.codegen.spec."spec-item".initialize-empty-collections`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".initialize-empty-collections+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Initialise collections as empty instead of null + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__INITIALIZE_EMPTY_COLLECTIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__INITIALIZE_EMPTY_COLLECTIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc index 5886094b1..41d33043d 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator_quarkus.openapi-generator.adoc @@ -475,6 +475,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-initialize-empty-collections]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-initialize-empty-collections[`quarkus.openapi-generator.codegen.initialize-empty-collections`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.initialize-empty-collections+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Initialise collections as empty instead of null + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INITIALIZE_EMPTY_COLLECTIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_INITIALIZE_EMPTY_COLLECTIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-verbose[`quarkus.openapi-generator.codegen.verbose`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.verbose+++[] @@ -1090,6 +1111,27 @@ endif::add-copy-button-to-env-var[] |string | +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-initialize-empty-collections]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-initialize-empty-collections[`quarkus.openapi-generator.codegen.spec."spec-item".initialize-empty-collections`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".initialize-empty-collections+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Initialise collections as empty instead of null + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__INITIALIZE_EMPTY_COLLECTIONS+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_CODEGEN_SPEC__SPEC_ITEM__INITIALIZE_EMPTY_COLLECTIONS+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package]] [.property-path]##link:#quarkus-openapi-generator_quarkus-openapi-generator-codegen-spec-spec-item-base-package[`quarkus.openapi-generator.codegen.spec."spec-item".base-package`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.openapi-generator.codegen.spec."spec-item".base-package+++[] From 2479144ec654d4df84e39afc55ba39e4aa206392 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 09:14:06 -0300 Subject: [PATCH 145/166] Bump quarkus.version from 3.22.1 to 3.22.2 (#1132) Bumps `quarkus.version` from 3.22.1 to 3.22.2. Updates `io.quarkus:quarkus-bom` from 3.22.1 to 3.22.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.1...3.22.2) Updates `io.quarkus:quarkus-maven-plugin` from 3.22.1 to 3.22.2 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.22.1 to 3.22.2 Updates `io.quarkus:quarkus-extension-processor` from 3.22.1 to 3.22.2 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.22.1 to 3.22.2 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.1...3.22.2) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.22.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.22.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.22.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.22.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.22.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ea0ac99c..15a1bf247 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.22.1 + 3.22.2 1.2.1.Final 3.26.4 3.27.3 From 622951ec02c54618d364cc249f697535c1fd8d06 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Sun, 11 May 2025 10:36:21 -0300 Subject: [PATCH 146/166] Add ServerCodegenConfig updating docs (#1095) --- .../quarkus-openapi-generator-server.adoc | 84 ++++++++++++++++++- ...napi-generator-server_quarkus.openapi.adoc | 84 ++++++++++++++++++- docs/modules/ROOT/pages/server.adoc | 4 + .../generator/deployment/CodegenConfig.java | 2 +- .../deployment/ServerCodegenConfig.java | 33 ++++++++ .../codegen/ApicurioCodegenWrapper.java | 2 +- 6 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc index 8410f0a8c..9955fd047 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server.adoc @@ -7,7 +7,89 @@ h|[.header-title]##Configuration property## h|Type h|Default -3+|No configuration properties found. +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-spec]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-spec[`quarkus.openapi.generator.spec`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.spec+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The OpenAPI specification filename. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_SPEC+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_SPEC+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-input-base-dir[`quarkus.openapi.generator.input-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.input-base-dir+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The input base dir where the OpenAPI specification is. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_INPUT_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_INPUT_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +|`src/main/resources/openapi` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-reactive]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-reactive[`quarkus.openapi.generator.reactive`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.reactive+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether it must generate with reactive code. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_REACTIVE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_REACTIVE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-base-package]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-base-package[`quarkus.openapi.generator.base-package`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.base-package+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The base package to be used to generated sources. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_BASE_PACKAGE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_BASE_PACKAGE+++` +endif::add-copy-button-to-env-var[] +-- +|string +|`io.apicurio.api` |=== diff --git a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc index 8410f0a8c..9955fd047 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-openapi-generator-server_quarkus.openapi.adoc @@ -7,7 +7,89 @@ h|[.header-title]##Configuration property## h|Type h|Default -3+|No configuration properties found. +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-spec]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-spec[`quarkus.openapi.generator.spec`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.spec+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The OpenAPI specification filename. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_SPEC+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_SPEC+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-input-base-dir]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-input-base-dir[`quarkus.openapi.generator.input-base-dir`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.input-base-dir+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The input base dir where the OpenAPI specification is. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_INPUT_BASE_DIR+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_INPUT_BASE_DIR+++` +endif::add-copy-button-to-env-var[] +-- +|string +|`src/main/resources/openapi` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-reactive]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-reactive[`quarkus.openapi.generator.reactive`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.reactive+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +Whether it must generate with reactive code. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_REACTIVE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_REACTIVE+++` +endif::add-copy-button-to-env-var[] +-- +|boolean +|`false` + +a|icon:lock[title=Fixed at build time] [[quarkus-openapi-generator-server_quarkus-openapi-generator-base-package]] [.property-path]##link:#quarkus-openapi-generator-server_quarkus-openapi-generator-base-package[`quarkus.openapi.generator.base-package`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.openapi.generator.base-package+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The base package to be used to generated sources. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_OPENAPI_GENERATOR_BASE_PACKAGE+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_OPENAPI_GENERATOR_BASE_PACKAGE+++` +endif::add-copy-button-to-env-var[] +-- +|string +|`io.apicurio.api` |=== diff --git a/docs/modules/ROOT/pages/server.adoc b/docs/modules/ROOT/pages/server.adoc index 33d67a5b0..30dcac7fe 100644 --- a/docs/modules/ROOT/pages/server.adoc +++ b/docs/modules/ROOT/pages/server.adoc @@ -16,3 +16,7 @@ include::includes/want-to-contribute.adoc[] == Getting Started include::./includes/server-getting-started.adoc[leveloffset=+1, opts=optional] + +== Configuration Properties + +include::./includes/quarkus-openapi-generator-server.adoc[opts=optional, leveloffset=+1] diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java index 19f5d9a5f..69b474d57 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/CodegenConfig.java @@ -6,7 +6,7 @@ @ConfigRoot(phase = ConfigPhase.BUILD_TIME) @ConfigMapping(prefix = CodegenConfig.CODEGEN_TIME_CONFIG_PREFIX) -public interface CodegenConfig { +public interface CodegenConfig extends ServerCodegenConfig { String CODEGEN_TIME_CONFIG_PREFIX = "quarkus.openapi.generator"; String CODEGEN_BASE_PACKAGE = CODEGEN_TIME_CONFIG_PREFIX + ".base-package"; diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java new file mode 100644 index 000000000..e7aa8454e --- /dev/null +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java @@ -0,0 +1,33 @@ +package io.quarkiverse.openapi.server.generator.deployment; + +import java.util.Optional; + +import io.smallrye.config.WithDefault; + +public interface ServerCodegenConfig { + + String DEFAULT_PACKAGE = "io.apicurio.api"; + + /** + * The OpenAPI specification filename. + */ + Optional spec(); + + /** + * The input base dir where the OpenAPI specification is. + */ + @WithDefault("src/main/resources/openapi") + Optional inputBaseDir(); + + /** + * Whether it must generate with reactive code. + */ + @WithDefault("false") + boolean reactive(); + + /** + * The base package to be used to generated sources. + */ + @WithDefault(DEFAULT_PACKAGE) + Optional basePackage(); +} diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioCodegenWrapper.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioCodegenWrapper.java index 2aac2a5af..eef7cf10b 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioCodegenWrapper.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioCodegenWrapper.java @@ -2,6 +2,7 @@ import static io.quarkiverse.openapi.server.generator.deployment.CodegenConfig.getBasePackagePropertyName; import static io.quarkiverse.openapi.server.generator.deployment.CodegenConfig.getCodegenReactive; +import static io.quarkiverse.openapi.server.generator.deployment.ServerCodegenConfig.DEFAULT_PACKAGE; import java.io.File; import java.io.FileInputStream; @@ -26,7 +27,6 @@ public class ApicurioCodegenWrapper { private static final Logger log = LoggerFactory.getLogger(ApicurioCodegenWrapper.class); - private static final String DEFAULT_PACKAGE = "io.apicurio.api"; private final File outdir; private final JaxRsProjectSettings projectSettings; From 613073588b10575cd87633a8d1fbe21037d546c7 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Sun, 11 May 2025 17:10:01 -0300 Subject: [PATCH 147/166] Prepare release 2.10.0 (#1135) --- .github/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/project.yml b/.github/project.yml index 3cbc24c97..7e5cd2964 100644 --- a/.github/project.yml +++ b/.github/project.yml @@ -1,3 +1,3 @@ release: - current-version: 2.9.0 + current-version: 2.10.0 next-version: 3.0.0-SNAPSHOT From 66e4854340ad5b30e11753b173a6a15bc3c68e20 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 20:10:41 +0000 Subject: [PATCH 148/166] Update the latest release version 2.10.0 in documentation --- docs/modules/ROOT/pages/includes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index b44f00d68..5533dbd74 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,3 +1,3 @@ -:project-version: 2.9.0 +:project-version: 2.10.0 :examples-dir: ./../examples/ From fb2ae5a3d45a72ca9023df4d56c80ebefd54891f Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 20:19:37 +0000 Subject: [PATCH 149/166] [maven-release-plugin] prepare release 2.10.0 --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/initialize-empty-collections/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- moqu/core/pom.xml | 2 +- moqu/deployment/pom.xml | 2 +- moqu/pom.xml | 2 +- moqu/runtime/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/codestarts/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 55 files changed, 56 insertions(+), 56 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 34f31f572..455107d6e 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index dcf21dff4..40a417369 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index ccb5fd1c5..5095ed064 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index 021f68a8d..e4d4a01e4 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index 7becd9518..c48521c23 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 21ae66723..62b38f94e 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-change-custom-template-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index 6ec30ed95..cf18a1bea 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-change-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index bc691350c..fecb8afca 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index 22c590c25..fcfbd64ac 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 944bc43aa..31bdc66b2 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index be6e5e381..2d16e102e 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index b6afadfc2..660697240 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 65ca3ddcf..3ebd8e1f9 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index b9d0bf03e..f29bbb6f3 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 39667b7b5..4079ff4fa 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index 96c1a7d09..d0f10f5d2 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index f8c9fd9c7..e1a193420 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-generation-input Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 2d699f578..27e59f92d 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-generation-tests Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index 237a370f6..faef85842 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 9f5162425..290cf50d1 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/initialize-empty-collections/pom.xml b/client/integration-tests/initialize-empty-collections/pom.xml index 5e96d575f..4c68d910d 100644 --- a/client/integration-tests/initialize-empty-collections/pom.xml +++ b/client/integration-tests/initialize-empty-collections/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 32cdab012..3f185a5de 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 74108384d..89cde1707 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index c0bc3c05d..dcede7e01 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index eb71dd670..4401e0ed4 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index 878b31e21..c0d389874 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index efa483146..ddf00a533 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index bc8e14ecb..55dbbe712 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index b2a36db4a..7db917ef3 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 184df406a..514d6c5d2 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index fa996369c..91d2a37d7 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index be31c56f8..955c56d16 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 4b2c58ce4..9b0296cfa 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index dbc79ac92..6978714be 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 5b678a044..085c8ff01 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 1b90d9ae9..54a9a349a 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 7d258890f..59790add8 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 752f4dee3..1b38bbfd6 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index 0dfc506b4..bfab7f698 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index 9c394590e..a18d3fc4c 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index 67a5e03aa..c81b938ae 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index e72a863c7..566bad866 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index bfff96074..b682ed876 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml quarkus-openapi-generator-docs diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index 686e31cae..9cc72947d 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.10.0 quarkus-openapi-generator-moqu-core diff --git a/moqu/deployment/pom.xml b/moqu/deployment/pom.xml index 5d111692b..07a110c3b 100644 --- a/moqu/deployment/pom.xml +++ b/moqu/deployment/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/moqu/pom.xml b/moqu/pom.xml index 79569a72b..5f08e6e2b 100644 --- a/moqu/pom.xml +++ b/moqu/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/moqu/runtime/pom.xml b/moqu/runtime/pom.xml index 404ab0227..741512275 100644 --- a/moqu/runtime/pom.xml +++ b/moqu/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/pom.xml b/pom.xml index 15a1bf247..6ba1eea4d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 3.0.0-SNAPSHOT + 2.10.0 pom Quarkus - OpenAPI Generator - Parent @@ -21,7 +21,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - HEAD + 2.10.0 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index 270e10270..f2aabc779 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/codestarts/pom.xml b/server/integration-tests/codestarts/pom.xml index dff0b139a..998215d97 100644 --- a/server/integration-tests/codestarts/pom.xml +++ b/server/integration-tests/codestarts/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index 7850ef7e7..a61445345 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index 398339507..a9546395b 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index e74007f47..0f0ded093 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index e60c5ed55..127a37aed 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 69fd55b67..5b3457ec5 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 3.0.0-SNAPSHOT + 2.10.0 ../pom.xml 4.0.0 From 1dd931824175c70de04d365b141048ecf693b320 Mon Sep 17 00:00:00 2001 From: "quarkiverse-ci[bot]" <181291436+quarkiverse-ci[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 20:19:37 +0000 Subject: [PATCH 150/166] [maven-release-plugin] prepare for next development iteration --- client/deployment/pom.xml | 2 +- client/integration-tests/additional-properties/pom.xml | 2 +- client/integration-tests/array-enum/pom.xml | 2 +- client/integration-tests/bean-validation/pom.xml | 2 +- client/integration-tests/beanparam/pom.xml | 2 +- .../change-custom-template-directory/pom.xml | 2 +- client/integration-tests/change-directory/pom.xml | 2 +- client/integration-tests/circuit-breaker/pom.xml | 2 +- client/integration-tests/config-key/pom.xml | 2 +- client/integration-tests/cookie-authentication/pom.xml | 2 +- client/integration-tests/custom-templates/pom.xml | 2 +- client/integration-tests/enum-property/pom.xml | 2 +- client/integration-tests/enum-unexpected/pom.xml | 2 +- client/integration-tests/equals-hashcode/pom.xml | 2 +- client/integration-tests/exclude/pom.xml | 2 +- client/integration-tests/generate-flags/pom.xml | 2 +- client/integration-tests/generation-input/pom.xml | 2 +- client/integration-tests/generation-tests/pom.xml | 2 +- client/integration-tests/github/pom.xml | 2 +- client/integration-tests/include/pom.xml | 2 +- client/integration-tests/initialize-empty-collections/pom.xml | 2 +- client/integration-tests/multipart-request/pom.xml | 2 +- client/integration-tests/mutiny-return-response/pom.xml | 2 +- client/integration-tests/mutiny/pom.xml | 2 +- client/integration-tests/open-api-normalizer/pom.xml | 2 +- client/integration-tests/part-filename/pom.xml | 2 +- client/integration-tests/path/pom.xml | 2 +- client/integration-tests/polymorphism/pom.xml | 2 +- client/integration-tests/pom.xml | 2 +- client/integration-tests/remove-operationid-prefix/pom.xml | 2 +- client/integration-tests/return-response/pom.xml | 2 +- client/integration-tests/security/pom.xml | 2 +- client/integration-tests/serializable-model/pom.xml | 2 +- client/integration-tests/simple/pom.xml | 2 +- client/integration-tests/skip-validation/pom.xml | 2 +- client/integration-tests/suffix-prefix/pom.xml | 2 +- client/integration-tests/type-mapping/pom.xml | 2 +- client/integration-tests/without-oidc/pom.xml | 2 +- client/oidc/pom.xml | 2 +- client/pom.xml | 2 +- client/runtime/pom.xml | 2 +- client/test-utils/pom.xml | 2 +- docs/pom.xml | 2 +- moqu/core/pom.xml | 2 +- moqu/deployment/pom.xml | 2 +- moqu/pom.xml | 2 +- moqu/runtime/pom.xml | 2 +- pom.xml | 4 ++-- server/deployment/pom.xml | 2 +- server/integration-tests/codestarts/pom.xml | 2 +- server/integration-tests/pom.xml | 2 +- server/integration-tests/reactive/pom.xml | 2 +- server/integration-tests/resteasy/pom.xml | 2 +- server/pom.xml | 2 +- server/runtime/pom.xml | 2 +- 55 files changed, 56 insertions(+), 56 deletions(-) diff --git a/client/deployment/pom.xml b/client/deployment/pom.xml index 455107d6e..34f31f572 100644 --- a/client/deployment/pom.xml +++ b/client/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-deployment diff --git a/client/integration-tests/additional-properties/pom.xml b/client/integration-tests/additional-properties/pom.xml index 40a417369..dcf21dff4 100644 --- a/client/integration-tests/additional-properties/pom.xml +++ b/client/integration-tests/additional-properties/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/array-enum/pom.xml b/client/integration-tests/array-enum/pom.xml index 5095ed064..ccb5fd1c5 100644 --- a/client/integration-tests/array-enum/pom.xml +++ b/client/integration-tests/array-enum/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/bean-validation/pom.xml b/client/integration-tests/bean-validation/pom.xml index e4d4a01e4..021f68a8d 100644 --- a/client/integration-tests/bean-validation/pom.xml +++ b/client/integration-tests/bean-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/beanparam/pom.xml b/client/integration-tests/beanparam/pom.xml index c48521c23..7becd9518 100644 --- a/client/integration-tests/beanparam/pom.xml +++ b/client/integration-tests/beanparam/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/change-custom-template-directory/pom.xml b/client/integration-tests/change-custom-template-directory/pom.xml index 62b38f94e..21ae66723 100644 --- a/client/integration-tests/change-custom-template-directory/pom.xml +++ b/client/integration-tests/change-custom-template-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-custom-template-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change custom template directory diff --git a/client/integration-tests/change-directory/pom.xml b/client/integration-tests/change-directory/pom.xml index cf18a1bea..6ec30ed95 100644 --- a/client/integration-tests/change-directory/pom.xml +++ b/client/integration-tests/change-directory/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-change-directory Quarkus - OpenAPI Generator - Integration Tests - Client - Change directory diff --git a/client/integration-tests/circuit-breaker/pom.xml b/client/integration-tests/circuit-breaker/pom.xml index fecb8afca..bc691350c 100644 --- a/client/integration-tests/circuit-breaker/pom.xml +++ b/client/integration-tests/circuit-breaker/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/config-key/pom.xml b/client/integration-tests/config-key/pom.xml index fcfbd64ac..22c590c25 100644 --- a/client/integration-tests/config-key/pom.xml +++ b/client/integration-tests/config-key/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/cookie-authentication/pom.xml b/client/integration-tests/cookie-authentication/pom.xml index 31bdc66b2..944bc43aa 100644 --- a/client/integration-tests/cookie-authentication/pom.xml +++ b/client/integration-tests/cookie-authentication/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/custom-templates/pom.xml b/client/integration-tests/custom-templates/pom.xml index 2d16e102e..be6e5e381 100644 --- a/client/integration-tests/custom-templates/pom.xml +++ b/client/integration-tests/custom-templates/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-property/pom.xml b/client/integration-tests/enum-property/pom.xml index 660697240..b6afadfc2 100644 --- a/client/integration-tests/enum-property/pom.xml +++ b/client/integration-tests/enum-property/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/enum-unexpected/pom.xml b/client/integration-tests/enum-unexpected/pom.xml index 3ebd8e1f9..65ca3ddcf 100644 --- a/client/integration-tests/enum-unexpected/pom.xml +++ b/client/integration-tests/enum-unexpected/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/equals-hashcode/pom.xml b/client/integration-tests/equals-hashcode/pom.xml index f29bbb6f3..b9d0bf03e 100644 --- a/client/integration-tests/equals-hashcode/pom.xml +++ b/client/integration-tests/equals-hashcode/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/exclude/pom.xml b/client/integration-tests/exclude/pom.xml index 4079ff4fa..39667b7b5 100644 --- a/client/integration-tests/exclude/pom.xml +++ b/client/integration-tests/exclude/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generate-flags/pom.xml b/client/integration-tests/generate-flags/pom.xml index d0f10f5d2..96c1a7d09 100644 --- a/client/integration-tests/generate-flags/pom.xml +++ b/client/integration-tests/generate-flags/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/generation-input/pom.xml b/client/integration-tests/generation-input/pom.xml index e1a193420..f8c9fd9c7 100644 --- a/client/integration-tests/generation-input/pom.xml +++ b/client/integration-tests/generation-input/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-input Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Input diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 27e59f92d..2d699f578 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-generation-tests Quarkus - OpenAPI Generator - Integration Tests - Client - Generation Tests diff --git a/client/integration-tests/github/pom.xml b/client/integration-tests/github/pom.xml index faef85842..237a370f6 100644 --- a/client/integration-tests/github/pom.xml +++ b/client/integration-tests/github/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/include/pom.xml b/client/integration-tests/include/pom.xml index 290cf50d1..9f5162425 100644 --- a/client/integration-tests/include/pom.xml +++ b/client/integration-tests/include/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/initialize-empty-collections/pom.xml b/client/integration-tests/initialize-empty-collections/pom.xml index 4c68d910d..5e96d575f 100644 --- a/client/integration-tests/initialize-empty-collections/pom.xml +++ b/client/integration-tests/initialize-empty-collections/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/multipart-request/pom.xml b/client/integration-tests/multipart-request/pom.xml index 3f185a5de..32cdab012 100644 --- a/client/integration-tests/multipart-request/pom.xml +++ b/client/integration-tests/multipart-request/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny-return-response/pom.xml b/client/integration-tests/mutiny-return-response/pom.xml index 89cde1707..74108384d 100644 --- a/client/integration-tests/mutiny-return-response/pom.xml +++ b/client/integration-tests/mutiny-return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/mutiny/pom.xml b/client/integration-tests/mutiny/pom.xml index dcede7e01..c0bc3c05d 100644 --- a/client/integration-tests/mutiny/pom.xml +++ b/client/integration-tests/mutiny/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-mutiny diff --git a/client/integration-tests/open-api-normalizer/pom.xml b/client/integration-tests/open-api-normalizer/pom.xml index 4401e0ed4..eb71dd670 100644 --- a/client/integration-tests/open-api-normalizer/pom.xml +++ b/client/integration-tests/open-api-normalizer/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-open-api-normalizer diff --git a/client/integration-tests/part-filename/pom.xml b/client/integration-tests/part-filename/pom.xml index c0d389874..878b31e21 100644 --- a/client/integration-tests/part-filename/pom.xml +++ b/client/integration-tests/part-filename/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/path/pom.xml b/client/integration-tests/path/pom.xml index ddf00a533..efa483146 100644 --- a/client/integration-tests/path/pom.xml +++ b/client/integration-tests/path/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-path diff --git a/client/integration-tests/polymorphism/pom.xml b/client/integration-tests/polymorphism/pom.xml index 55dbbe712..bc8e14ecb 100644 --- a/client/integration-tests/polymorphism/pom.xml +++ b/client/integration-tests/polymorphism/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/pom.xml b/client/integration-tests/pom.xml index 7db917ef3..b2a36db4a 100644 --- a/client/integration-tests/pom.xml +++ b/client/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-integration-tests diff --git a/client/integration-tests/remove-operationid-prefix/pom.xml b/client/integration-tests/remove-operationid-prefix/pom.xml index 514d6c5d2..184df406a 100644 --- a/client/integration-tests/remove-operationid-prefix/pom.xml +++ b/client/integration-tests/remove-operationid-prefix/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-integration-tests - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-it-remove-operationid-prefix diff --git a/client/integration-tests/return-response/pom.xml b/client/integration-tests/return-response/pom.xml index 91d2a37d7..fa996369c 100644 --- a/client/integration-tests/return-response/pom.xml +++ b/client/integration-tests/return-response/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/security/pom.xml b/client/integration-tests/security/pom.xml index 955c56d16..be31c56f8 100644 --- a/client/integration-tests/security/pom.xml +++ b/client/integration-tests/security/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/serializable-model/pom.xml b/client/integration-tests/serializable-model/pom.xml index 9b0296cfa..4b2c58ce4 100644 --- a/client/integration-tests/serializable-model/pom.xml +++ b/client/integration-tests/serializable-model/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/simple/pom.xml b/client/integration-tests/simple/pom.xml index 6978714be..dbc79ac92 100644 --- a/client/integration-tests/simple/pom.xml +++ b/client/integration-tests/simple/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/skip-validation/pom.xml b/client/integration-tests/skip-validation/pom.xml index 085c8ff01..5b678a044 100644 --- a/client/integration-tests/skip-validation/pom.xml +++ b/client/integration-tests/skip-validation/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/suffix-prefix/pom.xml b/client/integration-tests/suffix-prefix/pom.xml index 54a9a349a..1b90d9ae9 100644 --- a/client/integration-tests/suffix-prefix/pom.xml +++ b/client/integration-tests/suffix-prefix/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/type-mapping/pom.xml b/client/integration-tests/type-mapping/pom.xml index 59790add8..7d258890f 100644 --- a/client/integration-tests/type-mapping/pom.xml +++ b/client/integration-tests/type-mapping/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/integration-tests/without-oidc/pom.xml b/client/integration-tests/without-oidc/pom.xml index 1b38bbfd6..752f4dee3 100644 --- a/client/integration-tests/without-oidc/pom.xml +++ b/client/integration-tests/without-oidc/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-integration-tests io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/oidc/pom.xml b/client/oidc/pom.xml index bfab7f698..0dfc506b4 100644 --- a/client/oidc/pom.xml +++ b/client/oidc/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-oidc diff --git a/client/pom.xml b/client/pom.xml index a18d3fc4c..9c394590e 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/client/runtime/pom.xml b/client/runtime/pom.xml index c81b938ae..67a5e03aa 100644 --- a/client/runtime/pom.xml +++ b/client/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-client-parent - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index 566bad866..e72a863c7 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-client-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-test-utils diff --git a/docs/pom.xml b/docs/pom.xml index b682ed876..bfff96074 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml quarkus-openapi-generator-docs diff --git a/moqu/core/pom.xml b/moqu/core/pom.xml index 9cc72947d..686e31cae 100644 --- a/moqu/core/pom.xml +++ b/moqu/core/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.10.0 + 3.0.0-SNAPSHOT quarkus-openapi-generator-moqu-core diff --git a/moqu/deployment/pom.xml b/moqu/deployment/pom.xml index 07a110c3b..5d111692b 100644 --- a/moqu/deployment/pom.xml +++ b/moqu/deployment/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/moqu/pom.xml b/moqu/pom.xml index 5f08e6e2b..79569a72b 100644 --- a/moqu/pom.xml +++ b/moqu/pom.xml @@ -3,7 +3,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/moqu/runtime/pom.xml b/moqu/runtime/pom.xml index 741512275..404ab0227 100644 --- a/moqu/runtime/pom.xml +++ b/moqu/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-moqu-parent - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 6ba1eea4d..15a1bf247 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator-parent - 2.10.0 + 3.0.0-SNAPSHOT pom Quarkus - OpenAPI Generator - Parent @@ -21,7 +21,7 @@ :git:git@github.com:quarkiverse/quarkus-openapi-generator.git scm:git:git@github.com:quarkiverse/quarkus-openapi-generator.git https://github.com/quarkiverse/quarkus-openapi-generator - 2.10.0 + HEAD 3.8.1 diff --git a/server/deployment/pom.xml b/server/deployment/pom.xml index f2aabc779..270e10270 100755 --- a/server/deployment/pom.xml +++ b/server/deployment/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/codestarts/pom.xml b/server/integration-tests/codestarts/pom.xml index 998215d97..dff0b139a 100644 --- a/server/integration-tests/codestarts/pom.xml +++ b/server/integration-tests/codestarts/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/pom.xml b/server/integration-tests/pom.xml index a61445345..7850ef7e7 100755 --- a/server/integration-tests/pom.xml +++ b/server/integration-tests/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/reactive/pom.xml b/server/integration-tests/reactive/pom.xml index a9546395b..398339507 100644 --- a/server/integration-tests/reactive/pom.xml +++ b/server/integration-tests/reactive/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/integration-tests/resteasy/pom.xml b/server/integration-tests/resteasy/pom.xml index 0f0ded093..e74007f47 100644 --- a/server/integration-tests/resteasy/pom.xml +++ b/server/integration-tests/resteasy/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-server-integration-tests-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/server/pom.xml b/server/pom.xml index 127a37aed..e60c5ed55 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ quarkus-openapi-generator-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT 4.0.0 diff --git a/server/runtime/pom.xml b/server/runtime/pom.xml index 5b3457ec5..69fd55b67 100755 --- a/server/runtime/pom.xml +++ b/server/runtime/pom.xml @@ -4,7 +4,7 @@ quarkus-openapi-generator-server-parent io.quarkiverse.openapi.generator - 2.10.0 + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 From c71af83b672179e3e20fb862eb2aa40731424dc6 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Mon, 12 May 2025 11:59:51 -0400 Subject: [PATCH 151/166] Update dependabot to run on `main-lts` --- .github/dependabot.yml | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f19146646..a2e416a38 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,17 +1,35 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - version: 2 updates: + # Maven updates for main branch - package-ecosystem: "maven" directory: "/" schedule: interval: "daily" + target-branch: "main" ignore: - dependency-name: "org.apache.maven.plugins:maven-compiler-plugin" + + # Maven updates for main-lts branch + - package-ecosystem: "maven" + directory: "/" + schedule: + interval: "daily" + target-branch: "main-lts" + ignore: + - dependency-name: "org.apache.maven.plugins:maven-compiler-plugin" + - dependency-name: "io.quarkus:quarkus-bom" + - dependency-name: "io.quarkus.platform:quarkus-bom" + + # GitHub Actions updates for main branch + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + target-branch: "main" + + # GitHub Actions updates for main-lts branch - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "weekly" \ No newline at end of file + interval: "weekly" + target-branch: "main-lts" From 2612dca9deb4971644ce1dcf85613bba1c24745f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 12:04:19 -0400 Subject: [PATCH 152/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.26 to 2.1.27 (#1137) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.26 to 2.1.27. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.26...v2.1.27) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-version: 2.1.27 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 15a1bf247..c50cc497c 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.1.2 3.13.0 2.35.2 - 2.1.26 + 2.1.27 From 8c8f6ca3e61773c7a5f9e5f7bddb15a657bed783 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 13:44:54 -0300 Subject: [PATCH 153/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.26 to 2.1.27 (#1141) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.26 to 2.1.27. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.26...v2.1.27) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-version: 2.1.27 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From c750dfcbae499f5d4625834d68e07ccc311f8784 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Tue, 13 May 2025 14:16:49 -0300 Subject: [PATCH 154/166] Adjust server codestarts (#1143) --- .../codestart.yml | 8 ++------ .../java/README.tpl.qute.md | 0 .../java/src/main/resources/application.yml | 0 .../java/src/main/resources/openapi/openapi.yml | 0 4 files changed, 2 insertions(+), 6 deletions(-) rename server/runtime/src/main/codestarts/quarkus/{openapi-generator-codestart => openapi-generator-server-codestart}/codestart.yml (68%) rename server/runtime/src/main/codestarts/quarkus/{openapi-generator-codestart => openapi-generator-server-codestart}/java/README.tpl.qute.md (100%) rename server/runtime/src/main/codestarts/quarkus/{openapi-generator-codestart => openapi-generator-server-codestart}/java/src/main/resources/application.yml (100%) rename server/runtime/src/main/codestarts/quarkus/{openapi-generator-codestart => openapi-generator-server-codestart}/java/src/main/resources/openapi/openapi.yml (100%) diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/codestart.yml similarity index 68% rename from server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml rename to server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/codestart.yml index 69006d404..edb0f3322 100644 --- a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/codestart.yml +++ b/server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/codestart.yml @@ -1,17 +1,13 @@ -name: openapi-generator-server +name: openapi-generator-server-codestart ref: openapi-generator-server type: code tags: extension-codestart metadata: - title: OpenAPI Generator Codestart - Server Extension + title: OpenAPI Generator Server description: This codestart generates a simple API with OpenAPI documentation. related-guide-section: https://docs.quarkiverse.io/quarkus-openapi-generator/dev/server.html language: base: - data: - resource: - class-name: YourResource - path: "/your-api" dependencies: - io.quarkus:quarkus-resteasy - io.quarkus:quarkus-smallrye-openapi \ No newline at end of file diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md b/server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/README.tpl.qute.md similarity index 100% rename from server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/README.tpl.qute.md rename to server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/README.tpl.qute.md diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/src/main/resources/application.yml similarity index 100% rename from server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/application.yml rename to server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/src/main/resources/application.yml diff --git a/server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml b/server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/src/main/resources/openapi/openapi.yml similarity index 100% rename from server/runtime/src/main/codestarts/quarkus/openapi-generator-codestart/java/src/main/resources/openapi/openapi.yml rename to server/runtime/src/main/codestarts/quarkus/openapi-generator-server-codestart/java/src/main/resources/openapi/openapi.yml From 340d51fbcdba8f043bc88282f8f8377f174476a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 08:12:56 -0300 Subject: [PATCH 155/166] Bump quarkus.version from 3.22.2 to 3.22.3 (#1144) Bumps `quarkus.version` from 3.22.2 to 3.22.3. Updates `io.quarkus:quarkus-bom` from 3.22.2 to 3.22.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.2...3.22.3) Updates `io.quarkus:quarkus-maven-plugin` from 3.22.2 to 3.22.3 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.22.2 to 3.22.3 Updates `io.quarkus:quarkus-extension-processor` from 3.22.2 to 3.22.3 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.22.2 to 3.22.3 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.2...3.22.3) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.22.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.22.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.22.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.22.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.22.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c50cc497c..1abc96d94 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.22.2 + 3.22.3 1.2.1.Final 3.26.4 3.27.3 From dd8ccf0c417a7ffb5b082b8d05ed939763bc2d5d Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Sat, 17 May 2025 10:30:30 -0300 Subject: [PATCH 156/166] Improve shouldRun method (#1142) --- .../deployment/ServerCodegenConfig.java | 1 + .../codegen/ApicurioOpenApiServerCodegen.java | 30 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java index e7aa8454e..f2a9873e8 100644 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/ServerCodegenConfig.java @@ -7,6 +7,7 @@ public interface ServerCodegenConfig { String DEFAULT_PACKAGE = "io.apicurio.api"; + String DEFAULT_DIR = "openapi"; /** * The OpenAPI specification filename. diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java index a645032d0..84c58f0af 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java @@ -1,9 +1,12 @@ package io.quarkiverse.openapi.server.generator.deployment.codegen; +import static io.quarkiverse.openapi.server.generator.deployment.ServerCodegenConfig.DEFAULT_DIR; + import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Optional; import org.eclipse.microprofile.config.Config; import org.slf4j.Logger; @@ -36,27 +39,34 @@ public String inputDirectory() { return "resources"; } - private Path getInputBaseDir(final Path sourceDir, final Config config) { - return config.getOptionalValue(CodegenConfig.getInputBaseDirPropertyName(), String.class) - .map(inputBaseDir -> { - int srcIndex = sourceDir.toString().lastIndexOf("src"); - return Path.of(sourceDir.toString().substring(0, srcIndex), inputBaseDir); - }).orElse(Path.of(sourceDir.toString(), "openapi")); + private Optional getInputBaseDirRelativeToModule(final Path sourceDir, final Config config) { + return config.getOptionalValue(CodegenConfig.getInputBaseDirPropertyName(), String.class).map(baseDir -> { + int srcIndex = sourceDir.toString().lastIndexOf("src"); + return srcIndex < 0 ? null : Path.of(sourceDir.toString().substring(0, srcIndex), baseDir).toString(); + }); } @Override public boolean shouldRun(Path sourceDir, Config config) { - boolean specIsPresent = config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isPresent(); - if (!specIsPresent) { + Optional possibleSpecPropertyName = config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class); + if (possibleSpecPropertyName.isEmpty()) { log.warn("The {} property is not present, the code generation will be ignored", CodegenConfig.getSpecPropertyName()); + return false; + } + String specPropertyName = possibleSpecPropertyName.get(); + String relativeInputBaseDir = getInputBaseDirRelativeToModule(sourceDir, config).orElse(null); + if (relativeInputBaseDir != null) { + return Files.exists(Path.of(relativeInputBaseDir).resolve(specPropertyName)); + } else { + return Files.exists(sourceDir.resolve(DEFAULT_DIR).resolve(specPropertyName)); } - return specIsPresent; } @Override public boolean trigger(CodeGenContext context) throws CodeGenException { - final Path openApiDir = getInputBaseDir(context.inputDir(), context.config()); + final Path openApiDir = Path.of(getInputBaseDirRelativeToModule(context.inputDir(), context.config()) + .orElse(context.inputDir().resolve(DEFAULT_DIR).toString())); validateOpenApiDir(context, openApiDir); From 6ab80b23a9c354d1ae448f7656a0c609051ab4e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 08:38:07 -0300 Subject: [PATCH 157/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.27 to 2.1.28 (#1149) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.27 to 2.1.28. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.27...v2.1.28) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-version: 2.1.28 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1abc96d94..25a795922 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.1.2 3.13.0 2.35.2 - 2.1.27 + 2.1.28 From 75741513e5a7b125ce5255530b2ced75deff47d5 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini <1538000+ricardozanini@users.noreply.github.com> Date: Wed, 21 May 2025 08:52:40 -0300 Subject: [PATCH 158/166] Fix #1151 - Fail on scenarios where OAuth2 is required and OIDC is not in the classpath (#1152) * Fix #1151 - Fail on scenarios where OAuth2 is required and OIDC is not in the classpath Signed-off-by: Ricardo Zanini * Added missing dependencies to mvn profile Signed-off-by: Ricardo Zanini --------- Signed-off-by: Ricardo Zanini --- .../deployment/GeneratorProcessor.java | 26 ++++++++++++++----- .../generation-tests/pom.xml | 25 ++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java index 397e43974..1d48b9849 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/GeneratorProcessor.java @@ -128,14 +128,10 @@ void produceCompositeProviders(AuthenticationRecorder recorder, List authenticationProviders, BuildProducer beanProducer, + BuildProducer authenticationProviders, + BuildProducer beanProducer, OidcAuthenticationRecorder oidcRecorder) { - if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { - LOGGER.debug("{} class not found in runtime, skipping OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); - return; - } - LOGGER.debug("{} class found in runtime, producing OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); Collection authenticationMarkers = beanArchiveBuildItem.getIndex() .getAnnotationsWithRepeatable(OAUTH_AUTHENTICATION_MARKER, beanArchiveBuildItem.getIndex()) .stream() @@ -145,6 +141,24 @@ void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem, (existing, duplicate) -> existing)) .values(); + if (!isClassPresentAtRuntime(ABSTRACT_TOKEN_PRODUCER)) { + if (!authenticationMarkers.isEmpty()) { + throw new IllegalStateException( + "OAuth2 flows detected in spec(s) " + + authenticationMarkers.stream() + .map(m -> m.value("openApiSpecId").asString()) + .distinct() + .collect(Collectors.joining(", ")) + + + " but quarkus-openapi-generator-oidc and quarkus-rest-client-oidc-filter or quarkus-oidc-client-reactive-filter are not on the classpath. " + + + "Please add those dependencies to your project. See https://docs.quarkiverse.io/quarkus-openapi-generator/dev/client.html#_oauth2_authentication"); + } + LOGGER.debug("{} class not found in runtime, skipping OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); + return; + } + LOGGER.debug("{} class found in runtime, producing OAuth bean generation", ABSTRACT_TOKEN_PRODUCER); + Map> operationsBySpec = getOperationsBySpec(beanArchiveBuildItem); for (AnnotationInstance authenticationMarker : authenticationMarkers) { diff --git a/client/integration-tests/generation-tests/pom.xml b/client/integration-tests/generation-tests/pom.xml index 2d699f578..605dd880f 100644 --- a/client/integration-tests/generation-tests/pom.xml +++ b/client/integration-tests/generation-tests/pom.xml @@ -15,6 +15,10 @@ io.quarkiverse.openapi.generator quarkus-openapi-generator + + io.quarkiverse.openapi.generator + quarkus-openapi-generator-oidc + io.quarkiverse.openapi.generator quarkus-openapi-generator-it-generation-input @@ -92,5 +96,26 @@ native + + resteasy-classic + + true + + + + io.quarkus + quarkus-resteasy-client-oidc-filter + + + + + resteasy-reactive + + + io.quarkus + quarkus-rest-client-oidc-filter + + + From e41ef644039fd3502bcfa8fdb22ab7d97c5474d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 10:09:51 -0300 Subject: [PATCH 159/166] Bump quarkus.version from 3.22.3 to 3.23.0 (#1157) Bumps `quarkus.version` from 3.22.3 to 3.23.0. Updates `io.quarkus:quarkus-bom` from 3.22.3 to 3.23.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.3...3.23.0) Updates `io.quarkus:quarkus-maven-plugin` from 3.22.3 to 3.23.0 Updates `io.quarkus:quarkus-config-doc-maven-plugin` from 3.22.3 to 3.23.0 Updates `io.quarkus:quarkus-extension-processor` from 3.22.3 to 3.23.0 Updates `io.quarkus:quarkus-extension-maven-plugin` from 3.22.3 to 3.23.0 - [Release notes](https://github.com/quarkusio/quarkus/releases) - [Commits](https://github.com/quarkusio/quarkus/compare/3.22.3...3.23.0) --- updated-dependencies: - dependency-name: io.quarkus:quarkus-bom dependency-version: 3.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-maven-plugin dependency-version: 3.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-config-doc-maven-plugin dependency-version: 3.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-processor dependency-version: 3.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.quarkus:quarkus-extension-maven-plugin dependency-version: 3.23.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25a795922..fc3ffce70 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 17 UTF-8 UTF-8 - 3.22.3 + 3.23.0 1.2.1.Final 3.26.4 3.27.3 From b0d7634acb3f194a322c65dc589916ef95b2ec26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 May 2025 09:39:57 -0300 Subject: [PATCH 160/166] Bump io.swagger.parser.v3:swagger-parser from 2.1.28 to 2.1.29 (#1159) Bumps [io.swagger.parser.v3:swagger-parser](https://github.com/swagger-api/swagger-parser) from 2.1.28 to 2.1.29. - [Release notes](https://github.com/swagger-api/swagger-parser/releases) - [Commits](https://github.com/swagger-api/swagger-parser/compare/v2.1.28...v2.1.29) --- updated-dependencies: - dependency-name: io.swagger.parser.v3:swagger-parser dependency-version: 2.1.29 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fc3ffce70..b686f9cd0 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.1.2 3.13.0 2.35.2 - 2.1.28 + 2.1.29 From bf2608edc1ef5a59a9dd5df21f144e973d345aff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:47:05 -0300 Subject: [PATCH 161/166] Bump dawidd6/action-download-artifact from 9 to 10 (#1164) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 9 to 10. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v9...v10) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-version: '10' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index c6c6ae8c0..33b149eed 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -12,7 +12,7 @@ jobs: if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - name: Download PR Artifact - uses: dawidd6/action-download-artifact@v9 + uses: dawidd6/action-download-artifact@v10 with: workflow: ${{ github.event.workflow_run.workflow_id }} workflow_conclusion: success From 6393e0cc36d083d764dcd2e7a0c3cf8ad94ac798 Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 05:18:09 -0300 Subject: [PATCH 162/166] Reenable tests on Windows Issue 868 --- .github/workflows/build.yml | 4 ++-- client/test-utils/pom.xml | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1e46d5f34..0f9f8c49c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' }, @@ -59,7 +59,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' }, diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index e72a863c7..b843037cf 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -34,5 +34,17 @@ awaitility + + + + org.apache.maven.plugins + maven-compiler-plugin + + 7 + 7 + + + + \ No newline at end of file From 399b54bba97ea78af16ba48acd80d59f20be78c0 Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 05:21:05 -0300 Subject: [PATCH 163/166] Revert "Reenable tests on Windows" This reverts commit 6393e0cc36d083d764dcd2e7a0c3cf8ad94ac798. --- .github/workflows/build.yml | 4 ++-- client/test-utils/pom.xml | 12 ------------ 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f9f8c49c..1e46d5f34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ ubuntu-latest, - windows-latest +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 ] java: [ { 'version': '17' }, @@ -59,7 +59,7 @@ jobs: matrix: os: [ ubuntu-latest, - windows-latest +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 ] java: [ { 'version': '17' }, diff --git a/client/test-utils/pom.xml b/client/test-utils/pom.xml index b843037cf..e72a863c7 100644 --- a/client/test-utils/pom.xml +++ b/client/test-utils/pom.xml @@ -34,17 +34,5 @@ awaitility - - - - org.apache.maven.plugins - maven-compiler-plugin - - 7 - 7 - - - - \ No newline at end of file From c7805040069a93d22d092fae8190f65b6bac5116 Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 05:22:08 -0300 Subject: [PATCH 164/166] Reenable tests on Windows Issue 868 --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1e46d5f34..0f9f8c49c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' }, @@ -59,7 +59,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' }, From 4286dfd554236d22cb091410ca2d20cad8194ffe Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 05:23:35 -0300 Subject: [PATCH 165/166] Revert "Reenable tests on Windows" This reverts commit c7805040069a93d22d092fae8190f65b6bac5116. --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f9f8c49c..1e46d5f34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ ubuntu-latest, - windows-latest +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 ] java: [ { 'version': '17' }, @@ -59,7 +59,7 @@ jobs: matrix: os: [ ubuntu-latest, - windows-latest +# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 ] java: [ { 'version': '17' }, From 580815348df47de215d71a75d9e67c209245ccc8 Mon Sep 17 00:00:00 2001 From: dellamas Date: Tue, 3 Jun 2025 05:30:25 -0300 Subject: [PATCH 166/166] Reenable tests on Windows Issue 868 --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1e46d5f34..0f9f8c49c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' }, @@ -59,7 +59,7 @@ jobs: matrix: os: [ ubuntu-latest, -# windows-latest - Disabled due to https://github.com/quarkiverse/quarkus-openapi-generator/pull/836#issuecomment-2457329495 + windows-latest ] java: [ { 'version': '17' },