mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2026-01-04 17:17:07 +00:00
Compare commits
1 Commits
r-github
...
snakeyaml-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d36201c211 |
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -18,5 +18,4 @@
|
||||
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example `./bin/generate-samples.sh bin/configs/java*`.
|
||||
IMPORTANT: Do **NOT** purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
|
||||
- [ ] File the PR against the [correct branch](https://github.com/OpenAPITools/openapi-generator/wiki/Git-Branches): `master` (upcoming `7.x.0` minor release - breaking changes with fallbacks), `8.0.x` (breaking changes without fallbacks)
|
||||
- [ ] If your PR solves a reported issue, reference it using [GitHub's linking syntax](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) (e.g., having `"fixes #123"` present in the PR description)
|
||||
- [ ] If your PR is targeting a particular programming language, @mention the [technical committee](https://github.com/openapitools/openapi-generator/#62---openapi-generator-technical-committee) members, so they are more likely to review the pull request.
|
||||
|
||||
44
.github/workflows/openapi-generator.yaml
vendored
44
.github/workflows/openapi-generator.yaml
vendored
@@ -142,19 +142,37 @@ jobs:
|
||||
path: modules/openapi-generator-cli/target
|
||||
- name: Delete samples that are entirely generated
|
||||
run: |
|
||||
# List all directories in generichost, filter out Manual directories, and remove the rest
|
||||
cd samples/client/petstore/csharp/generichost
|
||||
for version_dir in */ ; do
|
||||
if [ -d "$version_dir" ]; then
|
||||
cd "$version_dir"
|
||||
for dir in */ ; do
|
||||
if [ -d "$dir" ] && [[ ! "$dir" =~ Manual ]]; then
|
||||
rm -rf "$dir"
|
||||
fi
|
||||
done
|
||||
cd ..
|
||||
fi
|
||||
done
|
||||
rm -rf samples/client/petstore/csharp/generichost/latest/HelloWorld
|
||||
rm -rf samples/client/petstore/csharp/generichost/latest/Tags
|
||||
rm -rf samples/client/petstore/csharp/generichost/latest/OneOfList
|
||||
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AllOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/FormModels
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/NullReferenceTypes
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/OneOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/Petstore
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/SourceGeneration
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate
|
||||
|
||||
rm -rf samples/client/petstore/csharp/generichost/standard2.0/Petstore
|
||||
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/AllOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/AnyOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/FormModels
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/OneOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/Petstore
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate
|
||||
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/AllOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/AnyOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/FormModels
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/OneOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/Petstore
|
||||
rm -rf samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate
|
||||
- name: Generate samples
|
||||
run: |
|
||||
bash bin/generate-samples.sh
|
||||
|
||||
30
.github/workflows/samples-cpp-oatpp-server.yaml
vendored
30
.github/workflows/samples-cpp-oatpp-server.yaml
vendored
@@ -1,30 +0,0 @@
|
||||
name: Samples cpp oat++ server
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "samples/server/petstore/cpp-oatpp/**"
|
||||
pull_request:
|
||||
paths:
|
||||
- "samples/server/petstore/cpp-oatpp/**"
|
||||
|
||||
env:
|
||||
GRADLE_VERSION: 6.9
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build cpp qt client
|
||||
strategy:
|
||||
matrix:
|
||||
sample:
|
||||
- samples/server/petstore/cpp-oatpp
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- macOS-latest
|
||||
- windows-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: ${{ matrix.sample }}
|
||||
run: cmake -B build && cmake --build build --verbose
|
||||
@@ -6,7 +6,6 @@ on:
|
||||
- samples/client/petstore/java/resttemplate-jakarta/**
|
||||
- samples/client/petstore/java/webclient-jakarta/**
|
||||
- samples/client/petstore/java/restclient-*/**
|
||||
- samples/client/others/java/webclient-sealedInterface/**
|
||||
- samples/client/petstore/java/webclient-useSingleRequestParameter/**
|
||||
- samples/client/others/java/restclient-enum-in-multipart/**
|
||||
pull_request:
|
||||
@@ -14,7 +13,6 @@ on:
|
||||
- samples/client/petstore/java/resttemplate-jakarta/**
|
||||
- samples/client/petstore/java/webclient-jakarta/**
|
||||
- samples/client/petstore/java/restclient-*/**
|
||||
- samples/client/others/java/webclient-sealedInterface/**
|
||||
- samples/client/petstore/java/webclient-useSingleRequestParameter/**
|
||||
- samples/client/others/java/restclient-enum-in-multipart/**
|
||||
jobs:
|
||||
@@ -33,7 +31,6 @@ jobs:
|
||||
- samples/client/petstore/java/restclient-swagger2
|
||||
- samples/client/petstore/java/restclient-useSingleRequestParameter
|
||||
- samples/client/petstore/java/restclient-useSingleRequestParameter-static
|
||||
- samples/client/others/java/webclient-sealedInterface
|
||||
- samples/client/petstore/java/webclient-useSingleRequestParameter
|
||||
- samples/client/others/java/restclient-enum-in-multipart
|
||||
steps:
|
||||
|
||||
45
.github/workflows/samples-php-client.yaml
vendored
45
.github/workflows/samples-php-client.yaml
vendored
@@ -1,45 +0,0 @@
|
||||
name: Samples PHP clients
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- samples/client/petstore/php/OpenAPIClient-php/**
|
||||
pull_request:
|
||||
paths:
|
||||
- samples/client/petstore/php/OpenAPIClient-php/**
|
||||
jobs:
|
||||
build:
|
||||
name: Build PHP projects
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php:
|
||||
- "8.1"
|
||||
- "8.2"
|
||||
- "8.3"
|
||||
- "8.4"
|
||||
sample:
|
||||
# clients
|
||||
- samples/client/petstore/php/OpenAPIClient-php/
|
||||
services:
|
||||
petstore-api:
|
||||
image: swaggerapi/petstore
|
||||
ports:
|
||||
- 80:8080
|
||||
env:
|
||||
SWAGGER_HOST: http://petstore.swagger.io
|
||||
SWAGGER_BASE_PATH: /v2
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: php-cs-fixer, phpunit
|
||||
- name: composer install
|
||||
working-directory: ${{ matrix.sample }}
|
||||
run: composer install
|
||||
- name: phpunit
|
||||
working-directory: ${{ matrix.sample }}
|
||||
run: vendor/bin/phpunit tests
|
||||
43
.github/workflows/samples-r-petstore.yaml
vendored
43
.github/workflows/samples-r-petstore.yaml
vendored
@@ -1,43 +0,0 @@
|
||||
name: Samples R Petstore
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'samples/client/petstore/R/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'samples/client/petstore/R/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build R
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
sample:
|
||||
- 'samples/client/petstore/R/'
|
||||
services:
|
||||
petstore-api:
|
||||
image: swaggerapi/petstore
|
||||
ports:
|
||||
- 80:8080
|
||||
env:
|
||||
SWAGGER_HOST: http://petstore.swagger.io
|
||||
SWAGGER_BASE_PATH: /v2
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: r-lib/actions/setup-r@v2
|
||||
with:
|
||||
r-version: 3.6.1
|
||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||
with:
|
||||
cache-version: 2
|
||||
- name: Install curl
|
||||
run: sudo apt-get install -y r-cran-curl
|
||||
- name: build and test
|
||||
working-directory: ${{ matrix.sample }}
|
||||
run: |
|
||||
# export _R_CHECK_FORCE_SUGGESTS_=false
|
||||
/bin/bash build_and_test.bash
|
||||
shell: bash
|
||||
3
.github/workflows/samples-spring-jdk17.yaml
vendored
3
.github/workflows/samples-spring-jdk17.yaml
vendored
@@ -10,7 +10,6 @@ on:
|
||||
- samples/server/petstore/springboot-lombok-tostring
|
||||
- samples/server/petstore/springboot-file-delegate-optional
|
||||
- samples/server/petstore/springboot-petstore-with-api-response-examples
|
||||
- samples/server/petstore/spring-boot-oneof-sealed
|
||||
pull_request:
|
||||
paths:
|
||||
- samples/openapi3/client/petstore/spring-cloud-3-with-optional
|
||||
@@ -20,7 +19,6 @@ on:
|
||||
- samples/server/petstore/springboot-lombok-tostring
|
||||
- samples/server/petstore/springboot-file-delegate-optional
|
||||
- samples/server/petstore/springboot-petstore-with-api-response-examples
|
||||
- samples/server/petstore/spring-boot-oneof-sealed
|
||||
jobs:
|
||||
build:
|
||||
name: Build Java Spring (JDK17)
|
||||
@@ -38,7 +36,6 @@ jobs:
|
||||
- samples/server/petstore/springboot-lombok-tostring
|
||||
- samples/server/petstore/springboot-file-delegate-optional
|
||||
- samples/server/petstore/springboot-petstore-with-api-response-examples
|
||||
- samples/server/petstore/spring-boot-oneof-sealed
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-java@v4
|
||||
|
||||
@@ -76,7 +76,6 @@ If you find OpenAPI Generator useful for work, please consider asking your compa
|
||||
[<img src="https://openapi-generator.tech/img/companies/clickit.jpg" width="128" height="128">](https://www.clickittech.com/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||
[<img src="https://openapi-generator.tech/img/companies/unified_to.jpg" width="128" height="128">](https://unified.to/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||
[<img src="https://openapi-generator.tech/img/companies/savetwt.jpg" width="128" height="128">](https://savetwt.com/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||
[<img src="https://openapi-generator.tech/img/companies/serpapi.png" width="128" height="128">](https://serpapi.com/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||
|
||||
#### Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity
|
||||
|
||||
@@ -92,7 +91,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se
|
||||
| | Languages/Frameworks |
|
||||
| -------------------------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.1, .NET Core 3.1, .NET 5.0. Libraries: RestSharp, GenericHost, HttpClient), **C++** (Arduino, cpp-restsdk, Qt5, Tizen, Unreal Engine 4), **Clojure**, **Crystal**, **Dart**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Apache HttpClient 4.x, Apache HttpClient 5.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, Spring 6 RestClient, MicroProfile Rest Client, Helidon), **Jetbrains HTTP Client**, **Julia**, **k6**, **Kotlin**, **Lua**, **N4JS**, **Nim**, **Node.js/JavaScript** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), **Objective-C**, **OCaml**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (hyper, reqwest, rust-server), **Scala** (akka, http4s, scalaz, sttp, swagger-async-httpclient, pekko), **Swift** (2.x, 3.x, 4.x, 5.x, 6.x), **Typescript** (AngularJS, Angular (9.x - 19.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs), **XoJo**, **Zapier** |
|
||||
| **Server stubs** | **Ada**, **C#** (ASP.NET Core, Azure Functions), **C++** (Oat++, Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant, Yesod), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/), [Apache Camel](https://camel.apache.org/), [Helidon](https://helidon.io/)), **Julia**, **Kotlin** (Spring Boot, [Ktor](https://github.com/ktorio/ktor), [Vert.x](https://vertx.io/)), **PHP** ([Flight](https://docs.flightphp.com/), Laravel, Lumen, [Mezzio (fka Zend Expressive)](https://github.com/mezzio/mezzio), Slim, Silex, [Symfony](https://symfony.com/)), **Python** (FastAPI, Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** ([rust-server](https://openapi-generator.tech/docs/generators/rust-server/)), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), [Cask](https://github.com/com-lihaoyi/cask), Scalatra) |
|
||||
| **Server stubs** | **Ada**, **C#** (ASP.NET Core, Azure Functions), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant, Yesod), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/), [Apache Camel](https://camel.apache.org/), [Helidon](https://helidon.io/)), **Julia**, **Kotlin** (Spring Boot, [Ktor](https://github.com/ktorio/ktor), [Vert.x](https://vertx.io/)), **PHP** ([Flight](https://docs.flightphp.com/), Laravel, Lumen, [Mezzio (fka Zend Expressive)](https://github.com/mezzio/mezzio), Slim, Silex, [Symfony](https://symfony.com/)), **Python** (FastAPI, Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** ([rust-server](https://openapi-generator.tech/docs/generators/rust-server/)), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), [Cask](https://github.com/com-lihaoyi/cask), Scalatra) |
|
||||
| **API documentation generators** | **HTML**, **Confluence Wiki**, **Asciidoc**, **Markdown**, **PlantUML** |
|
||||
| **Configuration files** | [**Apache2**](https://httpd.apache.org/) |
|
||||
| **Others** | **GraphQL**, **JMeter**, **Ktorm**, **MySQL Schema**, **Postman Collection**, **Protocol Buffer**, **WSDL** |
|
||||
@@ -1128,7 +1127,6 @@ Here is a list of template creators:
|
||||
* C# Azure functions: @Abrhm7786
|
||||
* C# NancyFX: @mstefaniuk
|
||||
* C++ (Qt5 QHttpEngine): @etherealjoy
|
||||
* C++ Oat++: @Kraust
|
||||
* C++ Pistache: @sebymiano
|
||||
* C++ Restbed: @stkrwork
|
||||
* Erlang Server: @galaxie @nelsonvides
|
||||
@@ -1270,7 +1268,7 @@ If you want to join the committee, please kindly apply by sending an email to te
|
||||
| Python | @cbornet (2017/09) @tomplus (2018/10) @krjakbrjak (2023/02) @fa0311 (2023/10) @multani (2023/10) |
|
||||
| R | @Ramanth (2019/07) @saigiridhar21 (2019/07) |
|
||||
| Ruby | @cliffano (2017/07) @zlx (2017/09) @autopp (2019/02) |
|
||||
| Rust | @frol (2017/07) @farcaller (2017/08) @richardwhiuk (2019/07) @paladinzh (2020/05) @jacob-pro (2022/10) @@dsteeley (2025/07) |
|
||||
| Rust | @frol (2017/07) @farcaller (2017/08) @richardwhiuk (2019/07) @paladinzh (2020/05) @jacob-pro (2022/10) |
|
||||
| Scala | @clasnake (2017/07), @shijinkui (2018/01), @ramzimaalej (2018/03), @chameleon82 (2020/03), @Bouillie (2020/04) @fish86 (2023/06) |
|
||||
| Swift | @jgavris (2017/07) @ehyche (2017/08) @Edubits (2017/09) @jaz-ah (2017/09) @4brunu (2019/11) @dydus0x14 (2023/06) |
|
||||
| TypeScript | @TiFu (2017/07) @taxpon (2017/07) @sebastianhaas (2017/07) @kenisteward (2017/07) @Vrolijkx (2017/09) @macjohnny (2018/01) @topce (2018/10) @akehir (2019/07) @petejohansonxo (2019/11) @amakhrov (2020/02) @davidgamero (2022/03) @mkusaka (2022/04) @joscha (2024/10) |
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
generatorName: cpp-oatpp-server
|
||||
outputDir: samples/server/petstore/cpp-oatpp
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/cpp-oatpp-server/petstore.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/cpp-oatpp-server
|
||||
additionalProperties:
|
||||
addExternalLibs: "true"
|
||||
@@ -1,6 +1,6 @@
|
||||
generatorName: dart-dio
|
||||
outputDir: samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
|
||||
typeMappings:
|
||||
Client: "ModelClient"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
generatorName: dart-dio
|
||||
outputDir: samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
|
||||
typeMappings:
|
||||
Client: "ModelClient"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
generatorName: dart
|
||||
outputDir: samples/openapi3/client/petstore/dart2/petstore_client_lib_fake
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/dart2
|
||||
typeMappings:
|
||||
Client: "ModelClient"
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
generatorName: java
|
||||
outputDir: samples/client/others/java/webclient-sealedInterface
|
||||
library: webclient
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/oneof_polymorphism_and_inheritance.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/Java
|
||||
additionalProperties:
|
||||
artifactId: sealed-interface-webclient
|
||||
hideGenerationTimestamp: "true"
|
||||
useOneOfInterfaces: true
|
||||
useSealedOneOfInterfaces: true
|
||||
@@ -1,14 +0,0 @@
|
||||
generatorName: rust-axum
|
||||
outputDir: samples/server/petstore/rust-axum/output/apikey-authorization
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/jetbrains/CheckoutBasicBearerCookieQueryHeaderBasicBearer.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/rust-axum
|
||||
generateAliasAsModel: true
|
||||
additionalProperties:
|
||||
hideGenerationTimestamp: "true"
|
||||
packageName: apikey-authorization
|
||||
basicAuthorization: true
|
||||
basicAnalytic: true
|
||||
ownedRequest: true
|
||||
globalProperties:
|
||||
skipFormModel: false
|
||||
enablePostProcessFile: true
|
||||
@@ -1,13 +0,0 @@
|
||||
generatorName: spring
|
||||
outputDir: samples/openapi3/server/petstore/spring-boot-oneof-sealed
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/oneof_polymorphism_and_inheritance.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
|
||||
additionalProperties:
|
||||
groupId: org.openapitools.openapi3
|
||||
documentationProvider: springdoc
|
||||
artifactId: springboot-oneof-sealed
|
||||
snapshotVersion: "true"
|
||||
hideGenerationTimestamp: "true"
|
||||
generateBuilders: true
|
||||
useOneOfInterfaces: true
|
||||
useSealed: true
|
||||
@@ -1,8 +0,0 @@
|
||||
generatorName: typescript-angular
|
||||
outputDir: samples/client/petstore/typescript-angular-v20/builds/default
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
|
||||
templateDir: modules/openapi-generator/src/main/resources/typescript-angular
|
||||
additionalProperties:
|
||||
ngVersion: 20.0.0
|
||||
npmName: sample-angular-20-0-0
|
||||
supportsES6: true
|
||||
@@ -48,4 +48,4 @@ workflows:
|
||||
|
||||
meta:
|
||||
bitrise.io:
|
||||
stack: osx-xcode-16.3.x
|
||||
stack: osx-xcode-16.0.x
|
||||
|
||||
@@ -87,7 +87,6 @@ The following generators are available:
|
||||
* [ada-server](generators/ada-server.md)
|
||||
* [aspnet-fastendpoints](generators/aspnet-fastendpoints.md)
|
||||
* [aspnetcore](generators/aspnetcore.md)
|
||||
* [cpp-oatpp-server](generators/cpp-oatpp-server.md)
|
||||
* [cpp-pistache-server](generators/cpp-pistache-server.md)
|
||||
* [cpp-qt-qhttpengine-server](generators/cpp-qt-qhttpengine-server.md)
|
||||
* [cpp-restbed-server](generators/cpp-restbed-server.md)
|
||||
|
||||
@@ -65,7 +65,6 @@ The following generators are available:
|
||||
## SERVER generators
|
||||
* [ada-server](ada-server.md)
|
||||
* [aspnetcore](aspnetcore.md)
|
||||
* [cpp-oatpp-server](cpp-oatpp-server.md)
|
||||
* [cpp-pistache-server](cpp-pistache-server.md)
|
||||
* [cpp-qt5-qhttpengine-server](cpp-qt5-qhttpengine-server.md)
|
||||
* [cpp-restbed-server](cpp-restbed-server.md)
|
||||
|
||||
@@ -1,262 +0,0 @@
|
||||
---
|
||||
title: Documentation for the cpp-oatpp-server Generator
|
||||
---
|
||||
|
||||
## METADATA
|
||||
|
||||
| Property | Value | Notes |
|
||||
| -------- | ----- | ----- |
|
||||
| generator name | cpp-oatpp-server | pass this to the generate command after -g |
|
||||
| generator stability | STABLE | |
|
||||
| generator type | SERVER | |
|
||||
| generator language | C++ | |
|
||||
| generator default templating engine | mustache | |
|
||||
| helpTxt | Generates a C++ API server (based on Oat++) | |
|
||||
|
||||
## CONFIG OPTIONS
|
||||
These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details.
|
||||
|
||||
| Option | Description | Values | Default |
|
||||
| ------ | ----------- | ------ | ------- |
|
||||
|addExternalLibs|Add the Possibility to fetch and compile external Libraries needed by this Framework.| |true|
|
||||
|reservedWordPrefix|Prefix to prepend to reserved words in order to avoid conflicts| |r_|
|
||||
|variableNameFirstCharacterUppercase|Make first character of variable name uppercase (eg. value -> Value)| |true|
|
||||
|
||||
## IMPORT MAPPING
|
||||
|
||||
| Type/Alias | Imports |
|
||||
| ---------- | ------- |
|
||||
|
||||
|
||||
## INSTANTIATION TYPES
|
||||
|
||||
| Type/Alias | Instantiated By |
|
||||
| ---------- | --------------- |
|
||||
|
||||
|
||||
## LANGUAGE PRIMITIVES
|
||||
|
||||
<ul class="column-ul">
|
||||
<li>oatpp::Any</li>
|
||||
<li>oatpp::Boolean</li>
|
||||
<li>oatpp::Fields</li>
|
||||
<li>oatpp::Float64</li>
|
||||
<li>oatpp::Int32</li>
|
||||
<li>oatpp::Int64</li>
|
||||
<li>oatpp::Object</li>
|
||||
<li>oatpp::String</li>
|
||||
<li>oatpp::UnorderedSet</li>
|
||||
<li>oatpp::Vector</li>
|
||||
</ul>
|
||||
|
||||
## RESERVED WORDS
|
||||
|
||||
<ul class="column-ul">
|
||||
<li>NULL</li>
|
||||
<li>alignas</li>
|
||||
<li>alignof</li>
|
||||
<li>and</li>
|
||||
<li>and_eq</li>
|
||||
<li>asm</li>
|
||||
<li>auto</li>
|
||||
<li>bitand</li>
|
||||
<li>bitor</li>
|
||||
<li>bool</li>
|
||||
<li>break</li>
|
||||
<li>case</li>
|
||||
<li>catch</li>
|
||||
<li>char</li>
|
||||
<li>char16_t</li>
|
||||
<li>char32_t</li>
|
||||
<li>class</li>
|
||||
<li>compl</li>
|
||||
<li>concept</li>
|
||||
<li>const</li>
|
||||
<li>const_cast</li>
|
||||
<li>constexpr</li>
|
||||
<li>continue</li>
|
||||
<li>decltype</li>
|
||||
<li>default</li>
|
||||
<li>delete</li>
|
||||
<li>do</li>
|
||||
<li>double</li>
|
||||
<li>dynamic_cast</li>
|
||||
<li>else</li>
|
||||
<li>enum</li>
|
||||
<li>explicit</li>
|
||||
<li>export</li>
|
||||
<li>extern</li>
|
||||
<li>false</li>
|
||||
<li>float</li>
|
||||
<li>for</li>
|
||||
<li>friend</li>
|
||||
<li>goto</li>
|
||||
<li>if</li>
|
||||
<li>inline</li>
|
||||
<li>int</li>
|
||||
<li>linux</li>
|
||||
<li>long</li>
|
||||
<li>mutable</li>
|
||||
<li>namespace</li>
|
||||
<li>new</li>
|
||||
<li>noexcept</li>
|
||||
<li>not</li>
|
||||
<li>not_eq</li>
|
||||
<li>nullptr</li>
|
||||
<li>operator</li>
|
||||
<li>or</li>
|
||||
<li>or_eq</li>
|
||||
<li>private</li>
|
||||
<li>protected</li>
|
||||
<li>public</li>
|
||||
<li>register</li>
|
||||
<li>reinterpret_cast</li>
|
||||
<li>requires</li>
|
||||
<li>return</li>
|
||||
<li>short</li>
|
||||
<li>signed</li>
|
||||
<li>sizeof</li>
|
||||
<li>static</li>
|
||||
<li>static_assert</li>
|
||||
<li>static_cast</li>
|
||||
<li>struct</li>
|
||||
<li>switch</li>
|
||||
<li>template</li>
|
||||
<li>this</li>
|
||||
<li>thread_local</li>
|
||||
<li>throw</li>
|
||||
<li>true</li>
|
||||
<li>try</li>
|
||||
<li>typedef</li>
|
||||
<li>typeid</li>
|
||||
<li>typename</li>
|
||||
<li>union</li>
|
||||
<li>unsigned</li>
|
||||
<li>using</li>
|
||||
<li>virtual</li>
|
||||
<li>void</li>
|
||||
<li>volatile</li>
|
||||
<li>wchar_t</li>
|
||||
<li>while</li>
|
||||
<li>xor</li>
|
||||
<li>xor_eq</li>
|
||||
</ul>
|
||||
|
||||
## FEATURE SET
|
||||
|
||||
|
||||
### Client Modification Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|BasePath|✗|ToolingExtension
|
||||
|Authorizations|✗|ToolingExtension
|
||||
|UserAgent|✗|ToolingExtension
|
||||
|MockServer|✗|ToolingExtension
|
||||
|
||||
### Data Type Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|Custom|✗|OAS2,OAS3
|
||||
|Int32|✓|OAS2,OAS3
|
||||
|Int64|✓|OAS2,OAS3
|
||||
|Float|✓|OAS2,OAS3
|
||||
|Double|✓|OAS2,OAS3
|
||||
|Decimal|✓|ToolingExtension
|
||||
|String|✓|OAS2,OAS3
|
||||
|Byte|✓|OAS2,OAS3
|
||||
|Binary|✓|OAS2,OAS3
|
||||
|Boolean|✓|OAS2,OAS3
|
||||
|Date|✓|OAS2,OAS3
|
||||
|DateTime|✓|OAS2,OAS3
|
||||
|Password|✓|OAS2,OAS3
|
||||
|File|✓|OAS2
|
||||
|Uuid|✗|
|
||||
|Array|✓|OAS2,OAS3
|
||||
|Null|✗|OAS3
|
||||
|AnyType|✗|OAS2,OAS3
|
||||
|Object|✓|OAS2,OAS3
|
||||
|Maps|✓|ToolingExtension
|
||||
|CollectionFormat|✓|OAS2
|
||||
|CollectionFormatMulti|✓|OAS2
|
||||
|Enum|✓|OAS2,OAS3
|
||||
|ArrayOfEnum|✓|ToolingExtension
|
||||
|ArrayOfModel|✓|ToolingExtension
|
||||
|ArrayOfCollectionOfPrimitives|✓|ToolingExtension
|
||||
|ArrayOfCollectionOfModel|✓|ToolingExtension
|
||||
|ArrayOfCollectionOfEnum|✓|ToolingExtension
|
||||
|MapOfEnum|✓|ToolingExtension
|
||||
|MapOfModel|✓|ToolingExtension
|
||||
|MapOfCollectionOfPrimitives|✓|ToolingExtension
|
||||
|MapOfCollectionOfModel|✓|ToolingExtension
|
||||
|MapOfCollectionOfEnum|✓|ToolingExtension
|
||||
|
||||
### Documentation Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|Readme|✓|ToolingExtension
|
||||
|Model|✓|ToolingExtension
|
||||
|Api|✓|ToolingExtension
|
||||
|
||||
### Global Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|Host|✓|OAS2,OAS3
|
||||
|BasePath|✓|OAS2,OAS3
|
||||
|Info|✓|OAS2,OAS3
|
||||
|Schemes|✗|OAS2,OAS3
|
||||
|PartialSchemes|✓|OAS2,OAS3
|
||||
|Consumes|✓|OAS2
|
||||
|Produces|✓|OAS2
|
||||
|ExternalDocumentation|✓|OAS2,OAS3
|
||||
|Examples|✓|OAS2,OAS3
|
||||
|XMLStructureDefinitions|✗|OAS2,OAS3
|
||||
|MultiServer|✗|OAS3
|
||||
|ParameterizedServer|✗|OAS3
|
||||
|ParameterStyling|✗|OAS3
|
||||
|Callbacks|✗|OAS3
|
||||
|LinkObjects|✗|OAS3
|
||||
|
||||
### Parameter Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|Path|✓|OAS2,OAS3
|
||||
|Query|✓|OAS2,OAS3
|
||||
|Header|✓|OAS2,OAS3
|
||||
|Body|✓|OAS2
|
||||
|FormUnencoded|✓|OAS2
|
||||
|FormMultipart|✓|OAS2
|
||||
|Cookie|✗|OAS3
|
||||
|
||||
### Schema Support Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|Simple|✓|OAS2,OAS3
|
||||
|Composite|✓|OAS2,OAS3
|
||||
|Polymorphism|✗|OAS2,OAS3
|
||||
|Union|✗|OAS3
|
||||
|allOf|✗|OAS2,OAS3
|
||||
|anyOf|✗|OAS3
|
||||
|oneOf|✗|OAS3
|
||||
|not|✗|OAS3
|
||||
|
||||
### Security Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|BasicAuth|✗|OAS2,OAS3
|
||||
|ApiKey|✗|OAS2,OAS3
|
||||
|OpenIDConnect|✗|OAS3
|
||||
|BearerToken|✗|OAS3
|
||||
|OAuth2_Implicit|✗|OAS2,OAS3
|
||||
|OAuth2_Password|✗|OAS2,OAS3
|
||||
|OAuth2_ClientCredentials|✗|OAS2,OAS3
|
||||
|OAuth2_AuthorizationCode|✗|OAS2,OAS3
|
||||
|SignatureAuth|✗|OAS3
|
||||
|AWSV4Signature|✗|ToolingExtension
|
||||
|
||||
### Wire Format Feature
|
||||
| Name | Supported | Defined By |
|
||||
| ---- | --------- | ---------- |
|
||||
|JSON|✓|OAS2,OAS3
|
||||
|XML|✓|OAS2,OAS3
|
||||
|PROTOBUF|✗|ToolingExtension
|
||||
|Custom|✗|OAS2,OAS3
|
||||
@@ -66,9 +66,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|licenseName|The name of the license| |Unlicense|
|
||||
|licenseUrl|The URL of the license| |http://unlicense.org|
|
||||
|microprofileFramework|Framework for microprofile. Possible values "kumuluzee"| |null|
|
||||
|microprofileGlobalExceptionMapper|Should ApiExceptionMapper be annotated with @Provider making it a global exception mapper| |true|
|
||||
|microprofileMutiny|Whether to use async types for microprofile (currently only Smallrye Mutiny is supported).| |null|
|
||||
|microprofileRegisterExceptionMapper|Should generated API Clients be annotated with @RegisterProvider(ApiExceptionMapper.class).| |true|
|
||||
|microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null|
|
||||
|modelPackage|package for generated models| |org.openapitools.client.model|
|
||||
|openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true|
|
||||
@@ -103,7 +101,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|useRuntimeException|Use RuntimeException instead of Exception. Only jersey2, jersey3, okhttp-gson, vertx, microprofile support this option.| |false|
|
||||
|useRxJava2|Whether to use the RxJava2 adapter with the retrofit2 library. IMPORTANT: This option has been deprecated.| |false|
|
||||
|useRxJava3|Whether to use the RxJava3 adapter with the retrofit2 library. IMPORTANT: This option has been deprecated.| |false|
|
||||
|useSealedOneOfInterfaces|Generate the oneOf interfaces as sealed interfaces. Only supported for WebClient and RestClient.| |false|
|
||||
|useSingleRequestParameter|Setting this property to "true" will generate functions with a single argument containing all API endpoint parameters instead of one argument per parameter. ONLY native, jersey2, jersey3, okhttp-gson, microprofile, Spring RestClient, Spring WebClient support this option. Setting this property to "static" does the same as "true", but also makes the generated arguments class static with single parameter instantiation.| |false|
|
||||
|webclientBlockingOperations|Making all WebClient operations blocking(sync). Note that if on operation 'x-webclient-blocking: false' then such operation won't be sync| |false|
|
||||
|withAWSV4Signature|whether to include AWS v4 signature support (only available for okhttp-gson library)| |false|
|
||||
|
||||
@@ -66,9 +66,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|licenseName|The name of the license| |Unlicense|
|
||||
|licenseUrl|The URL of the license| |http://unlicense.org|
|
||||
|microprofileFramework|Framework for microprofile. Possible values "kumuluzee"| |null|
|
||||
|microprofileGlobalExceptionMapper|Should ApiExceptionMapper be annotated with @Provider making it a global exception mapper| |true|
|
||||
|microprofileMutiny|Whether to use async types for microprofile (currently only Smallrye Mutiny is supported).| |null|
|
||||
|microprofileRegisterExceptionMapper|Should generated API Clients be annotated with @RegisterProvider(ApiExceptionMapper.class).| |true|
|
||||
|microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null|
|
||||
|modelPackage|package for generated models| |org.openapitools.client.model|
|
||||
|openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true|
|
||||
@@ -103,7 +101,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|useRuntimeException|Use RuntimeException instead of Exception. Only jersey2, jersey3, okhttp-gson, vertx, microprofile support this option.| |false|
|
||||
|useRxJava2|Whether to use the RxJava2 adapter with the retrofit2 library. IMPORTANT: This option has been deprecated.| |false|
|
||||
|useRxJava3|Whether to use the RxJava3 adapter with the retrofit2 library. IMPORTANT: This option has been deprecated.| |false|
|
||||
|useSealedOneOfInterfaces|Generate the oneOf interfaces as sealed interfaces. Only supported for WebClient and RestClient.| |false|
|
||||
|useSingleRequestParameter|Setting this property to "true" will generate functions with a single argument containing all API endpoint parameters instead of one argument per parameter. ONLY native, jersey2, jersey3, okhttp-gson, microprofile, Spring RestClient, Spring WebClient support this option. Setting this property to "static" does the same as "true", but also makes the generated arguments class static with single parameter instantiation.| |false|
|
||||
|webclientBlockingOperations|Making all WebClient operations blocking(sync). Note that if on operation 'x-webclient-blocking: false' then such operation won't be sync| |false|
|
||||
|withAWSV4Signature|whether to include AWS v4 signature support (only available for okhttp-gson library)| |false|
|
||||
|
||||
@@ -11,7 +11,7 @@ title: Documentation for the typescript-angular Generator
|
||||
| generator type | CLIENT | |
|
||||
| generator language | Typescript | |
|
||||
| generator default templating engine | mustache | |
|
||||
| helpTxt | Generates a TypeScript Angular (9.x - 20.x) client library. | |
|
||||
| helpTxt | Generates a TypeScript Angular (9.x - 19.x) client library. | |
|
||||
|
||||
## CONFIG OPTIONS
|
||||
These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details.
|
||||
@@ -34,7 +34,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name. Only change it if you provide your own run-time code for (de-)serialization of models| |original|
|
||||
|modelSuffix|The suffix of the generated model.| |null|
|
||||
|ngPackagrVersion|The version of ng-packagr compatible with Angular (see ngVersion option).| |null|
|
||||
|ngVersion|The version of Angular. (At least 9.0.0)| |20.0.0|
|
||||
|ngVersion|The version of Angular. (At least 9.0.0)| |19.0.0|
|
||||
|npmName|The name under which you want to publish generated npm package. Required to generate a full package| |null|
|
||||
|npmRepository|Use this property to set an url your private npmRepo in the package.json| |null|
|
||||
|npmVersion|The version of your npm package. If not provided, using the version from the OpenAPI specification file.| |1.0.0|
|
||||
|
||||
@@ -42,7 +42,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|
||||
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
|
||||
|supportsES6|Generate code that conforms to ES6.| |false|
|
||||
|useErasableSyntax|Use erasable syntax for the generated code. This is a temporary feature and will be removed in the future.| |false|
|
||||
|useInversify|Enable this to generate decorators and service identifiers for the InversifyJS inversion of control container. If you set 'deno' as 'platform', the generator will process this value as 'disable'.| |false|
|
||||
|useObjectParameters|Use aggregate parameter objects as function arguments for api operations instead of passing each parameter as a separate function argument.| |false|
|
||||
|useRxJS|Enable this to internally use rxjs observables. If disabled, a stub is used instead. This is required for the 'angular' framework.| |false|
|
||||
|
||||
@@ -162,7 +162,7 @@ public class Generate extends OpenApiGeneratorCommand {
|
||||
|
||||
@Option(
|
||||
name = {"--openapi-generator-ignore-list"},
|
||||
title = ".openapi-generator-ignore list",
|
||||
title = ".openapi-generaotr-ignore list",
|
||||
description = "specifies entries in the .openapi-generator-ignore file relative/path/to/file1,relative/path/to/file2. For example: README.md,pom.xml"
|
||||
+ " You can also have multiple occurrences of this option.")
|
||||
private List<String> openapiGeneratorIgnoreList = new ArrayList<>();
|
||||
|
||||
@@ -85,7 +85,6 @@ class OpenApiGeneratorPlugin : Plugin<Project> {
|
||||
|
||||
inputSpec.set(validate.inputSpec)
|
||||
recommend.set(validate.recommend)
|
||||
treatWarningsAsErrors.set(validate.treatWarningsAsErrors)
|
||||
}
|
||||
|
||||
register("openApiGenerate", GenerateTask::class.java).configure {
|
||||
|
||||
@@ -34,9 +34,4 @@ open class OpenApiGeneratorValidateExtension(project: Project) {
|
||||
* Whether to offer recommendations related to the validated specification document.
|
||||
*/
|
||||
val recommend = project.objects.property<Boolean>().convention(true)
|
||||
|
||||
/**
|
||||
* Whether to treat warnings as errors and fail the task.
|
||||
*/
|
||||
val treatWarningsAsErrors = project.objects.property<Boolean>().convention(false)
|
||||
}
|
||||
@@ -60,10 +60,6 @@ open class ValidateTask : DefaultTask() {
|
||||
@Input
|
||||
val recommend = project.objects.property<Boolean>().convention(true)
|
||||
|
||||
@Optional
|
||||
@Input
|
||||
val treatWarningsAsErrors = project.objects.property<Boolean>().convention(false)
|
||||
|
||||
@get:Internal
|
||||
@set:Option(option = "input", description = "The input specification.")
|
||||
var input: String? = null
|
||||
@@ -77,7 +73,6 @@ open class ValidateTask : DefaultTask() {
|
||||
|
||||
val spec = inputSpec.get()
|
||||
val recommendations = recommend.get()
|
||||
val failOnWarnings = treatWarningsAsErrors.get()
|
||||
|
||||
logger.quiet("Validating spec $spec")
|
||||
|
||||
@@ -122,16 +117,10 @@ open class ValidateTask : DefaultTask() {
|
||||
}
|
||||
|
||||
throw GradleException("Validation failed.")
|
||||
} else {
|
||||
out.withStyle(StyledTextOutput.Style.Success)
|
||||
logger.debug("No error validations from swagger-parser or internal validations.")
|
||||
out.println("Spec is valid.")
|
||||
}
|
||||
|
||||
if (failOnWarnings && validationResult.warnings.isNotEmpty()) {
|
||||
out.withStyle(StyledTextOutput.Style.Error)
|
||||
out.println("\nWarnings found in the spec and 'treatWarningsAsErrors' is enabled.\nFailing validation.\n")
|
||||
throw GradleException("Validation failed due to warnings (treatWarningsAsErrors = true).")
|
||||
}
|
||||
|
||||
out.withStyle(StyledTextOutput.Style.Success)
|
||||
logger.debug("No error validations from swagger-parser or internal validations.")
|
||||
out.println("Spec is valid.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ class GenerateTaskDslTest : TestBase() {
|
||||
@Test
|
||||
fun `openApiGenerate should create an expected file structure from URL config`() {
|
||||
val specUrl = "https://raw.githubusercontent.com/OpenAPITools/openapi-generator/b6b8c0db872fb4a418ae496e89c7e656e14be165/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0.yaml"
|
||||
val urlParams ="?meaningless=params&so=it&results=in&illegal=filenames&on=windows"
|
||||
// Arrange
|
||||
val buildContents = """
|
||||
plugins {
|
||||
@@ -42,7 +41,7 @@ class GenerateTaskDslTest : TestBase() {
|
||||
}
|
||||
openApiGenerate {
|
||||
generatorName = "kotlin"
|
||||
remoteInputSpec = "$specUrl$urlParams"
|
||||
remoteInputSpec = "$specUrl"
|
||||
outputDir = file("build/kotlin").absolutePath
|
||||
apiPackage = "org.openapitools.example.api"
|
||||
invokerPackage = "org.openapitools.example.invoker"
|
||||
|
||||
@@ -308,48 +308,6 @@ class ValidateTaskDslTest : TestBase() {
|
||||
)
|
||||
}
|
||||
|
||||
@Test(dataProvider = "gradle_version_provider")
|
||||
fun `openApiValidate should fail with treatWarningsAsErrors on valid spec with warnings`(gradleVersion: String?) {
|
||||
// Arrange
|
||||
val projectFiles = mapOf(
|
||||
"spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-recommend.yaml")
|
||||
)
|
||||
|
||||
withProject(
|
||||
"""
|
||||
| plugins {
|
||||
| id 'org.openapi.generator'
|
||||
| }
|
||||
|
|
||||
| openApiValidate {
|
||||
| inputSpec = file("spec.yaml").absolutePath
|
||||
| treatWarningsAsErrors = true
|
||||
| }
|
||||
""".trimMargin(), projectFiles
|
||||
)
|
||||
|
||||
// Act
|
||||
val result = getGradleRunner(gradleVersion)
|
||||
.withProjectDir(temp)
|
||||
.withArguments("openApiValidate")
|
||||
.withPluginClasspath()
|
||||
.buildAndFail()
|
||||
|
||||
// Assert
|
||||
assertTrue(
|
||||
result.output.contains("Spec has issues or recommendations."),
|
||||
"Unexpected/no message presented to the user for a valid spec."
|
||||
)
|
||||
assertTrue(
|
||||
result.output.contains("Failing validation."),
|
||||
"Expected validation to fail due to warnings, but no failure message was found."
|
||||
)
|
||||
assertEquals(
|
||||
FAILED, result.task(":openApiValidate")?.outcome,
|
||||
"Expected a failed run, but found ${result.task(":openApiValidate")?.outcome}"
|
||||
)
|
||||
}
|
||||
|
||||
@Test(dataProvider = "gradle_version_provider")
|
||||
fun `openApiValidate should succeed without recommendations on valid spec`(gradleVersion: String?) {
|
||||
// Arrange
|
||||
|
||||
@@ -1066,7 +1066,7 @@ public class CodeGenMojo extends AbstractMojo {
|
||||
String name = inputSpecFile.getName();
|
||||
|
||||
URL url = inputSpecRemoteUrl();
|
||||
if (url != null) {
|
||||
if (inputSpecFile.exists() && url != null) {
|
||||
String[] segments = url.getPath().split("/");
|
||||
name = Files.getNameWithoutExtension(segments[segments.length - 1]);
|
||||
}
|
||||
|
||||
@@ -68,10 +68,6 @@ public class CodeGenMojoTest extends BaseTestCase {
|
||||
testCommonConfiguration("jar");
|
||||
}
|
||||
|
||||
public void testCommonConfigurationWithRemoteInputSpec() throws Exception {
|
||||
testCommonConfiguration("remote");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void testCommonConfiguration(String profile) throws Exception {
|
||||
CodeGenMojo mojo = loadMojo(newTempFolder(), "src/test/resources/default", profile);
|
||||
|
||||
@@ -55,12 +55,6 @@
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>remote</id>
|
||||
<properties>
|
||||
<inputSpec>https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml?meaningless=params&so=it&results=in&illegal=filenames&on=windows</inputSpec>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
<build>
|
||||
<finalName>common-maven</finalName>
|
||||
|
||||
@@ -31,8 +31,7 @@ import java.util.*;
|
||||
public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam,
|
||||
isCookieParam, isBodyParam, isContainer,
|
||||
isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, isDeepObject, isMatrix, isAllowEmptyValue,
|
||||
isFormStyle, isSpaceDelimited, isPipeDelimited;
|
||||
isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, isDeepObject, isMatrix, isAllowEmptyValue;
|
||||
public String baseName, paramName, dataType, datatypeWithEnum, dataFormat, contentType,
|
||||
collectionFormat, description, unescapedDescription, baseType, defaultValue, enumDefaultValue, enumName, style;
|
||||
|
||||
@@ -269,9 +268,6 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
output.isExplode = this.isExplode;
|
||||
output.style = this.style;
|
||||
output.isDeepObject = this.isDeepObject;
|
||||
output.isFormStyle = this.isFormStyle;
|
||||
output.isSpaceDelimited = this.isSpaceDelimited;
|
||||
output.isPipeDelimited = this.isPipeDelimited;
|
||||
output.isMatrix = this.isMatrix;
|
||||
output.isAllowEmptyValue = this.isAllowEmptyValue;
|
||||
output.contentType = this.contentType;
|
||||
@@ -286,7 +282,6 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description,
|
||||
unescapedDescription, baseType, containerType, containerTypeMapped, defaultValue,
|
||||
enumDefaultValue, enumName, style, isDeepObject, isMatrix, isAllowEmptyValue, example, examples,
|
||||
isFormStyle, isSpaceDelimited, isPipeDelimited,
|
||||
jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal,
|
||||
isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword,
|
||||
isFreeFormObject, isAnyType, isArray, isMap, isOptional, isFile, isEnum, isEnumRef, _enum, allowableValues,
|
||||
@@ -380,9 +375,6 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
Objects.equals(enumName, that.enumName) &&
|
||||
Objects.equals(style, that.style) &&
|
||||
Objects.equals(isDeepObject, that.isDeepObject) &&
|
||||
Objects.equals(isFormStyle, that.isFormStyle) &&
|
||||
Objects.equals(isSpaceDelimited, that.isSpaceDelimited) &&
|
||||
Objects.equals(isPipeDelimited, that.isPipeDelimited) &&
|
||||
Objects.equals(isMatrix, that.isMatrix) &&
|
||||
Objects.equals(isAllowEmptyValue, that.isAllowEmptyValue) &&
|
||||
Objects.equals(example, that.example) &&
|
||||
@@ -448,9 +440,6 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
sb.append(", enumName='").append(enumName).append('\'');
|
||||
sb.append(", style='").append(style).append('\'');
|
||||
sb.append(", deepObject='").append(isDeepObject).append('\'');
|
||||
sb.append(", isFormStyle='").append(isFormStyle).append('\'');
|
||||
sb.append(", isSpaceDelimited='").append(isSpaceDelimited).append('\'');
|
||||
sb.append(", isPipeDelimited='").append(isPipeDelimited).append('\'');
|
||||
sb.append(", isMatrix='").append(isMatrix).append('\'');
|
||||
sb.append(", allowEmptyValue='").append(isAllowEmptyValue).append('\'');
|
||||
sb.append(", example='").append(example).append('\'');
|
||||
|
||||
@@ -2135,9 +2135,6 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
|
||||
codegenParameter.style = style.toString();
|
||||
codegenParameter.isFormStyle = Encoding.StyleEnum.FORM == style;
|
||||
codegenParameter.isSpaceDelimited = Encoding.StyleEnum.SPACE_DELIMITED == style;
|
||||
codegenParameter.isPipeDelimited = Encoding.StyleEnum.PIPE_DELIMITED == style;
|
||||
codegenParameter.isDeepObject = Encoding.StyleEnum.DEEP_OBJECT == style;
|
||||
|
||||
if (codegenParameter.isContainer) {
|
||||
@@ -3685,8 +3682,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
if (ModelUtils.isComposedSchema(schema) && !this.getLegacyDiscriminatorBehavior()) {
|
||||
List<MappedModel> otherDescendants = getOneOfAnyOfDescendants(schemaName, discriminatorPropertyName, schema);
|
||||
for (MappedModel otherDescendant : otherDescendants) {
|
||||
// add only if the model names are not the same
|
||||
if (uniqueDescendants.stream().map(MappedModel::getModelName).noneMatch(it -> it.equals(otherDescendant.getModelName()))) {
|
||||
if (!uniqueDescendants.contains(otherDescendant)) {
|
||||
uniqueDescendants.add(otherDescendant);
|
||||
}
|
||||
}
|
||||
@@ -5401,9 +5397,6 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
if (parameter.getStyle() != null) {
|
||||
codegenParameter.style = parameter.getStyle().toString();
|
||||
codegenParameter.isDeepObject = Parameter.StyleEnum.DEEPOBJECT == parameter.getStyle();
|
||||
codegenParameter.isFormStyle = Parameter.StyleEnum.FORM == parameter.getStyle();
|
||||
codegenParameter.isSpaceDelimited = Parameter.StyleEnum.SPACEDELIMITED == parameter.getStyle();
|
||||
codegenParameter.isPipeDelimited = Parameter.StyleEnum.PIPEDELIMITED == parameter.getStyle();
|
||||
codegenParameter.isMatrix = Parameter.StyleEnum.MATRIX == parameter.getStyle();
|
||||
}
|
||||
|
||||
|
||||
@@ -626,22 +626,6 @@ public class DefaultGenerator implements Generator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* this method splits the specified property by commas, trims any results for spaces and
|
||||
* newlines, and returns them as a Set of Strings. the method will return an empty
|
||||
* set if the specified property has not been set or is an empty string.
|
||||
*/
|
||||
private Set<String> getPropertyAsSet(String propertyName) {
|
||||
String propertyRaw = GlobalSettings.getProperty(propertyName);
|
||||
if (propertyRaw == null || propertyRaw.isEmpty()) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
return Arrays.stream(propertyRaw.split(","))
|
||||
.map(String::trim)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
private Set<String> modelKeys() {
|
||||
final Map<String, Schema> schemas = ModelUtils.getSchemas(this.openAPI);
|
||||
if (schemas == null) {
|
||||
@@ -649,7 +633,12 @@ public class DefaultGenerator implements Generator {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
Set<String> modelsToGenerate = getPropertyAsSet(CodegenConstants.MODELS);
|
||||
String modelNames = GlobalSettings.getProperty("models");
|
||||
Set<String> modelsToGenerate = null;
|
||||
if (modelNames != null && !modelNames.isEmpty()) {
|
||||
modelsToGenerate = new HashSet<>(Arrays.asList(modelNames.split(",")));
|
||||
}
|
||||
|
||||
Set<String> modelKeys = schemas.keySet();
|
||||
if (modelsToGenerate != null && !modelsToGenerate.isEmpty()) {
|
||||
Set<String> updatedKeys = new HashSet<>();
|
||||
@@ -672,7 +661,11 @@ public class DefaultGenerator implements Generator {
|
||||
return;
|
||||
}
|
||||
Map<String, List<CodegenOperation>> paths = processPaths(this.openAPI.getPaths());
|
||||
Set<String> apisToGenerate = getPropertyAsSet(CodegenConstants.APIS);
|
||||
Set<String> apisToGenerate = null;
|
||||
String apiNames = GlobalSettings.getProperty(CodegenConstants.APIS);
|
||||
if (apiNames != null && !apiNames.isEmpty()) {
|
||||
apisToGenerate = new HashSet<>(Arrays.asList(apiNames.split(",")));
|
||||
}
|
||||
if (apisToGenerate != null && !apisToGenerate.isEmpty()) {
|
||||
Map<String, List<CodegenOperation>> updatedPaths = new TreeMap<>();
|
||||
for (String m : paths.keySet()) {
|
||||
@@ -834,7 +827,11 @@ public class DefaultGenerator implements Generator {
|
||||
return;
|
||||
}
|
||||
Map<String, List<CodegenOperation>> webhooks = processWebhooks(this.openAPI.getWebhooks());
|
||||
Set<String> webhooksToGenerate = getPropertyAsSet(CodegenConstants.WEBHOOKS);
|
||||
Set<String> webhooksToGenerate = null;
|
||||
String webhookNames = GlobalSettings.getProperty(CodegenConstants.WEBHOOKS);
|
||||
if (webhookNames != null && !webhookNames.isEmpty()) {
|
||||
webhooksToGenerate = new HashSet<>(Arrays.asList(webhookNames.split(",")));
|
||||
}
|
||||
if (webhooksToGenerate != null && !webhooksToGenerate.isEmpty()) {
|
||||
Map<String, List<CodegenOperation>> Webhooks = new TreeMap<>();
|
||||
for (String m : webhooks.keySet()) {
|
||||
@@ -1067,7 +1064,12 @@ public class DefaultGenerator implements Generator {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<String> supportingFilesToGenerate = getPropertyAsSet(CodegenConstants.SUPPORTING_FILES);
|
||||
Set<String> supportingFilesToGenerate = null;
|
||||
String supportingFiles = GlobalSettings.getProperty(CodegenConstants.SUPPORTING_FILES);
|
||||
if (supportingFiles != null && !supportingFiles.isEmpty()) {
|
||||
supportingFilesToGenerate = new HashSet<>(Arrays.asList(supportingFiles.split(",")));
|
||||
}
|
||||
|
||||
for (SupportingFile support : config.supportingFiles()) {
|
||||
try {
|
||||
String outputFolder = config.outputFolder();
|
||||
|
||||
@@ -683,7 +683,6 @@ public class CodegenConfigurator {
|
||||
final List<AuthorizationValue> authorizationValues = AuthParser.parse(this.auth);
|
||||
ParseOptions options = new ParseOptions();
|
||||
options.setResolve(true);
|
||||
options.setResolveResponses(true);
|
||||
SwaggerParseResult result = new OpenAPIParser().readLocation(inputSpec, authorizationValues, options);
|
||||
|
||||
// TODO: Move custom validations to a separate type as part of a "Workflow"
|
||||
|
||||
@@ -751,37 +751,6 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
||||
protected void patchPropertyIsInherited(CodegenModel model, CodegenProperty property) {
|
||||
}
|
||||
|
||||
private void patchNestedMaps(CodegenProperty property) {
|
||||
// Process nested types before making any replacements to ensure we have the correct inner type
|
||||
if (property.items != null) {
|
||||
patchNestedMaps(property.items);
|
||||
}
|
||||
|
||||
String[] nestedTypes = {"List", "Collection", "ICollection", "Dictionary"};
|
||||
|
||||
if (property.datatypeWithEnum != null) {
|
||||
String originalType = property.datatypeWithEnum;
|
||||
|
||||
for (String nestedType : nestedTypes) {
|
||||
// fix incorrect data types for maps of maps
|
||||
if (property.items != null) {
|
||||
if (property.datatypeWithEnum.contains(", " + nestedType + ">")) {
|
||||
property.datatypeWithEnum = property.datatypeWithEnum.replace(", " + nestedType + ">", ", " + property.items.datatypeWithEnum + ">");
|
||||
}
|
||||
|
||||
if (property.datatypeWithEnum.contains("<" + nestedType + ">")) {
|
||||
property.datatypeWithEnum = property.datatypeWithEnum.replace("<" + nestedType + ">", "<" + property.items.datatypeWithEnum + ">");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Only update dataType if we actually made changes
|
||||
if (!originalType.equals(property.datatypeWithEnum)) {
|
||||
property.dataType = property.datatypeWithEnum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void patchProperty(Map<String, CodegenModel> enumRefs, CodegenModel model, CodegenProperty property) {
|
||||
if (enumRefs.containsKey(property.dataType)) {
|
||||
// Handle any enum properties referred to by $ref.
|
||||
@@ -801,7 +770,20 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
||||
|
||||
property.name = patchPropertyName(model, property.name, null);
|
||||
|
||||
patchNestedMaps(property);
|
||||
String[] nestedTypes = {"List", "Collection", "ICollection", "Dictionary"};
|
||||
|
||||
Arrays.stream(nestedTypes).forEach(nestedType -> {
|
||||
// fix incorrect data types for maps of maps
|
||||
if (property.datatypeWithEnum.contains(", " + nestedType + ">") && property.items != null) {
|
||||
property.datatypeWithEnum = property.datatypeWithEnum.replace(", " + nestedType + ">", ", " + property.items.datatypeWithEnum + ">");
|
||||
property.dataType = property.datatypeWithEnum;
|
||||
}
|
||||
|
||||
if (property.datatypeWithEnum.contains("<" + nestedType + ">") && property.items != null) {
|
||||
property.datatypeWithEnum = property.datatypeWithEnum.replace("<" + nestedType + ">", "<" + property.items.datatypeWithEnum + ">");
|
||||
property.dataType = property.datatypeWithEnum;
|
||||
}
|
||||
});
|
||||
|
||||
// HOTFIX: https://github.com/OpenAPITools/openapi-generator/issues/14944
|
||||
if (property.datatypeWithEnum.equals("decimal")) {
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.samskivert.mustache.Mustache;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
@@ -51,7 +50,6 @@ import org.openapitools.codegen.model.ModelMap;
|
||||
import org.openapitools.codegen.model.ModelsMap;
|
||||
import org.openapitools.codegen.model.OperationMap;
|
||||
import org.openapitools.codegen.model.OperationsMap;
|
||||
import org.openapitools.codegen.templating.mustache.ReplaceAllLambda;
|
||||
import org.openapitools.codegen.utils.CamelizeOption;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@@ -1,502 +0,0 @@
|
||||
/*
|
||||
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* https://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 org.openapitools.codegen.languages;
|
||||
|
||||
import io.swagger.v3.oas.models.Operation;
|
||||
import io.swagger.v3.oas.models.media.ArraySchema;
|
||||
import io.swagger.v3.oas.models.media.Schema;
|
||||
import io.swagger.v3.oas.models.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.models.servers.Server;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.openapitools.codegen.*;
|
||||
import org.openapitools.codegen.meta.features.*;
|
||||
import org.openapitools.codegen.model.ModelMap;
|
||||
import org.openapitools.codegen.model.OperationMap;
|
||||
import org.openapitools.codegen.model.OperationsMap;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static org.openapitools.codegen.utils.StringUtils.underscore;
|
||||
|
||||
public class CppOatppServerCodegen extends AbstractCppCodegen {
|
||||
private final Logger LOGGER = LoggerFactory.getLogger(CppOatppServerCodegen.class);
|
||||
|
||||
protected String implFolder = "impl";
|
||||
protected boolean isAddExternalLibs = true;
|
||||
public static final String OPTIONAL_EXTERNAL_LIB = "addExternalLibs";
|
||||
public static final String OPTIONAL_EXTERNAL_LIB_DESC = "Add the Possibility to fetch and compile external Libraries needed by this Framework.";
|
||||
protected final String PREFIX = "";
|
||||
|
||||
@Override
|
||||
public CodegenType getTag() {
|
||||
return CodegenType.SERVER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "cpp-oatpp-server";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelp() {
|
||||
return "Generates a C++ API server (based on Oat++)";
|
||||
}
|
||||
|
||||
public CppOatppServerCodegen() {
|
||||
super();
|
||||
|
||||
// TODO: cpp-oatpp-server maintainer review
|
||||
modifyFeatureSet(features -> features
|
||||
.includeDocumentationFeatures(DocumentationFeature.Readme)
|
||||
.securityFeatures(EnumSet.noneOf(SecurityFeature.class))
|
||||
.excludeGlobalFeatures(
|
||||
GlobalFeature.XMLStructureDefinitions,
|
||||
GlobalFeature.Callbacks,
|
||||
GlobalFeature.LinkObjects,
|
||||
GlobalFeature.ParameterStyling,
|
||||
GlobalFeature.MultiServer)
|
||||
.excludeSchemaSupportFeatures(
|
||||
SchemaSupportFeature.Polymorphism)
|
||||
.excludeParameterFeatures(
|
||||
ParameterFeature.Cookie));
|
||||
|
||||
if (StringUtils.isEmpty(modelNamePrefix)) {
|
||||
modelNamePrefix = PREFIX;
|
||||
}
|
||||
|
||||
apiPackage = "org.openapitools.server.api";
|
||||
modelPackage = "org.openapitools.server.model";
|
||||
|
||||
apiTemplateFiles.put("api-header.mustache", ".hpp");
|
||||
apiTemplateFiles.put("api-impl-header.mustache", ".hpp");
|
||||
apiTemplateFiles.put("api-impl-source.mustache", ".cpp");
|
||||
|
||||
modelTemplateFiles.put("model-header.mustache", ".hpp");
|
||||
|
||||
embeddedTemplateDir = templateDir = "cpp-oatpp-server";
|
||||
|
||||
cliOptions.clear();
|
||||
addSwitch(OPTIONAL_EXTERNAL_LIB, OPTIONAL_EXTERNAL_LIB_DESC, this.isAddExternalLibs);
|
||||
addOption(RESERVED_WORD_PREFIX_OPTION, RESERVED_WORD_PREFIX_DESC, this.reservedWordPrefix);
|
||||
addOption(VARIABLE_NAME_FIRST_CHARACTER_UPPERCASE_OPTION,
|
||||
VARIABLE_NAME_FIRST_CHARACTER_UPPERCASE_DESC,
|
||||
Boolean.toString(this.variableNameFirstCharacterUppercase));
|
||||
|
||||
setupSupportingFiles();
|
||||
|
||||
languageSpecificPrimitives = new HashSet<>(
|
||||
Arrays.asList(
|
||||
"oatpp::String",
|
||||
"oatpp::Boolean",
|
||||
"oatpp::Int32",
|
||||
"oatpp::Int64",
|
||||
"oatpp::Vector",
|
||||
"oatpp::Fields",
|
||||
"oatpp::UnorderedSet",
|
||||
"oatpp::Object",
|
||||
"oatpp::Float64",
|
||||
"oatpp::Any"
|
||||
));
|
||||
|
||||
typeMapping = new HashMap<>();
|
||||
typeMapping.put("date", "oatpp::String");
|
||||
typeMapping.put("DateTime", "oatpp::String");
|
||||
typeMapping.put("string", "oatpp::String");
|
||||
typeMapping.put("integer", "oatpp::Int32");
|
||||
typeMapping.put("long", "oatpp::Int64");
|
||||
typeMapping.put("boolean", "oatpp::Boolean");
|
||||
typeMapping.put("array", "oatpp::Vector");
|
||||
typeMapping.put("map", "oatpp::Fields");
|
||||
typeMapping.put("set", "oatpp::UnorderedSet");
|
||||
typeMapping.put("file", "oatpp::String");
|
||||
typeMapping.put("object", "oatpp::Object");
|
||||
typeMapping.put("binary", "oatpp::String");
|
||||
typeMapping.put("number", "oatpp::Float64");
|
||||
typeMapping.put("UUID", "oatpp::String");
|
||||
typeMapping.put("URI", "oatpp::String");
|
||||
typeMapping.put("ByteArray", "oatpp::String");
|
||||
typeMapping.put("AnyType", "oatpp::Any");
|
||||
|
||||
super.importMapping = new HashMap<>();
|
||||
}
|
||||
|
||||
private void setupSupportingFiles() {
|
||||
supportingFiles.clear();
|
||||
supportingFiles
|
||||
.add(new SupportingFile("main-api-server.mustache", "", modelNamePrefix + "main-api-server.cpp"));
|
||||
supportingFiles.add(new SupportingFile("cmake.mustache", "", "CMakeLists.txt"));
|
||||
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processOpts() {
|
||||
super.processOpts();
|
||||
if (additionalProperties.containsKey("modelNamePrefix")) {
|
||||
additionalProperties().put("prefix", modelNamePrefix);
|
||||
setupSupportingFiles();
|
||||
}
|
||||
if (additionalProperties.containsKey(RESERVED_WORD_PREFIX_OPTION)) {
|
||||
reservedWordPrefix = (String) additionalProperties.get(RESERVED_WORD_PREFIX_OPTION);
|
||||
}
|
||||
|
||||
additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\."));
|
||||
additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::"));
|
||||
additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\."));
|
||||
additionalProperties.put("apiNamespace", apiPackage.replaceAll("\\.", "::"));
|
||||
additionalProperties.put(RESERVED_WORD_PREFIX_OPTION, reservedWordPrefix);
|
||||
|
||||
if (additionalProperties.containsKey(OPTIONAL_EXTERNAL_LIB)) {
|
||||
setAddExternalLibs(convertPropertyToBooleanAndWriteBack(OPTIONAL_EXTERNAL_LIB));
|
||||
} else {
|
||||
additionalProperties.put(OPTIONAL_EXTERNAL_LIB, isAddExternalLibs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toModelImport(String name) {
|
||||
if (importMapping.containsKey(name)) {
|
||||
return importMapping.get(name);
|
||||
} else {
|
||||
return "#include \"" + name + ".hpp\"";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodegenModel fromModel(String name, Schema model) {
|
||||
CodegenModel codegenModel = super.fromModel(name, model);
|
||||
|
||||
Set<String> oldImports = codegenModel.imports;
|
||||
codegenModel.imports = new HashSet<>();
|
||||
for (String imp : oldImports) {
|
||||
String newImp = toModelImport(imp);
|
||||
if (!newImp.isEmpty()) {
|
||||
codegenModel.imports.add(newImp);
|
||||
}
|
||||
}
|
||||
|
||||
if (!codegenModel.isEnum
|
||||
&& codegenModel.anyOf.size() > 1
|
||||
&& codegenModel.anyOf.contains("std::string")
|
||||
&& !codegenModel.anyOf.contains("AnyType")
|
||||
&& codegenModel.interfaces.size() == 1) {
|
||||
codegenModel.vendorExtensions.put("x-is-string-enum-container", true);
|
||||
}
|
||||
return codegenModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
|
||||
CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers);
|
||||
|
||||
if (operation.getResponses() != null && !operation.getResponses().isEmpty()) {
|
||||
ApiResponse apiResponse = findMethodResponse(operation.getResponses());
|
||||
|
||||
if (apiResponse != null) {
|
||||
Schema response = ModelUtils.getSchemaFromResponse(openAPI, apiResponse);
|
||||
if (response != null) {
|
||||
CodegenProperty cm = fromProperty("response", response, false);
|
||||
op.vendorExtensions.put("x-codegen-response", cm);
|
||||
if ("HttpContent".equals(cm.dataType)) {
|
||||
op.vendorExtensions.put("x-codegen-response-ishttpcontent", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String pathForOatpp = path.replaceAll("\\{(.*?)}", "{$1}");
|
||||
op.vendorExtensions.put("x-codegen-oatpp-path", pathForOatpp);
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
|
||||
OperationMap operations = objs.getOperations();
|
||||
String classname = operations.getClassname();
|
||||
operations.put("classnameSnakeUpperCase", underscore(classname).toUpperCase(Locale.ROOT));
|
||||
operations.put("classnameSnakeLowerCase", underscore(classname).toLowerCase(Locale.ROOT));
|
||||
List<CodegenOperation> operationList = operations.getOperation();
|
||||
for (CodegenOperation op : operationList) {
|
||||
postProcessSingleOperation(operations, op);
|
||||
}
|
||||
|
||||
return objs;
|
||||
}
|
||||
|
||||
private void postProcessSingleOperation(OperationMap operations, CodegenOperation op) {
|
||||
if (op.vendorExtensions == null) {
|
||||
op.vendorExtensions = new HashMap<>();
|
||||
}
|
||||
|
||||
if (op.bodyParam != null) {
|
||||
if (op.bodyParam.vendorExtensions == null) {
|
||||
op.bodyParam.vendorExtensions = new HashMap<>();
|
||||
}
|
||||
|
||||
boolean isStringOrDate = op.bodyParam.isString || op.bodyParam.isDate;
|
||||
op.bodyParam.vendorExtensions.put("x-codegen-oatpp-is-string-or-date", isStringOrDate);
|
||||
}
|
||||
|
||||
boolean consumeJson = false;
|
||||
if (op.consumes != null) {
|
||||
Predicate<Map<String, String>> isMediaTypeJson = consume -> (consume.get("mediaType") != null
|
||||
&& consume.get("mediaType").equals("application/json"));
|
||||
consumeJson = op.consumes.stream().anyMatch(isMediaTypeJson);
|
||||
}
|
||||
op.vendorExtensions.put("x-codegen-oatpp-consumes-json", consumeJson);
|
||||
|
||||
// Check if any one of the operations needs a model, then at API file level, at
|
||||
// least one model has to be included.
|
||||
Predicate<String> importNotInImportMapping = hdr -> !importMapping.containsKey(hdr);
|
||||
if (op.imports.stream().anyMatch(importNotInImportMapping)) {
|
||||
operations.put("hasModelImport", true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* postProcessSingleParam - Modifies a single parameter, adjusting generated
|
||||
* data types for Header and Query parameters.
|
||||
*
|
||||
* @param param CodegenParameter to be modified.
|
||||
*/
|
||||
private static void postProcessSingleParam(CodegenParameter param) {
|
||||
if (param.isQueryParam) {
|
||||
param.dataType = "std::optional<" + param.dataType + ">";
|
||||
if (!param.isPrimitiveType) {
|
||||
param.baseType = "std::optional<" + param.baseType + ">";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toModelFilename(String name) {
|
||||
return toModelName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String apiFilename(String templateName, String tag) {
|
||||
String result = super.apiFilename(templateName, tag);
|
||||
|
||||
if (templateName.endsWith("impl-header.mustache")) {
|
||||
result = implFilenameFromApiFilename(result, ".hpp");
|
||||
} else if (templateName.endsWith("impl-source.mustache")) {
|
||||
result = implFilenameFromApiFilename(result, ".cpp");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* implFilenameFromApiFilename - Inserts the string "Controller" in front of the
|
||||
* suffix and replace "api" with "impl" directory prefix.
|
||||
*
|
||||
* @param filename Filename of the api-file to be modified
|
||||
* @param suffix Suffix of the file (usually ".cpp" or ".hpp")
|
||||
* @return a filename string of impl file.
|
||||
*/
|
||||
private String implFilenameFromApiFilename(String filename, String suffix) {
|
||||
String result = filename.substring(0, filename.length() - suffix.length()) + "Controller" + suffix;
|
||||
result = result.replace(apiFileFolder(), implFileFolder());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toApiFilename(String name) {
|
||||
return toApiName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional - type declaration. This is a String which is used by the
|
||||
* templates to instantiate your types. There is typically special handling
|
||||
* for different property types
|
||||
*
|
||||
* @return a string value used as the `dataType` field for model templates,
|
||||
* `returnType` for api templates
|
||||
*/
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
if (languageSpecificPrimitives.contains(getSchemaType(inner))) {
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
}
|
||||
return getSchemaType(p) + "<oatpp::Object<" + getTypeDeclaration(inner) + ">>";
|
||||
}
|
||||
if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isByteArraySchema(p)) {
|
||||
return "std::string";
|
||||
}
|
||||
if (ModelUtils.isStringSchema(p)
|
||||
|| ModelUtils.isDateSchema(p)
|
||||
|| ModelUtils.isDateTimeSchema(p) || ModelUtils.isFileSchema(p)
|
||||
|| languageSpecificPrimitives.contains(openAPIType)) {
|
||||
return toModelName(openAPIType);
|
||||
}
|
||||
|
||||
String namespace = (String) additionalProperties.get("modelNamespace");
|
||||
return namespace + "::" + openAPIType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toDefaultValue(Schema p) {
|
||||
if (ModelUtils.isStringSchema(p)) {
|
||||
if (p.getDefault() != null) {
|
||||
return "\"" + p.getDefault().toString() + "\"";
|
||||
} else {
|
||||
return "\"\"";
|
||||
}
|
||||
} else if (ModelUtils.isBooleanSchema(p)) {
|
||||
if (p.getDefault() != null) {
|
||||
return p.getDefault().toString();
|
||||
} else {
|
||||
return "false";
|
||||
}
|
||||
} else if (ModelUtils.isDateSchema(p)) {
|
||||
if (p.getDefault() != null) {
|
||||
return "\"" + p.getDefault().toString() + "\"";
|
||||
} else {
|
||||
return "\"\"";
|
||||
}
|
||||
} else if (ModelUtils.isDateTimeSchema(p)) {
|
||||
if (p.getDefault() != null) {
|
||||
return "\"" + p.getDefault().toString() + "\"";
|
||||
} else {
|
||||
return "\"\"";
|
||||
}
|
||||
} else if (ModelUtils.isNumberSchema(p)) {
|
||||
if (ModelUtils.isFloatSchema(p)) { // float
|
||||
if (p.getDefault() != null) {
|
||||
// We have to ensure that our default value has a decimal point,
|
||||
// because in C++ the 'f' suffix is not valid on integer literals
|
||||
// i.e. 374.0f is a valid float but 374 isn't.
|
||||
String defaultStr = p.getDefault().toString();
|
||||
if (defaultStr.indexOf('.') < 0) {
|
||||
return defaultStr + ".0f";
|
||||
} else {
|
||||
return defaultStr + "f";
|
||||
}
|
||||
} else {
|
||||
return "0.0f";
|
||||
}
|
||||
} else { // double
|
||||
if (p.getDefault() != null) {
|
||||
return p.getDefault().toString();
|
||||
} else {
|
||||
return "0.0";
|
||||
}
|
||||
}
|
||||
} else if (ModelUtils.isIntegerSchema(p)) {
|
||||
if (ModelUtils.isLongSchema(p)) { // long
|
||||
if (p.getDefault() != null) {
|
||||
return p.getDefault().toString() + "L";
|
||||
} else {
|
||||
return "0L";
|
||||
}
|
||||
} else { // integer
|
||||
if (p.getDefault() != null) {
|
||||
return p.getDefault().toString();
|
||||
} else {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
} else if (ModelUtils.isByteArraySchema(p)) {
|
||||
if (p.getDefault() != null) {
|
||||
return "\"" + p.getDefault().toString() + "\"";
|
||||
} else {
|
||||
return "\"\"";
|
||||
}
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "std::map<std::string, " + inner + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
if (!languageSpecificPrimitives.contains(inner)) {
|
||||
inner = "std::shared_ptr<" + inner + ">";
|
||||
}
|
||||
return "std::vector<" + inner + ">()";
|
||||
} else if (!StringUtils.isEmpty(p.get$ref())) {
|
||||
return "std::make_shared<" + toModelName(ModelUtils.getSimpleRef(p.get$ref())) + ">()";
|
||||
}
|
||||
|
||||
return "nullptr";
|
||||
}
|
||||
|
||||
/**
|
||||
* Location to write model files. You can use the modelPackage() as defined
|
||||
* when the class is instantiated
|
||||
*/
|
||||
@Override
|
||||
public String modelFileFolder() {
|
||||
return (outputFolder + "/model").replace("/", File.separator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Location to write api files. You can use the apiPackage() as defined when
|
||||
* the class is instantiated
|
||||
*/
|
||||
@Override
|
||||
public String apiFileFolder() {
|
||||
return (outputFolder + "/api").replace("/", File.separator);
|
||||
}
|
||||
|
||||
private String implFileFolder() {
|
||||
return (outputFolder + "/" + implFolder).replace("/", File.separator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional - OpenAPI type conversion. This is used to map OpenAPI types in
|
||||
* a `Schema` into either language specific types via `typeMapping` or
|
||||
* into complex models if there is not a mapping.
|
||||
*
|
||||
* @return a string value of the type or complex model for this property
|
||||
*/
|
||||
@Override
|
||||
public String getSchemaType(Schema p) {
|
||||
String openAPIType = super.getSchemaType(p);
|
||||
String type = null;
|
||||
if (typeMapping.containsKey(openAPIType)) {
|
||||
type = typeMapping.get(openAPIType);
|
||||
} else {
|
||||
type = openAPIType;
|
||||
}
|
||||
return toModelName(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTypeDeclaration(String str) {
|
||||
return toModelName(str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify whether external libraries will be added during the generation
|
||||
*
|
||||
* @param value the value to be set
|
||||
*/
|
||||
public void setAddExternalLibs(boolean value) {
|
||||
isAddExternalLibs = value;
|
||||
}
|
||||
}
|
||||
@@ -70,8 +70,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
public static final String CASE_INSENSITIVE_RESPONSE_HEADERS = "caseInsensitiveResponseHeaders";
|
||||
public static final String MICROPROFILE_FRAMEWORK = "microprofileFramework";
|
||||
public static final String MICROPROFILE_MUTINY = "microprofileMutiny";
|
||||
public static final String MICROPROFILE_GLOBAL_EXCEPTION_MAPPER = "microprofileGlobalExceptionMapper";
|
||||
public static final String MICROPROFILE_REGISTER_EXCEPTION_MAPPER = "microprofileRegisterExceptionMapper";
|
||||
public static final String USE_ABSTRACTION_FOR_FILES = "useAbstractionForFiles";
|
||||
public static final String DYNAMIC_OPERATIONS = "dynamicOperations";
|
||||
public static final String SUPPORT_STREAMING = "supportStreaming";
|
||||
@@ -104,12 +102,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
public static final String USE_ENUM_CASE_INSENSITIVE = "useEnumCaseInsensitive";
|
||||
public static final String FAIL_ON_UNKNOWN_PROPERTIES = "failOnUnknownProperties";
|
||||
public static final String SUPPORT_VERTX_FUTURE = "supportVertxFuture";
|
||||
public static final String USE_SEALED_ONE_OF_INTERFACES = "useSealedOneOfInterfaces";
|
||||
|
||||
// Internal configurations
|
||||
public static final String SINGLE_REQUEST_PARAMETER = "singleRequestParameter";
|
||||
public static final String STATIC_REQUEST = "staticRequest";
|
||||
public static final String JAVA_17 = "java17";
|
||||
|
||||
public static final String SERIALIZATION_LIBRARY_GSON = "gson";
|
||||
public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson";
|
||||
@@ -128,8 +120,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
@Setter protected String microprofileFramework = MICROPROFILE_DEFAULT;
|
||||
@Setter protected String microprofileRestClientVersion = MICROPROFILE_REST_CLIENT_DEFAULT_VERSION;
|
||||
@Setter protected boolean microprofileMutiny = false;
|
||||
@Setter protected boolean microProfileGlobalExceptionMapper = true;
|
||||
@Setter protected boolean microProfileRegisterExceptionMapper = true;
|
||||
@Setter protected String configKey = null;
|
||||
@Setter(AccessLevel.PRIVATE) protected boolean configKeyFromClassName = false;
|
||||
|
||||
@@ -148,7 +138,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
@Setter protected String errorObjectType;
|
||||
@Getter @Setter protected boolean failOnUnknownProperties = false;
|
||||
@Setter protected boolean supportVertxFuture = false;
|
||||
@Setter protected boolean useSealedOneOfInterfaces = false;
|
||||
protected String authFolder;
|
||||
/**
|
||||
* Serialization library.
|
||||
@@ -240,8 +229,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
cliOptions.add(CliOption.newBoolean(CASE_INSENSITIVE_RESPONSE_HEADERS, "Make API response's headers case-insensitive. Available on " + OKHTTP_GSON + ", " + JERSEY2 + " libraries"));
|
||||
cliOptions.add(CliOption.newString(MICROPROFILE_FRAMEWORK, "Framework for microprofile. Possible values \"kumuluzee\""));
|
||||
cliOptions.add(CliOption.newString(MICROPROFILE_MUTINY, "Whether to use async types for microprofile (currently only Smallrye Mutiny is supported)."));
|
||||
cliOptions.add(CliOption.newString(MICROPROFILE_REGISTER_EXCEPTION_MAPPER, "Should generated API Clients be annotated with @RegisterProvider(ApiExceptionMapper.class).").defaultValue("true"));
|
||||
cliOptions.add(CliOption.newString(MICROPROFILE_GLOBAL_EXCEPTION_MAPPER, "Should ApiExceptionMapper be annotated with @Provider making it a global exception mapper").defaultValue("true"));
|
||||
cliOptions.add(CliOption.newBoolean(USE_ABSTRACTION_FOR_FILES, "Use alternative types instead of java.io.File to allow passing bytes without a file on disk. Available on resttemplate, webclient, restclient, libraries"));
|
||||
cliOptions.add(CliOption.newBoolean(DYNAMIC_OPERATIONS, "Generate operations dynamically at runtime from an OAS", this.dynamicOperations));
|
||||
cliOptions.add(CliOption.newBoolean(SUPPORT_STREAMING, "Support streaming endpoint (beta)", this.supportStreaming));
|
||||
@@ -259,7 +246,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
cliOptions.add(CliOption.newBoolean(USE_ENUM_CASE_INSENSITIVE, "Use `equalsIgnoreCase` when String for enum comparison", useEnumCaseInsensitive));
|
||||
cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", this.failOnUnknownProperties));
|
||||
cliOptions.add(CliOption.newBoolean(SUPPORT_VERTX_FUTURE, "Also generate api methods that return a vertx Future instead of taking a callback. Only `vertx` supports this option. Requires vertx 4 or greater.", this.supportVertxFuture));
|
||||
cliOptions.add(CliOption.newBoolean(USE_SEALED_ONE_OF_INTERFACES, "Generate the oneOf interfaces as sealed interfaces. Only supported for WebClient and RestClient.", this.useSealedOneOfInterfaces));
|
||||
|
||||
supportedLibraries.put(JERSEY2, "HTTP client: Jersey client 2.25.1. JSON processing: Jackson 2.17.1");
|
||||
supportedLibraries.put(JERSEY3, "HTTP client: Jersey client 3.1.1. JSON processing: Jackson 2.17.1");
|
||||
@@ -375,13 +361,8 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
convertPropertyToBooleanAndWriteBack(USE_RX_JAVA2, this::setUseRxJava2);
|
||||
}
|
||||
convertPropertyToStringAndWriteBack(CodegenConstants.USE_SINGLE_REQUEST_PARAMETER, this::setUseSingleRequestParameter);
|
||||
convertPropertyToBooleanAndWriteBack(USE_SEALED_ONE_OF_INTERFACES, this::setUseSealedOneOfInterfaces);
|
||||
writePropertyBack(SINGLE_REQUEST_PARAMETER, getSingleRequestParameter());
|
||||
writePropertyBack(STATIC_REQUEST, getStaticRequest());
|
||||
|
||||
if (libWebClient && (useSealedOneOfInterfaces || useJakartaEe)) {
|
||||
writePropertyBack(JAVA_17, true);
|
||||
}
|
||||
writePropertyBack("singleRequestParameter", getSingleRequestParameter());
|
||||
writePropertyBack("staticRequest", getStaticRequest());
|
||||
|
||||
if (!useRxJava && !useRxJava2 && !useRxJava3) {
|
||||
additionalProperties.put(DO_NOT_USE_RX, true);
|
||||
@@ -399,12 +380,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
||||
}
|
||||
convertPropertyToStringAndWriteBack(MICROPROFILE_FRAMEWORK, this::setMicroprofileFramework);
|
||||
|
||||
convertPropertyToBooleanAndWriteBack(MICROPROFILE_GLOBAL_EXCEPTION_MAPPER, this::setMicroProfileGlobalExceptionMapper);
|
||||
convertPropertyToBooleanAndWriteBack(MICROPROFILE_REGISTER_EXCEPTION_MAPPER, this::setMicroProfileRegisterExceptionMapper);
|
||||
|
||||
additionalProperties.put(MICROPROFILE_REGISTER_EXCEPTION_MAPPER, microProfileRegisterExceptionMapper);
|
||||
additionalProperties.put(MICROPROFILE_GLOBAL_EXCEPTION_MAPPER, microProfileGlobalExceptionMapper);
|
||||
|
||||
convertPropertyToBooleanAndWriteBack(MICROPROFILE_MUTINY, this::setMicroprofileMutiny);
|
||||
|
||||
convertPropertyToStringAndWriteBack(MICROPROFILE_REST_CLIENT_VERSION, value -> microprofileRestClientVersion = value);
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.samskivert.mustache.Mustache;
|
||||
import com.samskivert.mustache.Mustache.Lambda;
|
||||
import com.samskivert.mustache.Template;
|
||||
import io.swagger.v3.oas.models.Components;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.Operation;
|
||||
import lombok.Getter;
|
||||
@@ -34,7 +33,6 @@ import org.openapitools.codegen.model.ModelMap;
|
||||
import org.openapitools.codegen.model.ModelsMap;
|
||||
import org.openapitools.codegen.model.OperationMap;
|
||||
import org.openapitools.codegen.model.OperationsMap;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.openapitools.codegen.utils.URLPathUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -770,11 +768,6 @@ public class KotlinSpringServerCodegen extends AbstractKotlinCodegen
|
||||
public void preprocessOpenAPI(OpenAPI openAPI) {
|
||||
super.preprocessOpenAPI(openAPI);
|
||||
|
||||
if (SPRING_BOOT.equals(library) && ModelUtils.containsEnums(this.openAPI)) {
|
||||
supportingFiles.add(new SupportingFile("converter.mustache",
|
||||
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "EnumConverterConfiguration.kt"));
|
||||
}
|
||||
|
||||
if (!additionalProperties.containsKey(TITLE)) {
|
||||
// The purpose of the title is for:
|
||||
// - README documentation
|
||||
|
||||
@@ -1105,17 +1105,14 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
||||
addtionalPropertiesName = schema.getTitle();
|
||||
} else {
|
||||
Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
|
||||
if(additionalProperties == null) {
|
||||
return;
|
||||
} else if (additionalProperties.getTitle() != null) {
|
||||
if (additionalProperties.getTitle() != null) {
|
||||
addtionalPropertiesName = additionalProperties.getTitle();
|
||||
} else if (additionalProperties.get$ref() != null) {
|
||||
String ref = ModelUtils.getSimpleRef(additionalProperties.get$ref());
|
||||
addtionalPropertiesName = toVarName(toModelName(ref));
|
||||
}
|
||||
}
|
||||
|
||||
properties.put(addtionalPropertiesName, schema);
|
||||
properties.put(addtionalPropertiesName, schema);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,9 +61,6 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
private Boolean allowBlockingValidator = false;
|
||||
private Boolean allowBlockingResponseSerialize = false;
|
||||
private String externCrateName;
|
||||
private Boolean basicAuthorization = false;
|
||||
private Boolean basicAnalytic = false;
|
||||
private Boolean ownedRequest = false;
|
||||
|
||||
// Types
|
||||
private static final String uuidType = "uuid::Uuid";
|
||||
@@ -289,7 +286,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
LOGGER.info("Warning: Environment variable 'RUST_POST_PROCESS_FILE' is set but file post-processing is not enabled. To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).");
|
||||
}
|
||||
|
||||
if (!ModelUtils.isGenerateAliasAsModel()) {
|
||||
if (!Boolean.TRUE.equals(ModelUtils.isGenerateAliasAsModel())) {
|
||||
LOGGER.warn("generateAliasAsModel is set to false, which means array/map will be generated as model instead and the resulting code may have issues. Please enable `generateAliasAsModel` to address the issue.");
|
||||
}
|
||||
|
||||
@@ -319,24 +316,6 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
} else {
|
||||
additionalProperties.put("allowBlockingResponseSerialize", allowBlockingResponseSerialize);
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey("basicAuthorization")) {
|
||||
basicAuthorization = convertPropertyToBooleanAndWriteBack("basicAuthorization");
|
||||
} else {
|
||||
additionalProperties.put("basicAuthorization", basicAuthorization);
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey("basicAnalytic")) {
|
||||
basicAnalytic = convertPropertyToBooleanAndWriteBack("basicAnalytic");
|
||||
} else {
|
||||
additionalProperties.put("basicAnalytic", basicAnalytic);
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey("ownedRequest")) {
|
||||
ownedRequest = convertPropertyToBooleanAndWriteBack("ownedRequest");
|
||||
} else {
|
||||
additionalProperties.put("ownedRequest", ownedRequest);
|
||||
}
|
||||
}
|
||||
|
||||
private void setPackageName(String packageName) {
|
||||
@@ -743,21 +722,6 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
operations.put("havingAuthMethod", true);
|
||||
operations.getOperation().forEach(op -> op.vendorExtensions.put("havingAuthMethod", true));
|
||||
this.havingAuthMethods = true;
|
||||
|
||||
if (basicAuthorization) {
|
||||
operations.put("basicAuthorization", true);
|
||||
operations.getOperation().forEach(op -> op.vendorExtensions.put("basicAuthorization", true));
|
||||
}
|
||||
}
|
||||
|
||||
if (basicAnalytic) {
|
||||
operations.put("basicAnalytic", true);
|
||||
operations.getOperation().forEach(op -> op.vendorExtensions.put("basicAnalytic", true));
|
||||
}
|
||||
|
||||
if (ownedRequest) {
|
||||
operations.put("ownedRequest", true);
|
||||
operations.getOperation().forEach(op -> op.vendorExtensions.put("ownedRequest", true));
|
||||
}
|
||||
|
||||
return operationsMap;
|
||||
@@ -1018,22 +982,6 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
property.dataType = objectType;
|
||||
property.isNullable = false;
|
||||
}
|
||||
|
||||
if (property.dataType.startsWith(vecType + "<String")) {
|
||||
property.vendorExtensions.put("is-vec-string", true);
|
||||
} else if (property.dataType.startsWith(vecType + "<models::")) {
|
||||
property.vendorExtensions.put("is-vec-nested", true);
|
||||
} else if (property.dataType.startsWith(mapType + "<String, String")) {
|
||||
property.vendorExtensions.put("is-map-string", true);
|
||||
} else if (property.dataType.startsWith(mapType + "<String, models::")) {
|
||||
property.vendorExtensions.put("is-map-nested", true);
|
||||
} else if (property.dataType.startsWith(mapType + "<String")) {
|
||||
property.vendorExtensions.put("is-map", true);
|
||||
} else if (property.dataType.startsWith("models::")) {
|
||||
property.vendorExtensions.put("is-nested", true);
|
||||
} else if (stringType.equals(property.dataType)) {
|
||||
property.vendorExtensions.put("is-string", true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,14 +16,10 @@
|
||||
|
||||
package org.openapitools.codegen.languages;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.samskivert.mustache.Escapers;
|
||||
import com.samskivert.mustache.Mustache;
|
||||
import io.swagger.v3.oas.models.media.Schema;
|
||||
import org.openapitools.codegen.*;
|
||||
import org.openapitools.codegen.meta.features.*;
|
||||
import org.openapitools.codegen.model.*;
|
||||
import org.openapitools.codegen.templating.mustache.EscapeKeywordLambda;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -144,7 +140,7 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
|
||||
additionalProperties.put("infoEmail", "team@openapitools.org");
|
||||
additionalProperties.put("licenseInfo", "Apache 2.0");
|
||||
additionalProperties.put("licenseUrl", "http://apache.org/licenses/LICENSE-2.0.html");
|
||||
additionalProperties.put("fnEscapeBacktick", new EscapeBacktickLambda());
|
||||
|
||||
|
||||
languageSpecificPrimitives = new HashSet<>(
|
||||
Arrays.asList(
|
||||
@@ -561,12 +557,7 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
|
||||
|
||||
@Override
|
||||
public String escapeReservedWord(String name) {
|
||||
if (this.reservedWordsMappings().containsKey(name)) {
|
||||
return this.reservedWordsMappings().get(name);
|
||||
}
|
||||
// Reserved words will be further escaped at the mustache compiler level.
|
||||
// Scala escaping done here (via `, without compiler escaping) would otherwise be HTML encoded.
|
||||
return "`" + name + "`";
|
||||
return "_" + name;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -816,12 +807,12 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
|
||||
|
||||
if (_vendorExtensions.size() == 1) { // only `x-type`
|
||||
if ("String".equals(cp.getDataType())) {
|
||||
return escapeReservedWordUnapply(cp.baseName);
|
||||
return cp.paramName;
|
||||
} else {
|
||||
return cp.dataType + "Varr(" + escapeReservedWordUnapply(cp.baseName) + ")";
|
||||
return cp.dataType + "Varr(" + cp.paramName + ")";
|
||||
}
|
||||
} else {
|
||||
return cp.baseName + "Varr(" + escapeReservedWordUnapply(cp.baseName) + ")";
|
||||
return cp.baseName + "Varr(" + cp.paramName + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -853,34 +844,11 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
|
||||
}
|
||||
|
||||
vendorExtensions.putAll(refineProp(cp, imports));
|
||||
return cp.baseName + "QueryParam(" + escapeReservedWordUnapply(cp.baseName) + ")";
|
||||
return cp.baseName + "QueryParam(" + cp.paramName + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratorLanguage generatorLanguage() {
|
||||
return GeneratorLanguage.SCALA;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
|
||||
return super.addMustacheLambdas()
|
||||
.put("escapeReservedWordUnapply", new EscapeKeywordLambda(this::escapeReservedWordUnapply));
|
||||
}
|
||||
|
||||
private String escapeReservedWordUnapply(String value) {
|
||||
// The unapply method doesn’t allow you to work with reserved variables via backticks;
|
||||
// in such cases you should use the variable via a placeholder instead.
|
||||
return isReservedWord(value) ? "_" + value : value;
|
||||
}
|
||||
|
||||
private static class EscapeBacktickLambda extends AbstractScalaCodegen.CustomLambda {
|
||||
@Override
|
||||
public String formatFragment(String fragment) {
|
||||
if (fragment.startsWith("`") && fragment.endsWith("`")) {
|
||||
String unescaped = fragment.substring(1, fragment.length() - 1);
|
||||
return "`" + Escapers.HTML.escape(unescaped) + "`";
|
||||
}
|
||||
return Escapers.HTML.escape(fragment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package org.openapitools.codegen.languages;
|
||||
|
||||
import com.samskivert.mustache.Mustache;
|
||||
import io.swagger.v3.oas.models.Components;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.Operation;
|
||||
import io.swagger.v3.oas.models.PathItem;
|
||||
@@ -39,7 +40,6 @@ import org.openapitools.codegen.model.OperationsMap;
|
||||
import org.openapitools.codegen.templating.mustache.SplitStringLambda;
|
||||
import org.openapitools.codegen.templating.mustache.SpringHttpStatusLambda;
|
||||
import org.openapitools.codegen.templating.mustache.TrimWhitespaceLambda;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.openapitools.codegen.utils.ProcessUtils;
|
||||
import org.openapitools.codegen.utils.URLPathUtils;
|
||||
import org.slf4j.Logger;
|
||||
@@ -648,6 +648,20 @@ public class SpringCodegen extends AbstractJavaCodegen
|
||||
supportsAdditionalPropertiesWithComposedSchema = true;
|
||||
}
|
||||
|
||||
private boolean containsEnums() {
|
||||
if (openAPI == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Components components = this.openAPI.getComponents();
|
||||
if (components == null || components.getSchemas() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return components.getSchemas().values().stream()
|
||||
.anyMatch(it -> it.getEnum() != null && !it.getEnum().isEmpty());
|
||||
}
|
||||
|
||||
private boolean supportLibraryUseTags() {
|
||||
return SPRING_BOOT.equals(library) || SPRING_CLOUD_LIBRARY.equals(library);
|
||||
}
|
||||
@@ -682,7 +696,7 @@ public class SpringCodegen extends AbstractJavaCodegen
|
||||
public void preprocessOpenAPI(OpenAPI openAPI) {
|
||||
super.preprocessOpenAPI(openAPI);
|
||||
|
||||
if (SPRING_BOOT.equals(library) && ModelUtils.containsEnums(this.openAPI)) {
|
||||
if (SPRING_BOOT.equals(library) && containsEnums()) {
|
||||
supportingFiles.add(new SupportingFile("converter.mustache",
|
||||
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "EnumConverterConfiguration.java"));
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode
|
||||
public static final String NGPACKAGR_VERSION = "ngPackagrVersion";
|
||||
public static final String ZONEJS_VERSION = "zonejsVersion";
|
||||
|
||||
protected String ngVersion = "20.0.0";
|
||||
protected String ngVersion = "19.0.0";
|
||||
@Getter @Setter
|
||||
protected String npmRepository = null;
|
||||
@Setter(AccessLevel.PRIVATE) private boolean useSingleRequestParameter = false;
|
||||
@@ -170,7 +170,7 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode
|
||||
|
||||
@Override
|
||||
public String getHelp() {
|
||||
return "Generates a TypeScript Angular (9.x - 20.x) client library.";
|
||||
return "Generates a TypeScript Angular (9.x - 19.x) client library.";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -78,9 +78,6 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
|
||||
private static final String USE_OBJECT_PARAMS_SWITCH = "useObjectParameters";
|
||||
private static final String USE_OBJECT_PARAMS_DESC = "Use aggregate parameter objects as function arguments for api operations instead of passing each parameter as a separate function argument.";
|
||||
|
||||
public static final String USE_ERASABLE_SYNTAX = "useErasableSyntax";
|
||||
public static final String USE_ERASABLE_SYNTAX_DESC = "Use erasable syntax for the generated code. This is a temporary feature and will be removed in the future.";
|
||||
|
||||
private final Map<String, String> frameworkToHttpLibMap;
|
||||
|
||||
// NPM Options
|
||||
@@ -125,7 +122,6 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
|
||||
cliOptions.add(new CliOption(TypeScriptClientCodegen.USE_OBJECT_PARAMS_SWITCH, TypeScriptClientCodegen.USE_OBJECT_PARAMS_DESC).defaultValue("false"));
|
||||
cliOptions.add(new CliOption(TypeScriptClientCodegen.USE_INVERSIFY_SWITCH, TypeScriptClientCodegen.USE_INVERSIFY_SWITCH_DESC).defaultValue("false"));
|
||||
cliOptions.add(new CliOption(TypeScriptClientCodegen.IMPORT_FILE_EXTENSION_SWITCH, TypeScriptClientCodegen.IMPORT_FILE_EXTENSION_SWITCH_DESC));
|
||||
cliOptions.add(new CliOption(TypeScriptClientCodegen.USE_ERASABLE_SYNTAX, TypeScriptClientCodegen.USE_ERASABLE_SYNTAX_DESC).defaultValue("false"));
|
||||
|
||||
CliOption frameworkOption = new CliOption(TypeScriptClientCodegen.FRAMEWORK_SWITCH, TypeScriptClientCodegen.FRAMEWORK_SWITCH_DESC);
|
||||
for (String option : TypeScriptClientCodegen.FRAMEWORKS) {
|
||||
|
||||
@@ -799,11 +799,6 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toCollection(TreeSet::new));
|
||||
|
||||
cm.oneOfPrimitives = oneOfsList.stream()
|
||||
.filter(CodegenProperty::getIsPrimitiveType)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toCollection(HashSet::new));
|
||||
|
||||
if (!cm.oneOf.isEmpty()) {
|
||||
// For oneOfs only import $refs within the oneOf
|
||||
cm.imports = cm.imports.stream()
|
||||
@@ -1489,8 +1484,6 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
|
||||
public Set<String> oneOfModels = new TreeSet<>();
|
||||
@Getter @Setter
|
||||
public Set<String> oneOfArrays = new TreeSet<>();
|
||||
@Getter @Setter
|
||||
public Set<CodegenProperty> oneOfPrimitives = new HashSet<>();
|
||||
|
||||
public boolean isEntity; // Is a model containing an "id" property marked as isUniqueId
|
||||
public String returnPassthrough;
|
||||
|
||||
@@ -2435,19 +2435,6 @@ public class ModelUtils {
|
||||
schema.getContentSchema() != null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the OpenAPI specification contains any schemas which are enums.
|
||||
* @param openAPI OpenAPI specification
|
||||
* @return true if the OpenAPI specification contains any schemas which are enums.
|
||||
*/
|
||||
public static boolean containsEnums(OpenAPI openAPI) {
|
||||
Map<String, Schema> schemaMap = getSchemas(openAPI);
|
||||
if (schemaMap.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return schemaMap.values().stream().anyMatch(ModelUtils::isEnumSchema);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
private interface OpenAPISchemaVisitor {
|
||||
|
||||
@@ -15,16 +15,16 @@ For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}})
|
||||
{{/infoUrl}}
|
||||
|
||||
## Installation
|
||||
You'll need the `curl 7.61.1` package in order to build the API. To have code formatted nicely, you also need to have uncrustify version 0.67 or later.
|
||||
You'll need the `curl 7.58.0` package in order to build the API. To have code formatted nicely, you also need to have uncrustify version 0.67 or later.
|
||||
|
||||
# Prerequisites
|
||||
|
||||
## Install the `curl 7.61.1` package with the following command on Linux.
|
||||
## Install the `curl 7.58.0` package with the following command on Linux.
|
||||
```bash
|
||||
sudo apt remove curl
|
||||
wget http://curl.haxx.se/download/curl-7.61.1.tar.gz
|
||||
tar -xvf curl-7.61.1.tar.gz
|
||||
cd curl-7.61.1/
|
||||
wget http://curl.haxx.se/download/curl-7.58.0.tar.gz
|
||||
tar -xvf curl-7.58.0.tar.gz
|
||||
cd curl-7.58.0/
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
|
||||
@@ -10,7 +10,6 @@ apiClient_t *apiClient_create() {
|
||||
apiClient_t *apiClient = malloc(sizeof(apiClient_t));
|
||||
apiClient->basePath = strdup("{{{basePath}}}");
|
||||
apiClient->sslConfig = NULL;
|
||||
apiClient->curlConfig = NULL;
|
||||
apiClient->dataReceived = NULL;
|
||||
apiClient->dataReceivedLen = 0;
|
||||
apiClient->data_callback_func = NULL;
|
||||
@@ -61,12 +60,6 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
|
||||
apiClient->sslConfig = NULL;
|
||||
}
|
||||
|
||||
apiClient->curlConfig = malloc(sizeof(curlConfig_t));
|
||||
apiClient->curlConfig->verbose = 0;
|
||||
apiClient->curlConfig->keepalive = 0;
|
||||
apiClient->curlConfig->keepidle = 120;
|
||||
apiClient->curlConfig->keepintvl = 60;
|
||||
|
||||
apiClient->dataReceived = NULL;
|
||||
apiClient->dataReceivedLen = 0;
|
||||
apiClient->data_callback_func = NULL;
|
||||
@@ -149,12 +142,6 @@ void apiClient_free(apiClient_t *apiClient) {
|
||||
{{/isApiKey}}
|
||||
{{/authMethods}}
|
||||
{{/hasAuthMethods}}
|
||||
|
||||
if(apiClient->curlConfig) {
|
||||
free(apiClient->curlConfig);
|
||||
apiClient->curlConfig = NULL;
|
||||
}
|
||||
|
||||
free(apiClient);
|
||||
}
|
||||
|
||||
@@ -511,6 +498,7 @@ void apiClient_invoke(apiClient_t *apiClient,
|
||||
CURLOPT_WRITEDATA,
|
||||
apiClient);
|
||||
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(handle, CURLOPT_VERBOSE, 0); // to get curl debug msg 0: to disable, 1L:to enable
|
||||
|
||||
{{#hasAuthMethods}}
|
||||
{{#authMethods}}
|
||||
@@ -555,15 +543,6 @@ void apiClient_invoke(apiClient_t *apiClient,
|
||||
postData(handle, bodyParameters, bodyParametersLength);
|
||||
}
|
||||
|
||||
if(apiClient->curlConfig != NULL) {
|
||||
if(apiClient->curlConfig->keepalive == 1) {
|
||||
curl_easy_setopt(handle, CURLOPT_TCP_KEEPALIVE, 1L);
|
||||
curl_easy_setopt(handle, CURLOPT_TCP_KEEPIDLE, apiClient->curlConfig->keepidle);
|
||||
curl_easy_setopt(handle, CURLOPT_TCP_KEEPINTVL, apiClient->curlConfig->keepintvl);
|
||||
}
|
||||
curl_easy_setopt(handle, CURLOPT_VERBOSE, apiClient->curlConfig->verbose);
|
||||
}
|
||||
|
||||
res = curl_easy_perform(handle);
|
||||
|
||||
curl_slist_free_all(headers);
|
||||
|
||||
@@ -19,19 +19,9 @@ typedef struct sslConfig_t {
|
||||
/* 1 -- skip ssl verify for server certificate */
|
||||
} sslConfig_t;
|
||||
|
||||
typedef struct curlConfig_t {
|
||||
long verbose; /* 0 -- disable verbose (default) */
|
||||
/* 1 -- enable verbose */
|
||||
int keepalive; /* 0 -- disable keepalive (default) */
|
||||
/* 1 -- enable keepalive */
|
||||
long keepidle; /* keep-alive idle time: default to 120 seconds */
|
||||
long keepintvl; /* interval time between keep-alive probes: default to 60 seconds */
|
||||
} curlConfig_t;
|
||||
|
||||
typedef struct apiClient_t {
|
||||
char *basePath;
|
||||
sslConfig_t *sslConfig;
|
||||
curlConfig_t *curlConfig;
|
||||
void *dataReceived;
|
||||
long dataReceivedLen;
|
||||
void (*data_callback_func)(void **, long *);
|
||||
|
||||
@@ -64,7 +64,6 @@ import {{invokerPackage}}.auth.OAuth;
|
||||
{{/hasOAuthMethods}}
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||
@@ -535,7 +534,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||
* @param value The value of the parameter.
|
||||
* @return A list of {@code Pair} objects.
|
||||
*/
|
||||
public List<Pair> parameterToPairs(String collectionFormat, String name, Collection<?> value) {
|
||||
public List<Pair> parameterToPairs(String collectionFormat, String name, Collection value) {
|
||||
List<Pair> params = new ArrayList<Pair>();
|
||||
|
||||
// preconditions
|
||||
|
||||
@@ -7,7 +7,6 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class Configuration {
|
||||
public static final String VERSION = "{{{artifactVersion}}}";
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import java.time.format.DateTimeParseException;
|
||||
* It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}.
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class JavaTimeFormatter {
|
||||
private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package {{invokerPackage}};
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class Pair {
|
||||
private final String name;
|
||||
private final String value;
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.util.GregorianCalendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class RFC3339DateFormat extends DateFormat {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
|
||||
|
||||
@@ -18,7 +18,6 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeFeature;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class RFC3339InstantDeserializer<T extends Temporal> extends InstantDeserializer<T> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final static boolean DEFAULT_NORMALIZE_ZONE_ID = JavaTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault();
|
||||
|
||||
@@ -6,24 +6,16 @@ import java.time.OffsetDateTime;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import com.fasterxml.jackson.databind.Module.SetupContext;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class RFC3339JavaTimeModule extends SimpleModule {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public RFC3339JavaTimeModule() {
|
||||
super("RFC3339JavaTimeModule");
|
||||
|
||||
addDeserializer(Instant.class, RFC3339InstantDeserializer.INSTANT);
|
||||
addDeserializer(OffsetDateTime.class, RFC3339InstantDeserializer.OFFSET_DATE_TIME);
|
||||
addDeserializer(ZonedDateTime.class, RFC3339InstantDeserializer.ZONED_DATE_TIME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupModule(SetupContext context) {
|
||||
super.setupModule(context);
|
||||
|
||||
addDeserializer(Instant.class, RFC3339InstantDeserializer.INSTANT);
|
||||
addDeserializer(OffsetDateTime.class, RFC3339InstantDeserializer.OFFSET_DATE_TIME);
|
||||
addDeserializer(ZonedDateTime.class, RFC3339InstantDeserializer.ZONED_DATE_TIME);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.Map;
|
||||
* Representing a Server configuration.
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ServerConfiguration {
|
||||
public String URL;
|
||||
public String description;
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.HashSet;
|
||||
* Representing a Server Variable for server URL template substitution.
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ServerVariable {
|
||||
public String description;
|
||||
public String defaultValue;
|
||||
|
||||
@@ -6,7 +6,6 @@ import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class StringUtil {
|
||||
/**
|
||||
* Check if the given array contains the given value (with case-insensitive comparison).
|
||||
|
||||
@@ -19,7 +19,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
{{#operations}}
|
||||
public class {{classname}} {
|
||||
private ApiClient apiClient;
|
||||
|
||||
@@ -6,7 +6,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiException extends{{#useRuntimeException}} RuntimeException {{/useRuntimeException}}{{^useRuntimeException}} Exception {{/useRuntimeException}}{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiKeyAuth implements Authentication {
|
||||
private final String location;
|
||||
private final String paramName;
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public interface Authentication {
|
||||
/**
|
||||
* Apply authentication settings to header and query params.
|
||||
|
||||
@@ -11,7 +11,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class HttpBasicAuth implements Authentication {
|
||||
private String username;
|
||||
private String password;
|
||||
|
||||
@@ -9,7 +9,6 @@ import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class HttpBearerAuth implements Authentication {
|
||||
private final String scheme;
|
||||
private Supplier<String> tokenSupplier;
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class OAuth implements Authentication {
|
||||
private String accessToken;
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ package {{invokerPackage}}.auth;
|
||||
* OAuth flows that are supported by this client
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public enum OAuthFlow {
|
||||
ACCESS_CODE, //called authorizationCode in OpenAPI 3.0
|
||||
IMPLICIT,
|
||||
|
||||
@@ -86,7 +86,6 @@ import {{invokerPackage}}.auth.OAuth;
|
||||
{{/hasOAuthMethods}}
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||
|
||||
@@ -7,7 +7,6 @@ import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public abstract class BaseApi {
|
||||
|
||||
protected ApiClient apiClient;
|
||||
|
||||
@@ -29,7 +29,6 @@ import {{javaxPackage}}.validation.Valid;
|
||||
|
||||
{{/useBeanValidation}}
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
{{#operations}}
|
||||
public class {{classname}} extends BaseApi {
|
||||
|
||||
|
||||
@@ -53,7 +53,6 @@ import feign.Retryer;
|
||||
{{/hasOAuthMethods}}
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient {
|
||||
protected static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import {{javaxPackage}}.validation.Valid;
|
||||
import feign.*;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public interface {{classname}} extends ApiClient.Api {
|
||||
|
||||
{{#operations}}{{#operation}}
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.github.scribejava.core.oauth2.clientauthentication.ClientAuthenticati
|
||||
import com.github.scribejava.core.oauth2.clientauthentication.RequestBodyAuthenticationScheme;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class DefaultApi20Impl extends DefaultApi20 {
|
||||
|
||||
private final String accessTokenEndpoint;
|
||||
|
||||
@@ -10,7 +10,6 @@ import feign.RequestTemplate;
|
||||
import java.util.Collection;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public abstract class OAuth implements RequestInterceptor {
|
||||
|
||||
//https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.github.scribejava.core.builder.ServiceBuilder;
|
||||
import com.github.scribejava.core.model.OAuth2AccessToken;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class OauthClientCredentialsGrant extends OAuth {
|
||||
|
||||
public OauthClientCredentialsGrant(String authorizationUrl, String tokenUrl, String scopes) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.github.scribejava.core.builder.ServiceBuilder;
|
||||
import com.github.scribejava.core.model.OAuth2AccessToken;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class OauthPasswordGrant extends OAuth {
|
||||
|
||||
private String username;
|
||||
|
||||
@@ -33,12 +33,10 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{#isEnum}}
|
||||
{{^isContainer}}
|
||||
{{>modelInnerEnum}}
|
||||
|
||||
{{/isContainer}}
|
||||
{{#isContainer}}
|
||||
{{#mostInnerItems}}
|
||||
{{>modelInnerEnum}}
|
||||
|
||||
{{/mostInnerItems}}
|
||||
{{/isContainer}}
|
||||
{{/isEnum}}
|
||||
@@ -74,7 +72,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{/isContainer}}
|
||||
{{/vendorExtensions.x-is-jackson-optional-nullable}}
|
||||
{{^vendorExtensions.x-is-jackson-optional-nullable}}
|
||||
{{>nullable_var_annotations}}{{! prevent indent}}
|
||||
{{>nullable_var_annotations}}
|
||||
{{#isContainer}}
|
||||
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
|
||||
{{/isContainer}}
|
||||
@@ -192,13 +190,12 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{#deprecated}}
|
||||
@Deprecated
|
||||
{{/deprecated}}
|
||||
{{>nullable_var_annotations}}{{! prevent indent}}
|
||||
{{>nullable_var_annotations}}
|
||||
{{#jsonb}}
|
||||
@JsonbProperty("{{baseName}}")
|
||||
{{/jsonb}}
|
||||
{{#useBeanValidation}}
|
||||
{{>beanValidation}}
|
||||
|
||||
{{/useBeanValidation}}
|
||||
{{#swagger1AnnotationLibrary}}
|
||||
@ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}")
|
||||
@@ -227,7 +224,6 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
|
||||
{{#vendorExtensions.x-is-jackson-optional-nullable}}
|
||||
{{> jackson_annotations}}
|
||||
|
||||
public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() {
|
||||
return {{name}};
|
||||
}
|
||||
@@ -253,7 +249,6 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
|
||||
{{/vars}}
|
||||
{{>libraries/feign/additional_properties}}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
{{#useReflectionEqualsHashCode}}
|
||||
|
||||
@@ -24,7 +24,6 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient {
|
||||
protected final String basePath;
|
||||
protected final HttpRequestFactory httpRequestFactory;
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
{{#operations}}
|
||||
public class {{classname}} {
|
||||
private ApiClient apiClient;
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
* Abstract class for oneOf,anyOf schemas defined in OpenAPI spec
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public abstract class AbstractOpenApiSchema {
|
||||
|
||||
// store the actual instance of the schema/object
|
||||
@@ -136,5 +135,4 @@ public abstract class AbstractOpenApiSchema {
|
||||
|
||||
{{>libraries/jersey2/additional_properties}}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -84,7 +84,6 @@ import {{invokerPackage}}.auth.OAuth;
|
||||
* <p>ApiClient class.</p>
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||
protected static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import {{javaxPackage}}.ws.rs.core.GenericType;
|
||||
import {{javaxPackage}}.ws.rs.ext.ContextResolver;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class JSON implements ContextResolver<ObjectMapper> {
|
||||
private ObjectMapper mapper;
|
||||
|
||||
|
||||
@@ -119,7 +119,6 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
|
||||
super("anyOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
|
||||
}
|
||||
{{> libraries/jersey2/additional_properties }}
|
||||
|
||||
{{#additionalPropertiesType}}
|
||||
/**
|
||||
* Return true if this {{name}} object is equal to o.
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
{{#operations}}
|
||||
public class {{classname}} {
|
||||
private ApiClient apiClient;
|
||||
@@ -206,7 +205,7 @@ public class {{classname}} {
|
||||
|
||||
public class API{{operationId}}Request {
|
||||
{{#allParams}}
|
||||
{{>nullable_var_annotations}}{{! prevent indent}}
|
||||
{{>nullable_var_annotations}}
|
||||
private {{{dataType}}} {{paramName}};
|
||||
{{/allParams}}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import java.util.TreeMap;
|
||||
* API Exception
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiException extends{{#useRuntimeException}} RuntimeException {{/useRuntimeException}}{{^useRuntimeException}} Exception {{/useRuntimeException}}{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiKeyAuth implements Authentication {
|
||||
private final String location;
|
||||
private final String paramName;
|
||||
|
||||
@@ -10,7 +10,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public interface Authentication {
|
||||
/**
|
||||
* Apply authentication settings to header and query params.
|
||||
|
||||
@@ -13,7 +13,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class HttpBasicAuth implements Authentication {
|
||||
private String username;
|
||||
private String password;
|
||||
|
||||
@@ -10,7 +10,6 @@ import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class HttpBearerAuth implements Authentication {
|
||||
private final String scheme;
|
||||
private String bearerToken;
|
||||
|
||||
@@ -21,7 +21,6 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class OAuth implements Authentication {
|
||||
private static final Logger log = Logger.getLogger(OAuth.class.getName());
|
||||
|
||||
|
||||
@@ -2,21 +2,17 @@
|
||||
|
||||
{{#isEnum}}
|
||||
{{>enum_outer_doc}}
|
||||
|
||||
{{/isEnum}}
|
||||
{{^isEnum}}
|
||||
{{^oneOf.isEmpty}}
|
||||
{{>model_oneof_doc}}
|
||||
|
||||
{{/oneOf.isEmpty}}
|
||||
{{^anyOf.isEmpty}}
|
||||
{{>model_anyof_doc}}
|
||||
|
||||
{{/anyOf.isEmpty}}
|
||||
{{^anyOf}}
|
||||
{{^oneOf}}
|
||||
{{>pojo_doc}}
|
||||
|
||||
{{/oneOf}}
|
||||
{{/anyOf}}
|
||||
{{/isEnum}}
|
||||
|
||||
@@ -181,7 +181,6 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
|
||||
super("oneOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
|
||||
}
|
||||
{{> libraries/jersey2/additional_properties }}
|
||||
|
||||
{{#additionalPropertiesType}}
|
||||
/**
|
||||
* Return true if this {{name}} object is equal to o.
|
||||
|
||||
@@ -37,13 +37,11 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{^isContainer}}
|
||||
{{^vendorExtensions.x-enum-as-string}}
|
||||
{{>modelInnerEnum}}
|
||||
|
||||
{{/vendorExtensions.x-enum-as-string}}
|
||||
{{/isContainer}}
|
||||
{{#isContainer}}
|
||||
{{#mostInnerItems}}
|
||||
{{>modelInnerEnum}}
|
||||
|
||||
{{/mostInnerItems}}
|
||||
{{/isContainer}}
|
||||
{{/isEnum}}
|
||||
@@ -83,7 +81,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{#deprecated}}
|
||||
@Deprecated
|
||||
{{/deprecated}}
|
||||
{{>nullable_var_annotations}}{{! prevent indent}}
|
||||
{{>nullable_var_annotations}}
|
||||
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
|
||||
{{/vendorExtensions.x-is-jackson-optional-nullable}}
|
||||
|
||||
@@ -200,10 +198,9 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
{{#deprecated}}
|
||||
@Deprecated
|
||||
{{/deprecated}}
|
||||
{{>nullable_var_annotations}}{{! prevent indent}}
|
||||
{{>nullable_var_annotations}}
|
||||
{{#useBeanValidation}}
|
||||
{{>beanValidation}}
|
||||
|
||||
{{/useBeanValidation}}
|
||||
{{#swagger1AnnotationLibrary}}
|
||||
@ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}")
|
||||
@@ -235,7 +232,6 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
|
||||
{{#vendorExtensions.x-is-jackson-optional-nullable}}
|
||||
{{> jackson_annotations}}
|
||||
|
||||
public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() {
|
||||
return {{name}};
|
||||
}
|
||||
@@ -270,7 +266,6 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
||||
|
||||
{{/vars}}
|
||||
{{>libraries/jersey2/additional_properties}}
|
||||
|
||||
/**
|
||||
* Return true if this {{name}} object is equal to o.
|
||||
*/
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
* Abstract class for oneOf,anyOf schemas defined in OpenAPI spec
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public abstract class AbstractOpenApiSchema {
|
||||
|
||||
// store the actual instance of the schema/object
|
||||
@@ -136,5 +135,4 @@ public abstract class AbstractOpenApiSchema {
|
||||
|
||||
{{>libraries/jersey2/additional_properties}}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -84,7 +84,6 @@ import {{invokerPackage}}.auth.OAuth;
|
||||
* <p>ApiClient class.</p>
|
||||
*/
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||
protected static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import {{javaxPackage}}.ws.rs.core.GenericType;
|
||||
import {{javaxPackage}}.ws.rs.ext.ContextResolver;
|
||||
|
||||
{{>generatedAnnotation}}
|
||||
|
||||
public class JSON implements ContextResolver<ObjectMapper> {
|
||||
private ObjectMapper mapper;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user