mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-05-12 20:50:55 +00:00
Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2fb26c362e | ||
|
9981a408d1 | ||
|
91630b8591 | ||
|
57bf6925bb | ||
|
be17698320 | ||
|
2fd1ee66cc | ||
|
6344bfa779 | ||
|
66e8c932c3 | ||
|
d6c4634269 | ||
|
bb811db2a2 | ||
|
b55ae3caa8 | ||
|
ecd5d253a8 | ||
|
4cffd32f87 | ||
|
f2813716fb | ||
|
3048fb02e1 | ||
|
5117616b53 | ||
|
5e5a053bfa | ||
|
f5b8fd6f5e | ||
|
4b2abdf48d | ||
|
2010c2a60a | ||
|
41012588dd | ||
|
e22d079bb0 | ||
|
d38898a4d0 | ||
|
652d4ed95c | ||
|
104ceb9c16 | ||
|
0389a99cec | ||
|
f3af25b10c | ||
|
56fe7e3286 | ||
|
ac77339fcd | ||
|
3c664d1a59 | ||
|
76540e591f | ||
|
56eb8f7bc9 | ||
|
3bac186b2f | ||
|
d04c0ddbb4 | ||
|
afa135f93d | ||
|
2327562af4 | ||
|
daeffde719 | ||
|
9a289e9713 | ||
|
3fadfe3889 | ||
|
65c312653a | ||
|
29b6b771d7 | ||
|
9eefc09487 | ||
|
dbf720c093 |
@ -11,10 +11,9 @@
|
|||||||
},
|
},
|
||||||
"ghcr.io/devcontainers/features/rust:1": {},
|
"ghcr.io/devcontainers/features/rust:1": {},
|
||||||
"ghcr.io/snebjorn/devcontainer-feature/chromium:latest": {},
|
"ghcr.io/snebjorn/devcontainer-feature/chromium:latest": {},
|
||||||
"docker-in-docker": {
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||||
"version": "latest",
|
"version": "latest",
|
||||||
"moby": true,
|
"moby": true
|
||||||
"dockerDashComposeVersion": "v1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// Configure tool-specific properties.
|
// Configure tool-specific properties.
|
||||||
|
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@ -28,3 +28,7 @@ modules/openapi-generator/src/main/resources/cpp-qt-client/**/* @martindelille
|
|||||||
samples/client/petstore/cpp-qt/**/* @martindelille
|
samples/client/petstore/cpp-qt/**/* @martindelille
|
||||||
modules/openapi-generator/src/main/resources/cpp-qt-client/**/* @muttleyxd
|
modules/openapi-generator/src/main/resources/cpp-qt-client/**/* @muttleyxd
|
||||||
samples/client/petstore/cpp-qt/**/* @muttleyxd
|
samples/client/petstore/cpp-qt/**/* @muttleyxd
|
||||||
|
|
||||||
|
# cpp-rest-client technical committee
|
||||||
|
modules/openapi-generator/src/main/resources/cpp-rest-client/**/* @aminya
|
||||||
|
samples/client/petstore/cpp-restsdk/**/* @aminya
|
||||||
|
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -10,7 +10,7 @@ assignees: ''
|
|||||||
#### Bug Report Checklist
|
#### Bug Report Checklist
|
||||||
|
|
||||||
- [ ] Have you provided a full/minimal spec to reproduce the issue?
|
- [ ] Have you provided a full/minimal spec to reproduce the issue?
|
||||||
- [ ] Have you validated the input using an OpenAPI validator ([example](https://apitools.dev/swagger-parser/online/))?
|
- [ ] Have you validated the input using an OpenAPI validator?
|
||||||
- [ ] Have you [tested with the latest master](https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-to-test-with-the-latest-master-of-openapi-generator) to confirm the issue still exists?
|
- [ ] Have you [tested with the latest master](https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-to-test-with-the-latest-master-of-openapi-generator) to confirm the issue still exists?
|
||||||
- [ ] Have you searched for related issues/PRs?
|
- [ ] Have you searched for related issues/PRs?
|
||||||
- [ ] What's the actual output vs expected output?
|
- [ ] What's the actual output vs expected output?
|
||||||
|
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -11,7 +11,7 @@
|
|||||||
./bin/generate-samples.sh ./bin/configs/*.yaml || exit
|
./bin/generate-samples.sh ./bin/configs/*.yaml || exit
|
||||||
./bin/utils/export_docs_generators.sh || exit
|
./bin/utils/export_docs_generators.sh || exit
|
||||||
```
|
```
|
||||||
(For Windows users, please run the script in [Git BASH](https://gitforwindows.org/))
|
(For Windows users, please run the script in [WSL](https://learn.microsoft.com/en-us/windows/wsl/install))
|
||||||
Commit all changed files.
|
Commit all changed files.
|
||||||
This is important, as CI jobs will verify _all_ generator outputs of your HEAD commit as it would merge with master.
|
This is important, as CI jobs will verify _all_ generator outputs of your HEAD commit as it would merge with master.
|
||||||
These must match the expectations made by your contribution.
|
These must match the expectations made by your contribution.
|
||||||
|
1
.github/workflows/openapi-generator.yaml
vendored
1
.github/workflows/openapi-generator.yaml
vendored
@ -144,6 +144,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
rm -rf samples/client/petstore/csharp/generichost/latest/HelloWorld
|
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/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/AllOf
|
||||||
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOf
|
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOf
|
||||||
|
1
.github/workflows/samples-dotnet9.yaml
vendored
1
.github/workflows/samples-dotnet9.yaml
vendored
@ -25,6 +25,7 @@ jobs:
|
|||||||
sample:
|
sample:
|
||||||
- samples/client/petstore/csharp/generichost/latest/Tags
|
- samples/client/petstore/csharp/generichost/latest/Tags
|
||||||
- samples/client/petstore/csharp/generichost/latest/HelloWorld
|
- samples/client/petstore/csharp/generichost/latest/HelloWorld
|
||||||
|
- samples/client/petstore/csharp/generichost/latest/OneOfList
|
||||||
- samples/client/petstore/csharp/generichost/net9/AllOf
|
- samples/client/petstore/csharp/generichost/net9/AllOf
|
||||||
- samples/client/petstore/csharp/generichost/net9/AnyOf
|
- samples/client/petstore/csharp/generichost/net9/AnyOf
|
||||||
- samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare
|
- samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare
|
||||||
|
39
.github/workflows/samples-elixir.yaml
vendored
Normal file
39
.github/workflows/samples-elixir.yaml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
name: Samples Elixir
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- samples/client/petstore/elixir/**
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- samples/client/petstore/elixir/**
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
otp: ['25.3.2', '26.2.5', '27.3.3']
|
||||||
|
elixir: ['1.18.3']
|
||||||
|
sample:
|
||||||
|
- samples/client/petstore/elixir/
|
||||||
|
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: erlef/setup-beam@v1
|
||||||
|
with:
|
||||||
|
otp-version: ${{matrix.otp}}
|
||||||
|
elixir-version: ${{matrix.elixir}}
|
||||||
|
- name: mix deps.get
|
||||||
|
run: mix deps.get
|
||||||
|
working-directory: ${{ matrix.sample }}
|
||||||
|
- name: mix test
|
||||||
|
run: mix test
|
||||||
|
working-directory: ${{ matrix.sample }}
|
1
.github/workflows/samples-kotlin-client.yaml
vendored
1
.github/workflows/samples-kotlin-client.yaml
vendored
@ -65,6 +65,7 @@ jobs:
|
|||||||
- samples/client/echo_api/kotlin-jvm-spring-3-restclient
|
- samples/client/echo_api/kotlin-jvm-spring-3-restclient
|
||||||
- samples/client/petstore/kotlin-name-parameter-mappings
|
- samples/client/petstore/kotlin-name-parameter-mappings
|
||||||
- samples/client/others/kotlin-jvm-okhttp-parameter-tests
|
- samples/client/others/kotlin-jvm-okhttp-parameter-tests
|
||||||
|
- samples/client/others/kotlin-jvm-okhttp-path-comments
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
|
1
.github/workflows/samples-kotlin-server.yaml
vendored
1
.github/workflows/samples-kotlin-server.yaml
vendored
@ -48,6 +48,7 @@ jobs:
|
|||||||
- samples/server/others/kotlin-server/jaxrs-spec-array-response
|
- samples/server/others/kotlin-server/jaxrs-spec-array-response
|
||||||
- samples/server/petstore/kotlin-spring-cloud
|
- samples/server/petstore/kotlin-spring-cloud
|
||||||
- samples/server/petstore/kotlin-misk
|
- samples/server/petstore/kotlin-misk
|
||||||
|
- samples/server/petstore/kotlin-misk-config
|
||||||
# comment out due to gradle build failure
|
# comment out due to gradle build failure
|
||||||
#- samples/server/petstore/kotlin-spring-default
|
#- samples/server/petstore/kotlin-spring-default
|
||||||
# no build.gradle file
|
# no build.gradle file
|
||||||
|
@ -74,8 +74,8 @@ elif [ "$NODE_INDEX" = "3" ]; then
|
|||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
||||||
#nvm install stable
|
#nvm install stable
|
||||||
# install v16 instead of the latest stable version
|
# install v16 instead of the latest stable version
|
||||||
nvm install 16
|
nvm install 18
|
||||||
nvm alias default 16
|
nvm alias default 18
|
||||||
node --version
|
node --version
|
||||||
|
|
||||||
# Each step uses the same `$BASH_ENV`, so need to modify it
|
# Each step uses the same `$BASH_ENV`, so need to modify it
|
||||||
|
89
README.md
89
README.md
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`7.13.0`):
|
[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`7.14.0`):
|
||||||
[](https://app.travis-ci.com/github/OpenAPITools/openapi-generator/builds)
|
[](https://app.travis-ci.com/github/OpenAPITools/openapi-generator/builds)
|
||||||
[](https://circleci.com/gh/OpenAPITools/openapi-generator)
|
[](https://circleci.com/gh/OpenAPITools/openapi-generator)
|
||||||
[](https://ci.appveyor.com/project/WilliamCheng/openapi-generator)
|
[](https://ci.appveyor.com/project/WilliamCheng/openapi-generator)
|
||||||
@ -74,6 +74,7 @@ If you find OpenAPI Generator useful for work, please consider asking your compa
|
|||||||
[<img src="https://openapi-generator.tech/img/companies/route4me.png" width="128" height="128">](https://route4me.com/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
[<img src="https://openapi-generator.tech/img/companies/route4me.png" width="128" height="128">](https://route4me.com/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||||
[<img src="https://openapi-generator.tech/img/companies/dm.png" width="128" height="128">](https://www.dotcom-monitor.com/sponsoring-open-source-projects/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
[<img src="https://openapi-generator.tech/img/companies/dm.png" width="128" height="128">](https://www.dotcom-monitor.com/sponsoring-open-source-projects/?utm_source=openapi-generator&utm_medium=sponsorship&utm_campaign=oss-sponsorship)
|
||||||
[<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/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)
|
||||||
|
|
||||||
#### Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity
|
#### Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity
|
||||||
|
|
||||||
@ -96,32 +97,48 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se
|
|||||||
|
|
||||||
## Table of contents
|
## Table of contents
|
||||||
|
|
||||||
- [OpenAPI Generator](#openapi-generator)
|
- [Sponsors](#sponsors)
|
||||||
- [Overview](#overview)
|
- [Thank you to our bronze sponsors!](#thank-you-to-our-bronze-sponsors)
|
||||||
- [Table of Contents](#table-of-contents)
|
- [Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity](#thank-you-godaddy-for-sponsoring-the-domain-names-linode-for-sponsoring-the-vps-checkly-for-sponsoring-the-api-monitoring-and-gradle-for-sponsoring-develocity)
|
||||||
- [1 - Installation](#1---installation)
|
- [Overview](#overview)
|
||||||
- [1.1 - Compatibility](#11---compatibility)
|
- [Table of contents](#table-of-contents)
|
||||||
- [1.2 - Artifacts on Maven Central](#12---artifacts-on-maven-central)
|
- [1 - Installation](#1---installation)
|
||||||
- [1.3 - Download JAR](#13---download-jar)
|
- [1.1 - Compatibility](#11---compatibility)
|
||||||
- [1.4 - Build Projects](#14---build-projects)
|
- [1.2 - Artifacts on Maven Central](#12---artifacts-on-maven-central)
|
||||||
- [1.5 - Homebrew](#15---homebrew)
|
- [1.3 - Download JAR](#13---download-jar)
|
||||||
- [1.6 - Docker](#16---docker)
|
- [Launcher Script](#launcher-script)
|
||||||
- [1.7 - NPM](#17---npm)
|
- [1.4 - Build Projects](#14---build-projects)
|
||||||
- [1.8 - pip](#18---pip)
|
- [Nix users](#nix-users)
|
||||||
- [2 - Getting Started](#2---getting-started)
|
- [1.5 - Homebrew](#15---homebrew)
|
||||||
- [3 - Usage](#3---usage)
|
- [1.6 - Docker](#16---docker)
|
||||||
- [3.1 - Customization](#31---customization)
|
- [Public Pre-built Docker images](#public-pre-built-docker-images)
|
||||||
- [3.2 - Workflow Integration](#32---workflow-integration-maven-gradle-github-cicd)
|
- [OpenAPI Generator CLI Docker Image](#openapi-generator-cli-docker-image)
|
||||||
- [3.3 - Online Generators](#33---online-openapi-generator)
|
- [OpenAPI Generator Online Docker Image](#openapi-generator-online-docker-image)
|
||||||
- [3.4 - License Information on Generated Code](#34---license-information-on-generated-code)
|
- [Development in docker](#development-in-docker)
|
||||||
- [3.5 - IDE Integration](#35---ide-integration)
|
- [Troubleshooting](#troubleshooting)
|
||||||
- [4 - Companies/Projects using OpenAPI Generator](#4---companiesprojects-using-openapi-generator)
|
- [Run Docker in Vagrant](#run-docker-in-vagrant)
|
||||||
- [5 - Presentations/Videos/Tutorials/Books](#5---presentationsvideostutorialsbooks)
|
- [1.7 - NPM](#17---npm)
|
||||||
- [6 - About Us](#6---about-us)
|
- [1.8 - pip](#18---pip)
|
||||||
- [6.1 - OpenAPI Generator Core Team](#61---openapi-generator-core-team)
|
- [2 - Getting Started](#2---getting-started)
|
||||||
- [6.2 - OpenAPI Generator Technical Committee](#62---openapi-generator-technical-committee)
|
- [3 - Usage](#3---usage)
|
||||||
- [6.3 - History of OpenAPI Generator](#63---history-of-openapi-generator)
|
- [To generate a sample client library](#to-generate-a-sample-client-library)
|
||||||
- [7 - License](#7---license)
|
- [3.1 - Customization](#31---customization)
|
||||||
|
- [3.2 - Workflow Integration (Maven, Gradle, Github, CI/CD)](#32---workflow-integration-maven-gradle-github-cicd)
|
||||||
|
- [3.3 - Online OpenAPI generator](#33---online-openapi-generator)
|
||||||
|
- [3.4 - License information on Generated Code](#34---license-information-on-generated-code)
|
||||||
|
- [3.5 - IDE Integration](#35---ide-integration)
|
||||||
|
- [4 - Companies/Projects using OpenAPI Generator](#4---companiesprojects-using-openapi-generator)
|
||||||
|
- [5 - Presentations/Videos/Tutorials/Books](#5---presentationsvideostutorialsbooks)
|
||||||
|
- [6 - About Us](#6---about-us)
|
||||||
|
- [6.1 - OpenAPI Generator Core Team](#61---openapi-generator-core-team)
|
||||||
|
- [Core Team Members](#core-team-members)
|
||||||
|
- [Template Creator](#template-creator)
|
||||||
|
- [How to join the core team](#how-to-join-the-core-team)
|
||||||
|
- [6.2 - OpenAPI Generator Technical Committee](#62---openapi-generator-technical-committee)
|
||||||
|
- [Members of Technical Committee](#members-of-technical-committee)
|
||||||
|
- [6.3 - History of OpenAPI Generator](#63---history-of-openapi-generator)
|
||||||
|
- [Founding Members (alphabetical order):](#founding-members-alphabetical-order)
|
||||||
|
- [7 - License](#7---license)
|
||||||
|
|
||||||
## [1 - Installation](#table-of-contents)
|
## [1 - Installation](#table-of-contents)
|
||||||
|
|
||||||
@ -131,8 +148,8 @@ The OpenAPI Specification has undergone 3 revisions since initial creation in 20
|
|||||||
|
|
||||||
| OpenAPI Generator Version | Release Date | Notes |
|
| OpenAPI Generator Version | Release Date | Notes |
|
||||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------- |
|
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------- |
|
||||||
| 7.13.0 (upcoming minor release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/7.13.0-SNAPSHOT/) | 02.04.2025 | Minor release with breaking changes (with fallback) |
|
| 7.14.0 (upcoming minor release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/7.14.0-SNAPSHOT/) | 29.05.2025 | Minor release with breaking changes (with fallback) |
|
||||||
| [7.12.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v7.12.0) (latest stable release) | 28.02.2025 | Minor release with breaking changes (with fallback) |
|
| [7.13.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v7.13.0) (latest stable release) | 27.04.2025 | Minor release with breaking changes (with fallback) |
|
||||||
| [6.6.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v6.6.0) | 11.05.2023 | Minor release with breaking changes (with fallback) |
|
| [6.6.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v6.6.0) | 11.05.2023 | Minor release with breaking changes (with fallback) |
|
||||||
| [5.4.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v5.4.0) | 31.01.2022 | Minor release with breaking changes (with fallback) |
|
| [5.4.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v5.4.0) | 31.01.2022 | Minor release with breaking changes (with fallback) |
|
||||||
| [4.3.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v4.3.1) | 06.05.2020 | Patch release (enhancements, bug fixes, etc) |
|
| [4.3.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v4.3.1) | 06.05.2020 | Patch release (enhancements, bug fixes, etc) |
|
||||||
@ -195,16 +212,16 @@ See the different versions of the [openapi-generator-cli](https://search.maven.o
|
|||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 11 runtime at a minimum):
|
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 11 runtime at a minimum):
|
||||||
|
|
||||||
JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar`
|
JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.13.0/openapi-generator-cli-7.13.0.jar`
|
||||||
|
|
||||||
For **Mac/Linux** users:
|
For **Mac/Linux** users:
|
||||||
```sh
|
```sh
|
||||||
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar -O openapi-generator-cli.jar
|
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.13.0/openapi-generator-cli-7.13.0.jar -O openapi-generator-cli.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
|
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
|
||||||
```
|
```
|
||||||
Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar
|
Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.13.0/openapi-generator-cli-7.13.0.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage.
|
After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage.
|
||||||
@ -439,7 +456,7 @@ openapi-generator-cli version
|
|||||||
To use a specific version of "openapi-generator-cli"
|
To use a specific version of "openapi-generator-cli"
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
openapi-generator-cli version-manager set 7.12.0
|
openapi-generator-cli version-manager set 7.13.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Or install it as dev-dependency:
|
Or install it as dev-dependency:
|
||||||
@ -463,7 +480,7 @@ pip install openapi-generator-cli
|
|||||||
|
|
||||||
To install a specific version
|
To install a specific version
|
||||||
```
|
```
|
||||||
pip install openapi-generator-cli==7.12.0
|
pip install openapi-generator-cli==7.13.0
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also install with [jdk4py](https://github.com/activeviam/jdk4py) instead of java binary. (python>=3.10 is required)
|
You can also install with [jdk4py](https://github.com/activeviam/jdk4py) instead of java binary. (python>=3.10 is required)
|
||||||
@ -489,7 +506,7 @@ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generat
|
|||||||
(if you're on Windows, replace the last command with `java -jar modules\openapi-generator-cli\target\openapi-generator-cli.jar generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php -o c:\temp\php_api_client`)
|
(if you're on Windows, replace the last command with `java -jar modules\openapi-generator-cli\target\openapi-generator-cli.jar generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php -o c:\temp\php_api_client`)
|
||||||
|
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar)
|
You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.13.0/openapi-generator-cli-7.13.0.jar)
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
|
|
||||||
To get a list of **general** options available, please run `java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help generate`
|
To get a list of **general** options available, please run `java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help generate`
|
||||||
@ -1218,7 +1235,7 @@ If you want to join the committee, please kindly apply by sending an email to te
|
|||||||
| Apex | |
|
| Apex | |
|
||||||
| Bash | @frol (2017/07) @bkryza (2017/08) @kenjones-cisco (2017/09) |
|
| Bash | @frol (2017/07) @bkryza (2017/08) @kenjones-cisco (2017/09) |
|
||||||
| C | @zhemant (2018/11) @ityuhui (2019/12) @michelealbano (2020/03) @eafer (2024/12) |
|
| C | @zhemant (2018/11) @ityuhui (2019/12) @michelealbano (2020/03) @eafer (2024/12) |
|
||||||
| C++ | @ravinikam (2017/07) @stkrwork (2017/07) @etherealjoy (2018/02) @martindelille (2018/03) @muttleyxd (2019/08) |
|
| C++ | @ravinikam (2017/07) @stkrwork (2017/07) @etherealjoy (2018/02) @martindelille (2018/03) @muttleyxd (2019/08) @aminya (2025/05) |
|
||||||
| C# | @mandrean (2017/08) @shibayan (2020/02) @Blackclaws (2021/03) @lucamazzanti (2021/05) @iBicha (2023/07) |
|
| C# | @mandrean (2017/08) @shibayan (2020/02) @Blackclaws (2021/03) @lucamazzanti (2021/05) @iBicha (2023/07) |
|
||||||
| Clojure | |
|
| Clojure | |
|
||||||
| Crystal | @cyangle (2021/01) |
|
| Crystal | @cyangle (2021/01) |
|
||||||
|
@ -45,6 +45,7 @@ build_script:
|
|||||||
test_script:
|
test_script:
|
||||||
- dotnet test samples\client\petstore\csharp\generichost\latest\Tags\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
- dotnet test samples\client\petstore\csharp\generichost\latest\Tags\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
||||||
- dotnet test samples\client\petstore\csharp\generichost\latest\HelloWorld\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
- dotnet test samples\client\petstore\csharp\generichost\latest\HelloWorld\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
||||||
|
- dotnet test samples\client\petstore\csharp\generichost\latest\OneOfList\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
||||||
|
|
||||||
- dotnet test samples\client\petstore\csharp\generichost\net9\AllOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
- dotnet test samples\client\petstore\csharp\generichost\net9\AllOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
||||||
- dotnet test samples\client\petstore\csharp\generichost\net9\AnyOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
- dotnet test samples\client\petstore\csharp\generichost\net9\AnyOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
|
||||||
|
4
bin/configs/avro-schema-issue6268.yaml
Normal file
4
bin/configs/avro-schema-issue6268.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
generatorName: avro-schema
|
||||||
|
outputDir: samples/openapi3/schema/petstore/avro-schema-issue6268
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/issue6268.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/avro-schema
|
8
bin/configs/csharp-generichost-latest-oneOfList.yaml
Normal file
8
bin/configs/csharp-generichost-latest-oneOfList.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
generatorName: csharp
|
||||||
|
outputDir: samples/client/petstore/csharp/generichost/latest/OneOfList
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/bugs/issue_20739.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/csharp
|
||||||
|
additionalProperties:
|
||||||
|
packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
|
||||||
|
modelPropertySorting: alphabetical
|
||||||
|
operationParameterSorting: alphabetical
|
8
bin/configs/kotlin-jvm-okhttp-path-comments.yaml
Normal file
8
bin/configs/kotlin-jvm-okhttp-path-comments.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
generatorName: kotlin
|
||||||
|
outputDir: samples/client/others/kotlin-jvm-okhttp-path-comments
|
||||||
|
library: jvm-okhttp4
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/kotlin/issue20618-path-comments.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/kotlin-client
|
||||||
|
additionalProperties:
|
||||||
|
artifactId: kotlin-petstore-okhttp4-path-comments
|
||||||
|
|
11
bin/configs/kotlin-misk-config.yaml
Normal file
11
bin/configs/kotlin-misk-config.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
generatorName: kotlin-misk
|
||||||
|
outputDir: samples/server/petstore/kotlin-misk-config
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/kotlin-misk
|
||||||
|
validateSpec: false
|
||||||
|
additionalProperties:
|
||||||
|
hideGenerationTimestamp: "true"
|
||||||
|
moduleClassName: "PetStoreModule"
|
||||||
|
generateStubImplClasses: true
|
||||||
|
addModelMoshiJsonAnnotation: true
|
||||||
|
actionPathPrefix : "samplePrefix"
|
@ -2,7 +2,6 @@ generatorName: kotlin-misk
|
|||||||
outputDir: samples/server/petstore/kotlin-misk
|
outputDir: samples/server/petstore/kotlin-misk
|
||||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
|
||||||
templateDir: modules/openapi-generator/src/main/resources/kotlin-misk
|
templateDir: modules/openapi-generator/src/main/resources/kotlin-misk
|
||||||
validateSpec: false
|
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
hideGenerationTimestamp: "true"
|
hideGenerationTimestamp: "true"
|
||||||
moduleClassName: "PetStoreModule"
|
moduleClassName: "PetStoreModule"
|
8
bin/configs/typescript-angular-v19-deep-object.yaml
Normal file
8
bin/configs/typescript-angular-v19-deep-object.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
generatorName: typescript-angular
|
||||||
|
outputDir: samples/client/petstore/typescript-angular-v19/builds/deep-object
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/deep-object-query.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/typescript-angular
|
||||||
|
additionalProperties:
|
||||||
|
ngVersion: 19.0.0
|
||||||
|
npmName: sample-angular-19-0-0-deep-object
|
||||||
|
supportsES6: true
|
@ -18,11 +18,14 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
|||||||
|
|
||||||
| Option | Description | Values | Default |
|
| Option | Description | Values | Default |
|
||||||
| ------ | ----------- | ------ | ------- |
|
| ------ | ----------- | ------ | ------- |
|
||||||
|
|actionPathPrefix|Prefix for action path| ||
|
||||||
|
|addModelMoshiJsonAnnotation|Add a Moshi JSON adapter annotation to all model classes| |true|
|
||||||
|additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null|
|
|additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null|
|
||||||
|apiSuffix|suffix for api classes| |Api|
|
|apiSuffix|suffix for api classes| |Api|
|
||||||
|artifactId|Generated artifact id (name of jar).| |null|
|
|artifactId|Generated artifact id (name of jar).| |null|
|
||||||
|artifactVersion|Generated artifact's package version.| |1.0.0|
|
|artifactVersion|Generated artifact's package version.| |1.0.0|
|
||||||
|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original|
|
|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original|
|
||||||
|
|generateStubImplClasses|Generate Stub Impl Classes| |false|
|
||||||
|groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools|
|
|groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools|
|
||||||
|modelMutable|Create mutable models| |false|
|
|modelMutable|Create mutable models| |false|
|
||||||
|moduleClassName|Name of the generated module class| |OpenApiModule|
|
|moduleClassName|Name of the generated module class| |OpenApiModule|
|
||||||
@ -273,7 +276,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
|||||||
### Wire Format Feature
|
### Wire Format Feature
|
||||||
| Name | Supported | Defined By |
|
| Name | Supported | Defined By |
|
||||||
| ---- | --------- | ---------- |
|
| ---- | --------- | ---------- |
|
||||||
|JSON|✗|OAS2,OAS3
|
|JSON|✓|OAS2,OAS3
|
||||||
|XML|✗|OAS2,OAS3
|
|XML|✗|OAS2,OAS3
|
||||||
|PROTOBUF|✓|ToolingExtension
|
|PROTOBUF|✓|ToolingExtension
|
||||||
|Custom|✗|OAS2,OAS3
|
|Custom|✗|OAS2,OAS3
|
||||||
|
@ -18,7 +18,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
|||||||
|
|
||||||
| Option | Description | Values | Default |
|
| Option | Description | Values | Default |
|
||||||
| ------ | ----------- | ------ | ------- |
|
| ------ | ----------- | ------ | ------- |
|
||||||
|akkaHttpVersion|The version of akka-http| |10.1.10|
|
|akkaHttpVersion|The version of akka-http| |10.2.9|
|
||||||
|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false|
|
|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false|
|
||||||
|apiPackage|package for generated api classes| |null|
|
|apiPackage|package for generated api classes| |null|
|
||||||
|artifactId|artifactId| |openapi-scala-akka-http-server|
|
|artifactId|artifactId| |openapi-scala-akka-http-server|
|
||||||
|
@ -119,18 +119,18 @@ docker run --rm \
|
|||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 11 runtime at a minimum):
|
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 11 runtime at a minimum):
|
||||||
|
|
||||||
JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.9.0/openapi-generator-cli-7.9.0.jar`
|
JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar`
|
||||||
|
|
||||||
For **Mac/Linux** users:
|
For **Mac/Linux** users:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.9.0/openapi-generator-cli-7.9.0.jar -O openapi-generator-cli.jar
|
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar -O openapi-generator-cli.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
|
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.9.0/openapi-generator-cli-7.9.0.jar
|
Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar
|
||||||
```
|
```
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
|
|
||||||
|
@ -820,15 +820,21 @@ Many generators (*those extending DefaultCodegen*) come with a small set of lamb
|
|||||||
|
|
||||||
- `lowercase` - Converts all of the characters in this fragment to lower case using the rules of the `ROOT` locale.
|
- `lowercase` - Converts all of the characters in this fragment to lower case using the rules of the `ROOT` locale.
|
||||||
- `uppercase` - Converts all of the characters in this fragment to upper case using the rules of the `ROOT` locale.
|
- `uppercase` - Converts all of the characters in this fragment to upper case using the rules of the `ROOT` locale.
|
||||||
|
- `snakecase` - Converts text in a fragment to snake case. For example `once upon a time` to `once_upon_a_time`.
|
||||||
- `titlecase` - Converts text in a fragment to title case. For example `once upon a time` to `Once Upon A Time`.
|
- `titlecase` - Converts text in a fragment to title case. For example `once upon a time` to `Once Upon A Time`.
|
||||||
|
- `kebabcase` - Converts text in a fragment to snake case. For example `Once Upon A Time` to `once-upon-a-time`.
|
||||||
|
- `pascalcase` - Converts text in a fragment to snake case. For example `once upon a time` to `OnceUponATime`.
|
||||||
- `camelcase` - Converts text in a fragment to camelCase. For example `Input-text` to `inputText`.
|
- `camelcase` - Converts text in a fragment to camelCase. For example `Input-text` to `inputText`.
|
||||||
- `uncamelize` - Converts text in a fragment from camelCase or PascalCase to a string of words separated by whitespaces. For example `inputText` to `Input Text`.
|
- `uncamelize` - Converts text in a fragment from camelCase or PascalCase to a string of words separated by whitespaces. For example `inputText` to `Input Text`.
|
||||||
|
- `forwardslash` - Replaces all occurrences of `\/`, `\` and `//` in a fragment by `/`.
|
||||||
|
- `backslash` - Replaces all occurrences `/` in a fragment by `\`.
|
||||||
|
- `doublequote` - Prepends `"` to the beginning and appends `"` to the end of a fragment.
|
||||||
- `indented` - Prepends 4 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
- `indented` - Prepends 4 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
||||||
- `indented_8` - Prepends 8 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
- `indented_8` - Prepends 8 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
||||||
- `indented_12` - Prepends 12 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
- `indented_12` - Prepends 12 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
||||||
- `indented_16` -Prepends 16 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
- `indented_16` -Prepends 16 spaces indention from second line of a fragment on. First line will be indented by Mustache.
|
||||||
|
|
||||||
Lambda is invoked by `lambda.[lambda name]` expression. For example: `{{#lambda.lowercase}}FRAGMENT TO LOWERCASE{{/lambda.lowercase}}` to lower case text between `lambda.lowercase`.
|
Some generators provide additional lambdas. Lambda is invoked by `lambda.[lambda name]` expression. For example: `{{#lambda.lowercase}}FRAGMENT TO LOWERCASE{{/lambda.lowercase}}` to lower case text between `lambda.lowercase`.
|
||||||
|
|
||||||
## Extensions
|
## Extensions
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# RELEASE_VERSION
|
# RELEASE_VERSION
|
||||||
openApiGeneratorVersion=7.13.0
|
openApiGeneratorVersion=7.14.0-SNAPSHOT
|
||||||
# /RELEASE_VERSION
|
# /RELEASE_VERSION
|
||||||
|
|
||||||
# BEGIN placeholders
|
# BEGIN placeholders
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# RELEASE_VERSION
|
# RELEASE_VERSION
|
||||||
openApiGeneratorVersion=7.13.0
|
openApiGeneratorVersion=7.14.0-SNAPSHOT
|
||||||
# /RELEASE_VERSION
|
# /RELEASE_VERSION
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<groupId>org.openapitools</groupId>
|
<groupId>org.openapitools</groupId>
|
||||||
<artifactId>openapi-generator-project</artifactId>
|
<artifactId>openapi-generator-project</artifactId>
|
||||||
<!-- RELEASE_VERSION -->
|
<!-- RELEASE_VERSION -->
|
||||||
<version>7.13.0</version>
|
<version>7.14.0-SNAPSHOT</version>
|
||||||
<!-- /RELEASE_VERSION -->
|
<!-- /RELEASE_VERSION -->
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
@ -145,6 +145,43 @@
|
|||||||
<artifactId>maven-release-plugin</artifactId>
|
<artifactId>maven-release-plugin</artifactId>
|
||||||
<version>${maven-release-plugin.version}</version>
|
<version>${maven-release-plugin.version}</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.antlr</groupId>
|
||||||
|
<artifactId>antlr4-maven-plugin</artifactId>
|
||||||
|
<version>4.13.2</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>generate-test-sources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>antlr4</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<sourceDirectory>${basedir}/src/test/antlr4</sourceDirectory>
|
||||||
|
<libDirectory>${basedir}/src/test/antlr4/imports</libDirectory>
|
||||||
|
<outputDirectory>${project.build.directory}/generated-test-sources/antlr4</outputDirectory>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>build-helper-maven-plugin</artifactId>
|
||||||
|
<version>3.6.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>add-test-source</id>
|
||||||
|
<phase>generate-test-sources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>add-test-source</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<sources>
|
||||||
|
<source>${project.build.directory}/generated-test-sources/antlr4</source>
|
||||||
|
</sources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<profiles>
|
<profiles>
|
||||||
@ -464,6 +501,12 @@
|
|||||||
<artifactId>snakeyaml</artifactId>
|
<artifactId>snakeyaml</artifactId>
|
||||||
<version>${snakeyaml.version}</version>
|
<version>${snakeyaml.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.antlr</groupId>
|
||||||
|
<artifactId>antlr4-runtime</artifactId>
|
||||||
|
<version>4.13.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
|
@ -118,7 +118,6 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
|||||||
* p2:
|
* p2:
|
||||||
* type: string
|
* type: string
|
||||||
*
|
*
|
||||||
* @return the discriminator.
|
|
||||||
*/
|
*/
|
||||||
@Getter public CodegenDiscriminator discriminator;
|
@Getter public CodegenDiscriminator discriminator;
|
||||||
@Getter @Setter
|
@Getter @Setter
|
||||||
|
@ -24,15 +24,13 @@ import java.util.*;
|
|||||||
|
|
||||||
public class CodegenOperation {
|
public class CodegenOperation {
|
||||||
public final List<CodegenProperty> responseHeaders = new ArrayList<CodegenProperty>();
|
public final List<CodegenProperty> responseHeaders = new ArrayList<CodegenProperty>();
|
||||||
public boolean hasAuthMethods, hasConsumes, hasProduces, hasParams, hasOptionalParams, hasRequiredParams,
|
public boolean hasAuthMethods, hasConsumes, hasProduces, hasOptionalParams,
|
||||||
returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMap,
|
returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMap,
|
||||||
isArray, isMultipart, isVoid = false,
|
isArray, isMultipart, isVoid = false,
|
||||||
hasVersionHeaders = false, hasVersionQueryParams = false,
|
hasVersionHeaders = false, hasVersionQueryParams = false,
|
||||||
isResponseBinary = false, isResponseFile = false, isResponseOptional = false, hasReference = false, defaultReturnType = false,
|
isResponseBinary = false, isResponseFile = false, isResponseOptional = false, hasReference = false, defaultReturnType = false,
|
||||||
isRestfulIndex, isRestfulShow, isRestfulCreate, isRestfulUpdate, isRestfulDestroy,
|
isDeprecated, isCallbackRequest, uniqueItems,
|
||||||
isRestful, isDeprecated, isCallbackRequest, uniqueItems, hasDefaultResponse = false, hasOnlyDefaultResponse = false, hasConstantParams = false,
|
hasErrorResponseObject; // if 4xx, 5xx responses have at least one error object defined
|
||||||
hasErrorResponseObject, // if 4xx, 5xx responses have at least one error object defined
|
|
||||||
hasSingleParam = false; // if the operation has only one parameter;
|
|
||||||
public CodegenProperty returnProperty;
|
public CodegenProperty returnProperty;
|
||||||
public String path, operationId, returnType, returnFormat, httpMethod, returnBaseType,
|
public String path, operationId, returnType, returnFormat, httpMethod, returnBaseType,
|
||||||
returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse;
|
returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse;
|
||||||
@ -81,6 +79,33 @@ public class CodegenOperation {
|
|||||||
return params != null && !params.isEmpty();
|
return params != null && !params.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if there's at least one parameter
|
||||||
|
*
|
||||||
|
* @return true if parameter exists, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean getHasParams() {
|
||||||
|
return nonEmpty(allParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if there's at least one required parameter
|
||||||
|
*
|
||||||
|
* @return true if required parameter exists, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean getHasRequiredParam() {
|
||||||
|
return nonEmpty(requiredParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if there's exactly one parameter
|
||||||
|
*
|
||||||
|
* @return true if exactly one parameter exists, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean getHasSingleParam() {
|
||||||
|
return allParams.size() == 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if there's at least one body parameter
|
* Check if there's at least one body parameter
|
||||||
*
|
*
|
||||||
@ -362,9 +387,7 @@ public class CodegenOperation {
|
|||||||
sb.append(", hasAuthMethods=").append(hasAuthMethods);
|
sb.append(", hasAuthMethods=").append(hasAuthMethods);
|
||||||
sb.append(", hasConsumes=").append(hasConsumes);
|
sb.append(", hasConsumes=").append(hasConsumes);
|
||||||
sb.append(", hasProduces=").append(hasProduces);
|
sb.append(", hasProduces=").append(hasProduces);
|
||||||
sb.append(", hasParams=").append(hasParams);
|
|
||||||
sb.append(", hasOptionalParams=").append(hasOptionalParams);
|
sb.append(", hasOptionalParams=").append(hasOptionalParams);
|
||||||
sb.append(", hasRequiredParams=").append(hasRequiredParams);
|
|
||||||
sb.append(", returnTypeIsPrimitive=").append(returnTypeIsPrimitive);
|
sb.append(", returnTypeIsPrimitive=").append(returnTypeIsPrimitive);
|
||||||
sb.append(", returnSimpleType=").append(returnSimpleType);
|
sb.append(", returnSimpleType=").append(returnSimpleType);
|
||||||
sb.append(", subresourceOperation=").append(subresourceOperation);
|
sb.append(", subresourceOperation=").append(subresourceOperation);
|
||||||
@ -377,16 +400,7 @@ public class CodegenOperation {
|
|||||||
sb.append(", isResponseFile=").append(isResponseFile);
|
sb.append(", isResponseFile=").append(isResponseFile);
|
||||||
sb.append(", isResponseOptional=").append(isResponseOptional);
|
sb.append(", isResponseOptional=").append(isResponseOptional);
|
||||||
sb.append(", hasReference=").append(hasReference);
|
sb.append(", hasReference=").append(hasReference);
|
||||||
sb.append(", hasDefaultResponse=").append(hasDefaultResponse);
|
|
||||||
sb.append(", hasOnlyDefaultResponse=").append(hasOnlyDefaultResponse);
|
|
||||||
sb.append(", hasErrorResponseObject=").append(hasErrorResponseObject);
|
sb.append(", hasErrorResponseObject=").append(hasErrorResponseObject);
|
||||||
sb.append(", hasSingleParam=").append(hasSingleParam);
|
|
||||||
sb.append(", isRestfulIndex=").append(isRestfulIndex);
|
|
||||||
sb.append(", isRestfulShow=").append(isRestfulShow);
|
|
||||||
sb.append(", isRestfulCreate=").append(isRestfulCreate);
|
|
||||||
sb.append(", isRestfulUpdate=").append(isRestfulUpdate);
|
|
||||||
sb.append(", isRestfulDestroy=").append(isRestfulDestroy);
|
|
||||||
sb.append(", isRestful=").append(isRestful);
|
|
||||||
sb.append(", isDeprecated=").append(isDeprecated);
|
sb.append(", isDeprecated=").append(isDeprecated);
|
||||||
sb.append(", isCallbackRequest=").append(isCallbackRequest);
|
sb.append(", isCallbackRequest=").append(isCallbackRequest);
|
||||||
sb.append(", uniqueItems='").append(uniqueItems);
|
sb.append(", uniqueItems='").append(uniqueItems);
|
||||||
@ -445,9 +459,7 @@ public class CodegenOperation {
|
|||||||
return hasAuthMethods == that.hasAuthMethods &&
|
return hasAuthMethods == that.hasAuthMethods &&
|
||||||
hasConsumes == that.hasConsumes &&
|
hasConsumes == that.hasConsumes &&
|
||||||
hasProduces == that.hasProduces &&
|
hasProduces == that.hasProduces &&
|
||||||
hasParams == that.hasParams &&
|
|
||||||
hasOptionalParams == that.hasOptionalParams &&
|
hasOptionalParams == that.hasOptionalParams &&
|
||||||
hasRequiredParams == that.hasRequiredParams &&
|
|
||||||
returnTypeIsPrimitive == that.returnTypeIsPrimitive &&
|
returnTypeIsPrimitive == that.returnTypeIsPrimitive &&
|
||||||
returnSimpleType == that.returnSimpleType &&
|
returnSimpleType == that.returnSimpleType &&
|
||||||
subresourceOperation == that.subresourceOperation &&
|
subresourceOperation == that.subresourceOperation &&
|
||||||
@ -459,16 +471,7 @@ public class CodegenOperation {
|
|||||||
isResponseFile == that.isResponseFile &&
|
isResponseFile == that.isResponseFile &&
|
||||||
isResponseOptional == that.isResponseOptional &&
|
isResponseOptional == that.isResponseOptional &&
|
||||||
hasReference == that.hasReference &&
|
hasReference == that.hasReference &&
|
||||||
hasDefaultResponse == that.hasDefaultResponse &&
|
|
||||||
hasOnlyDefaultResponse == that.hasOnlyDefaultResponse &&
|
|
||||||
hasErrorResponseObject == that.hasErrorResponseObject &&
|
hasErrorResponseObject == that.hasErrorResponseObject &&
|
||||||
hasSingleParam == that.hasSingleParam &&
|
|
||||||
isRestfulIndex == that.isRestfulIndex &&
|
|
||||||
isRestfulShow == that.isRestfulShow &&
|
|
||||||
isRestfulCreate == that.isRestfulCreate &&
|
|
||||||
isRestfulUpdate == that.isRestfulUpdate &&
|
|
||||||
isRestfulDestroy == that.isRestfulDestroy &&
|
|
||||||
isRestful == that.isRestful &&
|
|
||||||
isDeprecated == that.isDeprecated &&
|
isDeprecated == that.isDeprecated &&
|
||||||
isCallbackRequest == that.isCallbackRequest &&
|
isCallbackRequest == that.isCallbackRequest &&
|
||||||
uniqueItems == that.uniqueItems &&
|
uniqueItems == that.uniqueItems &&
|
||||||
@ -522,16 +525,15 @@ public class CodegenOperation {
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
|
|
||||||
return Objects.hash(responseHeaders, hasAuthMethods, hasConsumes, hasProduces, hasParams, hasOptionalParams,
|
return Objects.hash(responseHeaders, hasAuthMethods, hasConsumes, hasProduces, hasOptionalParams,
|
||||||
hasRequiredParams, returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMap,
|
returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMap,
|
||||||
isArray, isMultipart, isVoid, isResponseBinary, isResponseFile, isResponseOptional, hasReference,
|
isArray, isMultipart, isVoid, isResponseBinary, isResponseFile, isResponseOptional, hasReference,
|
||||||
hasDefaultResponse, hasOnlyDefaultResponse, isRestfulIndex, isRestfulShow, isRestfulCreate, isRestfulUpdate, isRestfulDestroy,
|
isDeprecated, isCallbackRequest, uniqueItems, path, operationId, returnType, httpMethod,
|
||||||
isRestful, isDeprecated, isCallbackRequest, uniqueItems, path, operationId, returnType, httpMethod,
|
|
||||||
returnBaseType, returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse,
|
returnBaseType, returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse,
|
||||||
discriminator, consumes, produces, prioritizedContentTypes, servers, bodyParam, allParams, bodyParams,
|
discriminator, consumes, produces, prioritizedContentTypes, servers, bodyParam, allParams, bodyParams,
|
||||||
pathParams, queryParams, headerParams, formParams, cookieParams, requiredParams, returnProperty, optionalParams,
|
pathParams, queryParams, headerParams, formParams, cookieParams, requiredParams, returnProperty, optionalParams,
|
||||||
authMethods, tags, responses, callbacks, imports, examples, requestBodyExamples, externalDocs,
|
authMethods, tags, responses, callbacks, imports, examples, requestBodyExamples, externalDocs,
|
||||||
vendorExtensions, nickname, operationIdOriginal, operationIdLowerCase, operationIdCamelCase,
|
vendorExtensions, nickname, operationIdOriginal, operationIdLowerCase, operationIdCamelCase,
|
||||||
operationIdSnakeCase, hasErrorResponseObject, hasSingleParam, requiredAndNotNullableParams, notNullableParams, constantParams);
|
operationIdSnakeCase, hasErrorResponseObject, requiredAndNotNullableParams, notNullableParams, constantParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,6 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
|||||||
public boolean exclusiveMaximum;
|
public boolean exclusiveMaximum;
|
||||||
@Setter public boolean required;
|
@Setter public boolean required;
|
||||||
public boolean deprecated;
|
public boolean deprecated;
|
||||||
public boolean hasMoreNonReadOnly; // for model constructor, true if next property is not readonly
|
|
||||||
public boolean isPrimitiveType;
|
public boolean isPrimitiveType;
|
||||||
public boolean isModel;
|
public boolean isModel;
|
||||||
/**
|
/**
|
||||||
@ -995,7 +994,6 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
|||||||
sb.append(", exclusiveMaximum=").append(exclusiveMaximum);
|
sb.append(", exclusiveMaximum=").append(exclusiveMaximum);
|
||||||
sb.append(", required=").append(required);
|
sb.append(", required=").append(required);
|
||||||
sb.append(", deprecated=").append(deprecated);
|
sb.append(", deprecated=").append(deprecated);
|
||||||
sb.append(", hasMoreNonReadOnly=").append(hasMoreNonReadOnly);
|
|
||||||
sb.append(", isPrimitiveType=").append(isPrimitiveType);
|
sb.append(", isPrimitiveType=").append(isPrimitiveType);
|
||||||
sb.append(", isModel=").append(isModel);
|
sb.append(", isModel=").append(isModel);
|
||||||
sb.append(", isContainer=").append(isContainer);
|
sb.append(", isContainer=").append(isContainer);
|
||||||
@ -1092,7 +1090,6 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
|||||||
exclusiveMaximum == that.exclusiveMaximum &&
|
exclusiveMaximum == that.exclusiveMaximum &&
|
||||||
required == that.required &&
|
required == that.required &&
|
||||||
deprecated == that.deprecated &&
|
deprecated == that.deprecated &&
|
||||||
hasMoreNonReadOnly == that.hasMoreNonReadOnly &&
|
|
||||||
isPrimitiveType == that.isPrimitiveType &&
|
isPrimitiveType == that.isPrimitiveType &&
|
||||||
isModel == that.isModel &&
|
isModel == that.isModel &&
|
||||||
isContainer == that.isContainer &&
|
isContainer == that.isContainer &&
|
||||||
@ -1209,7 +1206,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
|||||||
defaultValueWithParam, baseType, containerType, containerTypeMapped, title, unescapedDescription,
|
defaultValueWithParam, baseType, containerType, containerTypeMapped, title, unescapedDescription,
|
||||||
maxLength, minLength, pattern, example, jsonSchema, minimum, maximum,
|
maxLength, minLength, pattern, example, jsonSchema, minimum, maximum,
|
||||||
exclusiveMinimum, exclusiveMaximum, required, deprecated,
|
exclusiveMinimum, exclusiveMaximum, required, deprecated,
|
||||||
hasMoreNonReadOnly, isPrimitiveType, isModel, isContainer, isString, isNumeric,
|
isPrimitiveType, isModel, isContainer, isString, isNumeric,
|
||||||
isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isFile,
|
isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isFile,
|
||||||
isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject,
|
isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject,
|
||||||
isArray, isMap, isOptional, isEnum, isInnerEnum, isEnumRef, isAnyType, isReadOnly, isWriteOnly, isNullable, isShort,
|
isArray, isMap, isOptional, isEnum, isInnerEnum, isEnumRef, isAnyType, isReadOnly, isWriteOnly, isNullable, isShort,
|
||||||
|
@ -404,6 +404,8 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
* If common lambdas are not desired, override addMustacheLambdas() method
|
* If common lambdas are not desired, override addMustacheLambdas() method
|
||||||
* and return empty builder.
|
* and return empty builder.
|
||||||
*
|
*
|
||||||
|
* Corresponding user documentation: docs/templating.md, section "Mustache Lambdas"
|
||||||
|
*
|
||||||
* @return preinitialized map with common lambdas
|
* @return preinitialized map with common lambdas
|
||||||
*/
|
*/
|
||||||
protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
|
protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
|
||||||
@ -959,11 +961,11 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("static-method")
|
@SuppressWarnings("static-method")
|
||||||
public void postProcess() {
|
public void postProcess() {
|
||||||
System.out.println("################################################################################");
|
System.out.println("############################################################################################");
|
||||||
System.out.println("# Thanks for using OpenAPI Generator. #");
|
System.out.println("# Thanks for using OpenAPI Generator. #");
|
||||||
System.out.println("# Please consider donation to help us maintain this project \uD83D\uDE4F #");
|
System.out.println("# We appreciate your support! Please consider donation to help us maintain this project. #");
|
||||||
System.out.println("# https://opencollective.com/openapi_generator/donate #");
|
System.out.println("# https://opencollective.com/openapi_generator/donate #");
|
||||||
System.out.println("################################################################################");
|
System.out.println("############################################################################################");
|
||||||
}
|
}
|
||||||
|
|
||||||
// override with any special post-processing
|
// override with any special post-processing
|
||||||
@ -4834,22 +4836,6 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
// legacy support
|
// legacy support
|
||||||
op.nickname = op.operationId;
|
op.nickname = op.operationId;
|
||||||
|
|
||||||
if (op.allParams.size() > 0) {
|
|
||||||
op.hasParams = true;
|
|
||||||
}
|
|
||||||
op.hasRequiredParams = op.requiredParams.size() > 0;
|
|
||||||
|
|
||||||
// check if the operation has only a single parameter
|
|
||||||
op.hasSingleParam = op.allParams.size() == 1;
|
|
||||||
|
|
||||||
// set Restful Flag
|
|
||||||
op.isRestfulShow = op.isRestfulShow();
|
|
||||||
op.isRestfulIndex = op.isRestfulIndex();
|
|
||||||
op.isRestfulCreate = op.isRestfulCreate();
|
|
||||||
op.isRestfulUpdate = op.isRestfulUpdate();
|
|
||||||
op.isRestfulDestroy = op.isRestfulDestroy();
|
|
||||||
op.isRestful = op.isRestful();
|
|
||||||
|
|
||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8678,6 +8664,5 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
operation.allParams.add(p);
|
operation.allParams.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
operation.hasParams = !operation.allParams.isEmpty();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -922,6 +922,9 @@ public class OpenAPINormalizer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Schema normalizeOneOf(Schema schema, Set<Schema> visitedSchemas) {
|
protected Schema normalizeOneOf(Schema schema, Set<Schema> visitedSchemas) {
|
||||||
|
// Remove duplicate oneOf entries
|
||||||
|
ModelUtils.deduplicateOneOfSchema(schema);
|
||||||
|
|
||||||
// simplify first as the schema may no longer be a oneOf after processing the rule below
|
// simplify first as the schema may no longer be a oneOf after processing the rule below
|
||||||
schema = processSimplifyOneOf(schema);
|
schema = processSimplifyOneOf(schema);
|
||||||
|
|
||||||
@ -1405,7 +1408,6 @@ public class OpenAPINormalizer {
|
|||||||
* then simply it to just boolean.
|
* then simply it to just boolean.
|
||||||
*
|
*
|
||||||
* @param schema Schema
|
* @param schema Schema
|
||||||
* @return Schema
|
|
||||||
*/
|
*/
|
||||||
protected void processSimplifyBooleanEnum(Schema schema) {
|
protected void processSimplifyBooleanEnum(Schema schema) {
|
||||||
if (!getRule(SIMPLIFY_BOOLEAN_ENUM)) {
|
if (!getRule(SIMPLIFY_BOOLEAN_ENUM)) {
|
||||||
@ -1425,7 +1427,6 @@ public class OpenAPINormalizer {
|
|||||||
* then add x-unsigned to use unsigned integer/long instead.
|
* then add x-unsigned to use unsigned integer/long instead.
|
||||||
*
|
*
|
||||||
* @param schema Schema
|
* @param schema Schema
|
||||||
* @return Schema
|
|
||||||
*/
|
*/
|
||||||
protected void processAddUnsignedToIntegerWithInvalidMaxValue(Schema schema) {
|
protected void processAddUnsignedToIntegerWithInvalidMaxValue(Schema schema) {
|
||||||
if (!getRule(ADD_UNSIGNED_TO_INTEGER_WITH_INVALID_MAX_VALUE)) {
|
if (!getRule(ADD_UNSIGNED_TO_INTEGER_WITH_INVALID_MAX_VALUE)) {
|
||||||
|
@ -625,10 +625,11 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
|||||||
|
|
||||||
CodegenComposedSchemas composedSchemas = model.getComposedSchemas();
|
CodegenComposedSchemas composedSchemas = model.getComposedSchemas();
|
||||||
if (composedSchemas != null) {
|
if (composedSchemas != null) {
|
||||||
|
Set<String> composedPropertyNames = new HashSet<String>();
|
||||||
List<CodegenProperty> allOf = composedSchemas.getAllOf();
|
List<CodegenProperty> allOf = composedSchemas.getAllOf();
|
||||||
if (allOf != null) {
|
if (allOf != null) {
|
||||||
for (CodegenProperty property : allOf) {
|
for (CodegenProperty property : allOf) {
|
||||||
property.name = patchPropertyName(model, camelize(property.baseType));
|
property.name = patchPropertyName(model, camelize(property.baseType), composedPropertyNames);
|
||||||
patchPropertyVendorExtensions(property);
|
patchPropertyVendorExtensions(property);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -637,7 +638,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
|||||||
if (anyOf != null) {
|
if (anyOf != null) {
|
||||||
removePropertiesDeclaredInComposedTypes(objs, model, anyOf);
|
removePropertiesDeclaredInComposedTypes(objs, model, anyOf);
|
||||||
for (CodegenProperty property : anyOf) {
|
for (CodegenProperty property : anyOf) {
|
||||||
property.name = patchPropertyName(model, camelize(property.baseType));
|
property.name = patchPropertyName(model, camelize(property.baseType), composedPropertyNames);
|
||||||
property.isNullable = true;
|
property.isNullable = true;
|
||||||
patchPropertyVendorExtensions(property);
|
patchPropertyVendorExtensions(property);
|
||||||
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
|
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
|
||||||
@ -648,7 +649,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
|||||||
if (oneOf != null) {
|
if (oneOf != null) {
|
||||||
removePropertiesDeclaredInComposedTypes(objs, model, oneOf);
|
removePropertiesDeclaredInComposedTypes(objs, model, oneOf);
|
||||||
for (CodegenProperty property : oneOf) {
|
for (CodegenProperty property : oneOf) {
|
||||||
property.name = patchPropertyName(model, camelize(property.baseType));
|
property.name = patchPropertyName(model, camelize(property.baseType), composedPropertyNames);
|
||||||
property.isNullable = true;
|
property.isNullable = true;
|
||||||
patchPropertyVendorExtensions(property);
|
patchPropertyVendorExtensions(property);
|
||||||
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
|
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
|
||||||
@ -715,13 +716,27 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
|||||||
protected void removePropertiesDeclaredInComposedTypes(Map<String, ModelsMap> objs, CodegenModel model, List<CodegenProperty> composedProperties) {
|
protected void removePropertiesDeclaredInComposedTypes(Map<String, ModelsMap> objs, CodegenModel model, List<CodegenProperty> composedProperties) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String patchPropertyName(CodegenModel model, String value) {
|
private String patchPropertyName(CodegenModel model, String value, Set<String> composedPropertyNames) {
|
||||||
String name = escapeReservedWord(model, value);
|
String name = escapeReservedWord(model, value);
|
||||||
|
|
||||||
if (name.startsWith(AbstractCSharpCodegen.invalidParameterNamePrefix)) {
|
if (name.startsWith(AbstractCSharpCodegen.invalidParameterNamePrefix)) {
|
||||||
name = AbstractCSharpCodegen.invalidPropertyNamePrefix + name.substring(AbstractCSharpCodegen.invalidParameterNamePrefix.length());
|
name = AbstractCSharpCodegen.invalidPropertyNamePrefix + name.substring(AbstractCSharpCodegen.invalidParameterNamePrefix.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensure the name we use for a composed property does not already exist as a property or composed property
|
||||||
|
// only do this if the set of composed property names was provided to ensure this method is idempotent
|
||||||
|
// we would not calling this method multiple times to result in different values
|
||||||
|
if (composedPropertyNames != null) {
|
||||||
|
String tmpName = name;
|
||||||
|
long count = model.allVars.stream().map(v -> v.name).filter(n -> n.equals(tmpName)).count() + composedPropertyNames.stream().filter(n -> n.equals(tmpName)).count();
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
name = name + count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
composedPropertyNames.add(name);
|
||||||
|
}
|
||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -753,7 +768,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen {
|
|||||||
|
|
||||||
patchPropertyVendorExtensions(property);
|
patchPropertyVendorExtensions(property);
|
||||||
|
|
||||||
property.name = patchPropertyName(model, property.name);
|
property.name = patchPropertyName(model, property.name, null);
|
||||||
|
|
||||||
String[] nestedTypes = {"List", "Collection", "ICollection", "Dictionary"};
|
String[] nestedTypes = {"List", "Collection", "ICollection", "Dictionary"};
|
||||||
|
|
||||||
|
@ -157,7 +157,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
|||||||
* -- SETTER --
|
* -- SETTER --
|
||||||
* Set whether discriminator value lookup is case-sensitive or not.
|
* Set whether discriminator value lookup is case-sensitive or not.
|
||||||
*
|
*
|
||||||
* @param discriminatorCaseSensitive true if the discriminator value lookup should be case-sensitive.
|
|
||||||
*/
|
*/
|
||||||
@Setter protected boolean discriminatorCaseSensitive = true;
|
@Setter protected boolean discriminatorCaseSensitive = true;
|
||||||
@Getter @Setter
|
@Getter @Setter
|
||||||
@ -2387,7 +2386,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
|||||||
operation.allParams.add(p);
|
operation.allParams.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
operation.hasParams = !operation.allParams.isEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldBeImplicitHeader(CodegenParameter parameter) {
|
private boolean shouldBeImplicitHeader(CodegenParameter parameter) {
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.openapitools.codegen.languages;
|
package org.openapitools.codegen.languages;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.models.media.Schema;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
@ -25,6 +26,7 @@ import org.openapitools.codegen.meta.GeneratorMetadata;
|
|||||||
import org.openapitools.codegen.meta.Stability;
|
import org.openapitools.codegen.meta.Stability;
|
||||||
import org.openapitools.codegen.meta.features.*;
|
import org.openapitools.codegen.meta.features.*;
|
||||||
import org.openapitools.codegen.model.ModelsMap;
|
import org.openapitools.codegen.model.ModelsMap;
|
||||||
|
import org.openapitools.codegen.utils.ModelUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -153,6 +155,25 @@ public class AvroSchemaCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the default value of the property
|
||||||
|
*
|
||||||
|
* @param p OpenAPI property object
|
||||||
|
* @return string presentation of the default value of the property
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toDefaultValue(Schema p) {
|
||||||
|
if (p.getDefault() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelUtils.isDateSchema(p) || ModelUtils.isDateTimeSchema(p) || ModelUtils.isStringSchema(p)) {
|
||||||
|
return "\"" + p.getDefault().toString() + "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
return p.getDefault().toString();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CodegenType getTag() {
|
public CodegenType getTag() {
|
||||||
return CodegenType.SCHEMA;
|
return CodegenType.SCHEMA;
|
||||||
|
@ -60,9 +60,9 @@ public class ElixirClientCodegen extends DefaultCodegen {
|
|||||||
String supportedElixirVersion = "1.18";
|
String supportedElixirVersion = "1.18";
|
||||||
List<String> extraApplications = Arrays.asList(":logger");
|
List<String> extraApplications = Arrays.asList(":logger");
|
||||||
List<String> deps = Arrays.asList(
|
List<String> deps = Arrays.asList(
|
||||||
"{:tesla, \"~> 1.7\"}",
|
"{:tesla, \"~> 1.14\"}",
|
||||||
"{:ex_doc, \"~> 0.30\", only: :dev, runtime: false}",
|
"{:ex_doc, \"~> 0.37.3\", only: :dev, runtime: false}",
|
||||||
"{:dialyxir, \"~> 1.3\", only: [:dev, :test], runtime: false}");
|
"{:dialyxir, \"~> 1.4\", only: [:dev, :test], runtime: false}");
|
||||||
|
|
||||||
public ElixirClientCodegen() {
|
public ElixirClientCodegen() {
|
||||||
super();
|
super();
|
||||||
@ -712,7 +712,6 @@ public class ElixirClientCodegen extends DefaultCodegen {
|
|||||||
this.hasAuthMethods = o.hasAuthMethods;
|
this.hasAuthMethods = o.hasAuthMethods;
|
||||||
this.hasConsumes = o.hasConsumes;
|
this.hasConsumes = o.hasConsumes;
|
||||||
this.hasProduces = o.hasProduces;
|
this.hasProduces = o.hasProduces;
|
||||||
this.hasParams = o.hasParams;
|
|
||||||
this.hasOptionalParams = o.hasOptionalParams;
|
this.hasOptionalParams = o.hasOptionalParams;
|
||||||
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
||||||
this.returnSimpleType = o.returnSimpleType;
|
this.returnSimpleType = o.returnSimpleType;
|
||||||
@ -722,12 +721,6 @@ public class ElixirClientCodegen extends DefaultCodegen {
|
|||||||
this.isMultipart = o.isMultipart;
|
this.isMultipart = o.isMultipart;
|
||||||
this.isResponseBinary = o.isResponseBinary;
|
this.isResponseBinary = o.isResponseBinary;
|
||||||
this.hasReference = o.hasReference;
|
this.hasReference = o.hasReference;
|
||||||
this.isRestfulIndex = o.isRestfulIndex;
|
|
||||||
this.isRestfulShow = o.isRestfulShow;
|
|
||||||
this.isRestfulCreate = o.isRestfulCreate;
|
|
||||||
this.isRestfulUpdate = o.isRestfulUpdate;
|
|
||||||
this.isRestfulDestroy = o.isRestfulDestroy;
|
|
||||||
this.isRestful = o.isRestful;
|
|
||||||
this.path = o.path;
|
this.path = o.path;
|
||||||
this.operationId = o.operationId;
|
this.operationId = o.operationId;
|
||||||
this.returnType = o.returnType;
|
this.returnType = o.returnType;
|
||||||
|
@ -417,7 +417,6 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
|
|||||||
this.hasAuthMethods = o.hasAuthMethods;
|
this.hasAuthMethods = o.hasAuthMethods;
|
||||||
this.hasConsumes = o.hasConsumes;
|
this.hasConsumes = o.hasConsumes;
|
||||||
this.hasProduces = o.hasProduces;
|
this.hasProduces = o.hasProduces;
|
||||||
this.hasParams = o.hasParams;
|
|
||||||
this.hasOptionalParams = o.hasOptionalParams;
|
this.hasOptionalParams = o.hasOptionalParams;
|
||||||
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
||||||
this.returnSimpleType = o.returnSimpleType;
|
this.returnSimpleType = o.returnSimpleType;
|
||||||
@ -429,12 +428,6 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
|
|||||||
this.isResponseFile = o.isResponseFile;
|
this.isResponseFile = o.isResponseFile;
|
||||||
this.isResponseOptional = o.isResponseOptional;
|
this.isResponseOptional = o.isResponseOptional;
|
||||||
this.hasReference = o.hasReference;
|
this.hasReference = o.hasReference;
|
||||||
this.isRestfulIndex = o.isRestfulIndex;
|
|
||||||
this.isRestfulShow = o.isRestfulShow;
|
|
||||||
this.isRestfulCreate = o.isRestfulCreate;
|
|
||||||
this.isRestfulUpdate = o.isRestfulUpdate;
|
|
||||||
this.isRestfulDestroy = o.isRestfulDestroy;
|
|
||||||
this.isRestful = o.isRestful;
|
|
||||||
this.path = o.path;
|
this.path = o.path;
|
||||||
this.operationId = o.operationId;
|
this.operationId = o.operationId;
|
||||||
this.returnType = o.returnType;
|
this.returnType = o.returnType;
|
||||||
|
@ -507,7 +507,6 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
|||||||
this.hasAuthMethods = o.hasAuthMethods;
|
this.hasAuthMethods = o.hasAuthMethods;
|
||||||
this.hasConsumes = o.hasConsumes;
|
this.hasConsumes = o.hasConsumes;
|
||||||
this.hasProduces = o.hasProduces;
|
this.hasProduces = o.hasProduces;
|
||||||
this.hasParams = o.hasParams;
|
|
||||||
this.hasOptionalParams = o.hasOptionalParams;
|
this.hasOptionalParams = o.hasOptionalParams;
|
||||||
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
||||||
this.returnSimpleType = o.returnSimpleType;
|
this.returnSimpleType = o.returnSimpleType;
|
||||||
@ -517,12 +516,6 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
|||||||
this.isMultipart = o.isMultipart;
|
this.isMultipart = o.isMultipart;
|
||||||
this.isResponseBinary = o.isResponseBinary;
|
this.isResponseBinary = o.isResponseBinary;
|
||||||
this.hasReference = o.hasReference;
|
this.hasReference = o.hasReference;
|
||||||
this.isRestfulIndex = o.isRestfulIndex;
|
|
||||||
this.isRestfulShow = o.isRestfulShow;
|
|
||||||
this.isRestfulCreate = o.isRestfulCreate;
|
|
||||||
this.isRestfulUpdate = o.isRestfulUpdate;
|
|
||||||
this.isRestfulDestroy = o.isRestfulDestroy;
|
|
||||||
this.isRestful = o.isRestful;
|
|
||||||
this.path = o.path;
|
this.path = o.path;
|
||||||
this.operationId = o.operationId;
|
this.operationId = o.operationId;
|
||||||
this.returnType = o.returnType;
|
this.returnType = o.returnType;
|
||||||
|
@ -137,6 +137,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
|||||||
@Setter protected String gradleProperties;
|
@Setter protected String gradleProperties;
|
||||||
@Setter protected String errorObjectType;
|
@Setter protected String errorObjectType;
|
||||||
@Getter @Setter protected boolean failOnUnknownProperties = false;
|
@Getter @Setter protected boolean failOnUnknownProperties = false;
|
||||||
|
@Setter protected boolean supportVertxFuture = false;
|
||||||
protected String authFolder;
|
protected String authFolder;
|
||||||
/**
|
/**
|
||||||
* Serialization library.
|
* Serialization library.
|
||||||
@ -244,7 +245,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
|||||||
cliOptions.add(CliOption.newBoolean(SUPPORT_URL_QUERY, "Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries."));
|
cliOptions.add(CliOption.newBoolean(SUPPORT_URL_QUERY, "Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries."));
|
||||||
cliOptions.add(CliOption.newBoolean(USE_ENUM_CASE_INSENSITIVE, "Use `equalsIgnoreCase` when String for enum comparison", useEnumCaseInsensitive));
|
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(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."));
|
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));
|
||||||
|
|
||||||
supportedLibraries.put(JERSEY2, "HTTP client: Jersey client 2.25.1. JSON processing: Jackson 2.17.1");
|
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");
|
supportedLibraries.put(JERSEY3, "HTTP client: Jersey client 3.1.1. JSON processing: Jackson 2.17.1");
|
||||||
@ -421,6 +422,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
|||||||
convertPropertyToStringAndWriteBack(ERROR_OBJECT_TYPE, this::setErrorObjectType);
|
convertPropertyToStringAndWriteBack(ERROR_OBJECT_TYPE, this::setErrorObjectType);
|
||||||
convertPropertyToBooleanAndWriteBack(WEBCLIENT_BLOCKING_OPERATIONS, op -> webclientBlockingOperations = op);
|
convertPropertyToBooleanAndWriteBack(WEBCLIENT_BLOCKING_OPERATIONS, op -> webclientBlockingOperations = op);
|
||||||
convertPropertyToBooleanAndWriteBack(FAIL_ON_UNKNOWN_PROPERTIES, this::setFailOnUnknownProperties);
|
convertPropertyToBooleanAndWriteBack(FAIL_ON_UNKNOWN_PROPERTIES, this::setFailOnUnknownProperties);
|
||||||
|
convertPropertyToBooleanAndWriteBack(SUPPORT_VERTX_FUTURE, this::setSupportVertxFuture);
|
||||||
|
|
||||||
// add URL query deepObject support to native, apache-httpclient by default
|
// add URL query deepObject support to native, apache-httpclient by default
|
||||||
if (!additionalProperties.containsKey(SUPPORT_URL_QUERY)) {
|
if (!additionalProperties.containsKey(SUPPORT_URL_QUERY)) {
|
||||||
@ -587,6 +589,9 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
|||||||
// The flag below should be set for all Java libraries, but the templates need to be ported
|
// The flag below should be set for all Java libraries, but the templates need to be ported
|
||||||
// one by one for each library.
|
// one by one for each library.
|
||||||
supportsAdditionalPropertiesWithComposedSchema = true;
|
supportsAdditionalPropertiesWithComposedSchema = true;
|
||||||
|
if (useJakartaEe) {
|
||||||
|
LOGGER.warn("Jersey 2 is not compatible with Jakarta EE. Please use Jersey 3 or set {} to false.", USE_JAKARTA_EE);
|
||||||
|
}
|
||||||
} else if (libJersey3) {
|
} else if (libJersey3) {
|
||||||
additionalProperties.put("jersey3", true);
|
additionalProperties.put("jersey3", true);
|
||||||
supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java"));
|
supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java"));
|
||||||
@ -603,6 +608,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
|
|||||||
// The flag below should be set for all Java libraries, but the templates need to be ported
|
// The flag below should be set for all Java libraries, but the templates need to be ported
|
||||||
// one by one for each library.
|
// one by one for each library.
|
||||||
supportsAdditionalPropertiesWithComposedSchema = true;
|
supportsAdditionalPropertiesWithComposedSchema = true;
|
||||||
|
setUseJakartaEe(true);
|
||||||
applyJakartaPackage();
|
applyJakartaPackage();
|
||||||
} else if (libNative) {
|
} else if (libNative) {
|
||||||
supportingFiles.add(new SupportingFile("ApiResponse.mustache", invokerFolder, "ApiResponse.java"));
|
supportingFiles.add(new SupportingFile("ApiResponse.mustache", invokerFolder, "ApiResponse.java"));
|
||||||
|
@ -40,6 +40,35 @@ import java.util.function.Predicate;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import com.samskivert.mustache.Mustache;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.openapitools.codegen.CliOption;
|
||||||
|
import org.openapitools.codegen.CodegenConstants;
|
||||||
|
import org.openapitools.codegen.CodegenModel;
|
||||||
|
import org.openapitools.codegen.CodegenOperation;
|
||||||
|
import org.openapitools.codegen.CodegenParameter;
|
||||||
|
import org.openapitools.codegen.CodegenProperty;
|
||||||
|
import org.openapitools.codegen.CodegenType;
|
||||||
|
import org.openapitools.codegen.SupportingFile;
|
||||||
|
import org.openapitools.codegen.VendorExtension;
|
||||||
|
import org.openapitools.codegen.meta.features.ClientModificationFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.DocumentationFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.GlobalFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.ParameterFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.SchemaSupportFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.SecurityFeature;
|
||||||
|
import org.openapitools.codegen.meta.features.WireFormatFeature;
|
||||||
|
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.ProcessUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import static java.util.Collections.sort;
|
import static java.util.Collections.sort;
|
||||||
|
|
||||||
public class KotlinClientCodegen extends AbstractKotlinCodegen {
|
public class KotlinClientCodegen extends AbstractKotlinCodegen {
|
||||||
@ -536,6 +565,10 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
|
|||||||
}
|
}
|
||||||
writer.write(content);
|
writer.write(content);
|
||||||
});
|
});
|
||||||
|
// When a path is added to a Javadoc, if it ends with a `/*` is will cause a compiler error
|
||||||
|
// as the parser interrupts that as a start of a multiline comment.
|
||||||
|
// We replace paths like `/v1/foo/*` with `/v1/foo/<*>` to avoid this
|
||||||
|
additionalProperties.put("sanitizePathComment", new ReplaceAllLambda("\\/\\*", "/<*>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processDateLibrary() {
|
private void processDateLibrary() {
|
||||||
|
@ -47,17 +47,28 @@ import static org.openapitools.codegen.utils.StringUtils.camelize;
|
|||||||
|
|
||||||
public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements BeanValidationFeatures {
|
public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements BeanValidationFeatures {
|
||||||
|
|
||||||
public static final String MODULE_CLASS_NAME = "moduleClassName";
|
|
||||||
|
|
||||||
private final Logger LOGGER = LoggerFactory.getLogger(KotlinMiskServerCodegen.class);
|
private final Logger LOGGER = LoggerFactory.getLogger(KotlinMiskServerCodegen.class);
|
||||||
|
|
||||||
|
public static final String MODULE_CLASS_NAME = "moduleClassName";
|
||||||
|
public static final String ACTION_PATH_PREFIX = "actionPathPrefix";
|
||||||
|
|
||||||
private static final String ROOT_PACKAGE = "rootPackage";
|
private static final String ROOT_PACKAGE = "rootPackage";
|
||||||
|
public static final String GENERATE_STUB_IMPL_CLASSES = "generateStubImplClasses";
|
||||||
|
public static final String ADD_MODEL_MOSHI_JSON_ANNOTATION = "addModelMoshiJsonAnnotation";
|
||||||
|
|
||||||
private boolean useBeanValidation = true;
|
private boolean useBeanValidation = true;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private boolean generateStubImplClasses = false;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private boolean addModelMoshiJsonAnnotation = true;
|
||||||
|
|
||||||
protected String rootPackage = "org.openapitools.server.api";
|
protected String rootPackage = "org.openapitools.server.api";
|
||||||
protected String apiVersion = "1.0.0-SNAPSHOT";
|
protected String apiVersion = "1.0.0-SNAPSHOT";
|
||||||
|
|
||||||
@Setter protected String moduleClassName = "OpenApiModule";
|
@Setter protected String moduleClassName = "OpenApiModule";
|
||||||
|
@Setter protected String actionPathPrefix = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CodegenType getTag() {
|
public CodegenType getTag() {
|
||||||
@ -78,10 +89,12 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
super();
|
super();
|
||||||
|
|
||||||
addSwitch(USE_BEANVALIDATION, "Use BeanValidation API annotations to validate data types", useBeanValidation);
|
addSwitch(USE_BEANVALIDATION, "Use BeanValidation API annotations to validate data types", useBeanValidation);
|
||||||
|
addSwitch(GENERATE_STUB_IMPL_CLASSES, "Generate Stub Impl Classes", generateStubImplClasses);
|
||||||
|
addSwitch(ADD_MODEL_MOSHI_JSON_ANNOTATION, "Add a Moshi JSON adapter annotation to all model classes", addModelMoshiJsonAnnotation);
|
||||||
|
|
||||||
modifyFeatureSet(features -> features
|
modifyFeatureSet(features -> features
|
||||||
.includeDocumentationFeatures(DocumentationFeature.Readme)
|
.includeDocumentationFeatures(DocumentationFeature.Readme)
|
||||||
.wireFormatFeatures(EnumSet.of(WireFormatFeature.PROTOBUF))
|
.wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.PROTOBUF))
|
||||||
.securityFeatures(EnumSet.noneOf(
|
.securityFeatures(EnumSet.noneOf(
|
||||||
SecurityFeature.class
|
SecurityFeature.class
|
||||||
))
|
))
|
||||||
@ -108,6 +121,7 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
outputFolder = "generated-code" + File.separator + "kotlin-misk";
|
outputFolder = "generated-code" + File.separator + "kotlin-misk";
|
||||||
|
|
||||||
addOption(MODULE_CLASS_NAME, "Name of the generated module class", moduleClassName);
|
addOption(MODULE_CLASS_NAME, "Name of the generated module class", moduleClassName);
|
||||||
|
addOption(ACTION_PATH_PREFIX, "Prefix for action path", actionPathPrefix);
|
||||||
|
|
||||||
apiTestTemplateFiles.clear();
|
apiTestTemplateFiles.clear();
|
||||||
apiTestTemplateFiles.put("api_test.mustache", ".kt");
|
apiTestTemplateFiles.put("api_test.mustache", ".kt");
|
||||||
@ -122,8 +136,12 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
|
|
||||||
apiTemplateFiles.clear();
|
apiTemplateFiles.clear();
|
||||||
apiTemplateFiles.put("apiAction.mustache", "Action.kt");
|
apiTemplateFiles.put("apiAction.mustache", "Action.kt");
|
||||||
apiTemplateFiles.put("apiImpl.mustache", "Impl.kt");
|
|
||||||
apiTemplateFiles.put("apiInterface.mustache", ".kt");
|
if (generateStubImplClasses) {
|
||||||
|
apiTemplateFiles.put("apiImpl.mustache", "Impl.kt");
|
||||||
|
apiTemplateFiles.put("apiInterface.mustache", ".kt");
|
||||||
|
}
|
||||||
|
|
||||||
modelTemplateFiles.put("model.mustache", ".kt");
|
modelTemplateFiles.put("model.mustache", ".kt");
|
||||||
|
|
||||||
apiPackage = rootPackage + ".api";
|
apiPackage = rootPackage + ".api";
|
||||||
@ -148,13 +166,27 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
if (additionalProperties.containsKey(MODULE_CLASS_NAME)) {
|
if (additionalProperties.containsKey(MODULE_CLASS_NAME)) {
|
||||||
setModuleClassName((String) additionalProperties.get(MODULE_CLASS_NAME));
|
setModuleClassName((String) additionalProperties.get(MODULE_CLASS_NAME));
|
||||||
}
|
}
|
||||||
additionalProperties.put(MODULE_CLASS_NAME, moduleClassName);
|
writePropertyBack(MODULE_CLASS_NAME, moduleClassName);
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(ACTION_PATH_PREFIX)) {
|
||||||
|
setActionPathPrefix((String) additionalProperties.get(ACTION_PATH_PREFIX));
|
||||||
|
}
|
||||||
|
writePropertyBack(ACTION_PATH_PREFIX, actionPathPrefix);
|
||||||
|
|
||||||
if (additionalProperties.containsKey(USE_BEANVALIDATION)) {
|
if (additionalProperties.containsKey(USE_BEANVALIDATION)) {
|
||||||
this.setUseBeanValidation(convertPropertyToBoolean(USE_BEANVALIDATION));
|
this.setUseBeanValidation(convertPropertyToBoolean(USE_BEANVALIDATION));
|
||||||
}
|
}
|
||||||
writePropertyBack(USE_BEANVALIDATION, useBeanValidation);
|
writePropertyBack(USE_BEANVALIDATION, useBeanValidation);
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(GENERATE_STUB_IMPL_CLASSES)) {
|
||||||
|
setGenerateStubImplClasses(convertPropertyToBoolean(GENERATE_STUB_IMPL_CLASSES));
|
||||||
|
}
|
||||||
|
writePropertyBack(GENERATE_STUB_IMPL_CLASSES, generateStubImplClasses);
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(ADD_MODEL_MOSHI_JSON_ANNOTATION)) {
|
||||||
|
setAddModelMoshiJsonAnnotation(convertPropertyToBoolean(ADD_MODEL_MOSHI_JSON_ANNOTATION));
|
||||||
|
}
|
||||||
|
writePropertyBack(ADD_MODEL_MOSHI_JSON_ANNOTATION, addModelMoshiJsonAnnotation);
|
||||||
applyJakartaPackage();
|
applyJakartaPackage();
|
||||||
|
|
||||||
String apiModuleFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator);
|
String apiModuleFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator);
|
||||||
@ -211,6 +243,7 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
result.put("application/grpc", "MediaTypes.APPLICATION_GRPC");
|
result.put("application/grpc", "MediaTypes.APPLICATION_GRPC");
|
||||||
result.put("application/javascript", "MediaTypes.APPLICATION_JAVASCRIPT");
|
result.put("application/javascript", "MediaTypes.APPLICATION_JAVASCRIPT");
|
||||||
result.put("application/json", "MediaTypes.APPLICATION_JSON");
|
result.put("application/json", "MediaTypes.APPLICATION_JSON");
|
||||||
|
result.put("application/jwt", "MediaTypes.APPLICATION_JWT");
|
||||||
result.put("application/octetstream", "MediaTypes.APPLICATION_OCTETSTREAM");
|
result.put("application/octetstream", "MediaTypes.APPLICATION_OCTETSTREAM");
|
||||||
result.put("application/pdf", "MediaTypes.APPLICATION_OCTETSTREAM");
|
result.put("application/pdf", "MediaTypes.APPLICATION_OCTETSTREAM");
|
||||||
result.put("application/x-protobuf", "MediaTypes.APPLICATION_PROTOBUF");
|
result.put("application/x-protobuf", "MediaTypes.APPLICATION_PROTOBUF");
|
||||||
@ -219,10 +252,11 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
|
|||||||
result.put("application/zip", "MediaTypes.APPLICATION_ZIP");
|
result.put("application/zip", "MediaTypes.APPLICATION_ZIP");
|
||||||
|
|
||||||
result.put("image/gif", "MediaTypes.IMAGE_GIF");
|
result.put("image/gif", "MediaTypes.IMAGE_GIF");
|
||||||
|
result.put("image/x-icon", "MediaTypes.IMAGE_ICO");
|
||||||
result.put("image/jpeg", "MediaTypes.IMAGE_JPEG");
|
result.put("image/jpeg", "MediaTypes.IMAGE_JPEG");
|
||||||
result.put("image/png", "MediaTypes.IMAGE_PNG");
|
result.put("image/png", "MediaTypes.IMAGE_PNG");
|
||||||
result.put("image/svg+xml", "MediaTypes.IMAGE_SVG");
|
result.put("image/svg+xml", "MediaTypes.IMAGE_SVG");
|
||||||
result.put("image/x-icon", "MediaTypes.IMAGE_ICO");
|
result.put("image/tiff", "MediaTypes.IMAGE_TIFF");
|
||||||
|
|
||||||
result.put("multipart/form-data", "MediaTypes.FORM_DATA");
|
result.put("multipart/form-data", "MediaTypes.FORM_DATA");
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public class ScalaAkkaHttpServerCodegen extends AbstractScalaCodegen implements
|
|||||||
public static final String AKKA_HTTP_VERSION_DESC = "The version of akka-http";
|
public static final String AKKA_HTTP_VERSION_DESC = "The version of akka-http";
|
||||||
public static final String PEKKO_HTTP_VERSION = "pekkoHttpVersion";
|
public static final String PEKKO_HTTP_VERSION = "pekkoHttpVersion";
|
||||||
public static final String PEKKO_HTTP_VERSION_DESC = "The version of pekko-http";
|
public static final String PEKKO_HTTP_VERSION_DESC = "The version of pekko-http";
|
||||||
public static final String DEFAULT_AKKA_HTTP_VERSION = "10.1.10";
|
public static final String DEFAULT_AKKA_HTTP_VERSION = "10.2.9";
|
||||||
public static final String DEFAULT_PEKKO_HTTP_VERSION = "1.1.0";
|
public static final String DEFAULT_PEKKO_HTTP_VERSION = "1.1.0";
|
||||||
|
|
||||||
public static final String GENERATE_AS_MANAGED_SOURCES = "asManagedSources";
|
public static final String GENERATE_AS_MANAGED_SOURCES = "asManagedSources";
|
||||||
|
@ -1271,7 +1271,6 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
|
|||||||
this.exclusiveMaximum = cp.exclusiveMaximum;
|
this.exclusiveMaximum = cp.exclusiveMaximum;
|
||||||
this.required = cp.required;
|
this.required = cp.required;
|
||||||
this.deprecated = cp.deprecated;
|
this.deprecated = cp.deprecated;
|
||||||
this.hasMoreNonReadOnly = cp.hasMoreNonReadOnly;
|
|
||||||
this.isPrimitiveType = cp.isPrimitiveType;
|
this.isPrimitiveType = cp.isPrimitiveType;
|
||||||
this.isModel = cp.isModel;
|
this.isModel = cp.isModel;
|
||||||
this.isContainer = cp.isContainer;
|
this.isContainer = cp.isContainer;
|
||||||
@ -1379,9 +1378,7 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
|
|||||||
this.hasAuthMethods = o.hasAuthMethods;
|
this.hasAuthMethods = o.hasAuthMethods;
|
||||||
this.hasConsumes = o.hasConsumes;
|
this.hasConsumes = o.hasConsumes;
|
||||||
this.hasProduces = o.hasProduces;
|
this.hasProduces = o.hasProduces;
|
||||||
this.hasParams = o.hasParams;
|
|
||||||
this.hasOptionalParams = o.hasOptionalParams;
|
this.hasOptionalParams = o.hasOptionalParams;
|
||||||
this.hasRequiredParams = o.hasRequiredParams;
|
|
||||||
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
||||||
this.returnSimpleType = o.returnSimpleType;
|
this.returnSimpleType = o.returnSimpleType;
|
||||||
this.subresourceOperation = o.subresourceOperation;
|
this.subresourceOperation = o.subresourceOperation;
|
||||||
@ -1392,12 +1389,6 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
|
|||||||
this.isResponseFile = o.isResponseFile;
|
this.isResponseFile = o.isResponseFile;
|
||||||
this.isResponseOptional = o.isResponseOptional;
|
this.isResponseOptional = o.isResponseOptional;
|
||||||
this.hasReference = o.hasReference;
|
this.hasReference = o.hasReference;
|
||||||
this.isRestfulIndex = o.isRestfulIndex;
|
|
||||||
this.isRestfulShow = o.isRestfulShow;
|
|
||||||
this.isRestfulCreate = o.isRestfulCreate;
|
|
||||||
this.isRestfulUpdate = o.isRestfulUpdate;
|
|
||||||
this.isRestfulDestroy = o.isRestfulDestroy;
|
|
||||||
this.isRestful = o.isRestful;
|
|
||||||
this.isDeprecated = o.isDeprecated;
|
this.isDeprecated = o.isDeprecated;
|
||||||
this.isCallbackRequest = o.isCallbackRequest;
|
this.isCallbackRequest = o.isCallbackRequest;
|
||||||
this.uniqueItems = o.uniqueItems;
|
this.uniqueItems = o.uniqueItems;
|
||||||
|
@ -348,9 +348,7 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
|
|||||||
this.hasAuthMethods = o.hasAuthMethods;
|
this.hasAuthMethods = o.hasAuthMethods;
|
||||||
this.hasConsumes = o.hasConsumes;
|
this.hasConsumes = o.hasConsumes;
|
||||||
this.hasProduces = o.hasProduces;
|
this.hasProduces = o.hasProduces;
|
||||||
this.hasParams = o.hasParams;
|
|
||||||
this.hasOptionalParams = o.hasOptionalParams;
|
this.hasOptionalParams = o.hasOptionalParams;
|
||||||
this.hasRequiredParams = o.hasRequiredParams;
|
|
||||||
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
|
||||||
this.returnSimpleType = o.returnSimpleType;
|
this.returnSimpleType = o.returnSimpleType;
|
||||||
this.subresourceOperation = o.subresourceOperation;
|
this.subresourceOperation = o.subresourceOperation;
|
||||||
@ -360,12 +358,6 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
|
|||||||
this.isResponseBinary = o.isResponseBinary;
|
this.isResponseBinary = o.isResponseBinary;
|
||||||
this.isResponseFile = o.isResponseFile;
|
this.isResponseFile = o.isResponseFile;
|
||||||
this.hasReference = o.hasReference;
|
this.hasReference = o.hasReference;
|
||||||
this.isRestfulIndex = o.isRestfulIndex;
|
|
||||||
this.isRestfulShow = o.isRestfulShow;
|
|
||||||
this.isRestfulCreate = o.isRestfulCreate;
|
|
||||||
this.isRestfulUpdate = o.isRestfulUpdate;
|
|
||||||
this.isRestfulDestroy = o.isRestfulDestroy;
|
|
||||||
this.isRestful = o.isRestful;
|
|
||||||
this.isDeprecated = o.isDeprecated;
|
this.isDeprecated = o.isDeprecated;
|
||||||
this.isCallbackRequest = o.isCallbackRequest;
|
this.isCallbackRequest = o.isCallbackRequest;
|
||||||
this.path = o.path;
|
this.path = o.path;
|
||||||
|
@ -24,8 +24,8 @@ public class TemplateManagerOptions {
|
|||||||
/**
|
/**
|
||||||
* Constructs a new instance of {@link TemplateManagerOptions}
|
* Constructs a new instance of {@link TemplateManagerOptions}
|
||||||
*
|
*
|
||||||
* @param minimalUpdate See {@link #isMinimalUpdate()}
|
* @param minimalUpdate Minimal update
|
||||||
* @param skipOverwrite See {@link #isSkipOverwrite()}
|
* @param skipOverwrite Skip overwrite
|
||||||
*/
|
*/
|
||||||
public TemplateManagerOptions(boolean minimalUpdate, boolean skipOverwrite) {
|
public TemplateManagerOptions(boolean minimalUpdate, boolean skipOverwrite) {
|
||||||
this.minimalUpdate = minimalUpdate;
|
this.minimalUpdate = minimalUpdate;
|
||||||
|
@ -2243,6 +2243,23 @@ public class ModelUtils {
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes duplicate `oneOf` from a given schema if it does not also have a discriminator.
|
||||||
|
*
|
||||||
|
* @param schema Schema
|
||||||
|
*/
|
||||||
|
public static void deduplicateOneOfSchema(Schema<?> schema) {
|
||||||
|
if (schema.getOneOf() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (schema.getDiscriminator() != null) {
|
||||||
|
return; // Duplicate oneOf are allowed if there is a discriminator that can be used to separate them.
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Schema> deduplicated = new LinkedHashSet<>(schema.getOneOf());
|
||||||
|
schema.setOneOf(new ArrayList<>(deduplicated));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the schema is of type 'null' or schema itself is pointing to null
|
* Check if the schema is of type 'null' or schema itself is pointing to null
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -65,9 +65,9 @@ import {{invokerPackage}}.auth.OAuth;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||||
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
||||||
{{/-first}} new ServerConfiguration(
|
{{/-first}} new ServerConfiguration(
|
||||||
"{{{url}}}",
|
"{{{url}}}",
|
||||||
@ -95,18 +95,18 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
){{/-last}}{{/servers}});
|
){{/-last}}{{/servers}});
|
||||||
protected Integer serverIndex = 0;
|
protected Integer serverIndex = 0;
|
||||||
protected Map<String, String> serverVariables = null;
|
protected Map<String, String> serverVariables = null;
|
||||||
private boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
private int connectionTimeout = 0;
|
protected int connectionTimeout = 0;
|
||||||
|
|
||||||
private Client httpClient;
|
protected Client httpClient;
|
||||||
private ObjectMapper objectMapper;
|
protected ObjectMapper objectMapper;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
private int statusCode;
|
protected int statusCode;
|
||||||
private Map<String, List<String>> responseHeaders;
|
protected Map<String, List<String>> responseHeaders;
|
||||||
|
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
objectMapper = new ObjectMapper();
|
objectMapper = new ObjectMapper();
|
||||||
@ -688,7 +688,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param collectionQueryParams The collection query parameters
|
* @param collectionQueryParams The collection query parameters
|
||||||
* @return The full URL
|
* @return The full URL
|
||||||
*/
|
*/
|
||||||
private String buildUrl(String path, List<Pair> queryParams, List<Pair> collectionQueryParams) {
|
protected String buildUrl(String path, List<Pair> queryParams, List<Pair> collectionQueryParams) {
|
||||||
String baseURL;
|
String baseURL;
|
||||||
if (serverIndex != null) {
|
if (serverIndex != null) {
|
||||||
if (serverIndex < 0 || serverIndex >= servers.size()) {
|
if (serverIndex < 0 || serverIndex >= servers.size()) {
|
||||||
@ -741,7 +741,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return url.toString();
|
return url.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClientResponse getAPIResponse(String path, String method, List<Pair> queryParams, List<Pair> collectionQueryParams, Object body, Map<String, String> headerParams, Map<String, String> cookieParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames) throws ApiException {
|
protected ClientResponse getAPIResponse(String path, String method, List<Pair> queryParams, List<Pair> collectionQueryParams, Object body, Map<String, String> headerParams, Map<String, String> cookieParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames) throws ApiException {
|
||||||
if (body != null && !formParams.isEmpty()) {
|
if (body != null && !formParams.isEmpty()) {
|
||||||
throw new ApiException(500, "Cannot have body and form params");
|
throw new ApiException(500, "Cannot have body and form params");
|
||||||
}
|
}
|
||||||
@ -854,7 +854,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param headerParams Header parameters
|
* @param headerParams Header parameters
|
||||||
* @param cookieParams Cookie parameters
|
* @param cookieParams Cookie parameters
|
||||||
*/
|
*/
|
||||||
private void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
protected void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
||||||
for (String authName : authNames) {
|
for (String authName : authNames) {
|
||||||
Authentication auth = authentications.get(authName);
|
Authentication auth = authentications.get(authName);
|
||||||
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
||||||
@ -867,7 +867,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param formParams Form parameters
|
* @param formParams Form parameters
|
||||||
* @return HTTP form encoded parameters
|
* @return HTTP form encoded parameters
|
||||||
*/
|
*/
|
||||||
private String getXWWWFormUrlencodedParams(Map<String, Object> formParams) {
|
protected String getXWWWFormUrlencodedParams(Map<String, Object> formParams) {
|
||||||
StringBuilder formParamBuilder = new StringBuilder();
|
StringBuilder formParamBuilder = new StringBuilder();
|
||||||
|
|
||||||
for (Entry<String, Object> param : formParams.entrySet()) {
|
for (Entry<String, Object> param : formParams.entrySet()) {
|
||||||
|
@ -19,7 +19,7 @@ import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class RFC3339InstantDeserializer<T extends Temporal> extends InstantDeserializer<T> {
|
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();
|
private final static boolean DEFAULT_NORMALIZE_ZONE_ID = JavaTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault();
|
||||||
private final static boolean DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS
|
private final static boolean DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS
|
||||||
= JavaTimeFeature.ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS.enabledByDefault();
|
= JavaTimeFeature.ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS.enabledByDefault();
|
||||||
|
@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class RFC3339JavaTimeModule extends SimpleModule {
|
public class RFC3339JavaTimeModule extends SimpleModule {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public RFC3339JavaTimeModule() {
|
public RFC3339JavaTimeModule() {
|
||||||
super("RFC3339JavaTimeModule");
|
super("RFC3339JavaTimeModule");
|
||||||
|
@ -87,9 +87,9 @@ import {{invokerPackage}}.auth.OAuth;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||||
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
||||||
{{/-first}} new ServerConfiguration(
|
{{/-first}} new ServerConfiguration(
|
||||||
"{{{url}}}",
|
"{{{url}}}",
|
||||||
@ -117,22 +117,22 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
){{/-last}}{{/servers}});
|
){{/-last}}{{/servers}});
|
||||||
protected Integer serverIndex = 0;
|
protected Integer serverIndex = 0;
|
||||||
protected Map<String, String> serverVariables = null;
|
protected Map<String, String> serverVariables = null;
|
||||||
private boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
private int connectionTimeout = 0;
|
protected int connectionTimeout = 0;
|
||||||
|
|
||||||
private CloseableHttpClient httpClient;
|
protected CloseableHttpClient httpClient;
|
||||||
private ObjectMapper objectMapper;
|
protected ObjectMapper objectMapper;
|
||||||
protected String tempFolderPath = null;
|
protected String tempFolderPath = null;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
private Map<Long, Integer> lastStatusCodeByThread = new ConcurrentHashMap<>();
|
protected Map<Long, Integer> lastStatusCodeByThread = new ConcurrentHashMap<>();
|
||||||
private Map<Long, Map<String, List<String>>> lastResponseHeadersByThread = new ConcurrentHashMap<>();
|
protected Map<Long, Map<String, List<String>>> lastResponseHeadersByThread = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
|
|
||||||
// Methods that can have a request body
|
// Methods that can have a request body
|
||||||
private static List<String> bodyMethods = Arrays.asList("POST", "PUT", "DELETE", "PATCH");
|
protected static List<String> bodyMethods = Arrays.asList("POST", "PUT", "DELETE", "PATCH");
|
||||||
|
|
||||||
public ApiClient(CloseableHttpClient httpClient) {
|
public ApiClient(CloseableHttpClient httpClient) {
|
||||||
objectMapper = new ObjectMapper();
|
objectMapper = new ObjectMapper();
|
||||||
@ -757,7 +757,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
/**
|
/**
|
||||||
* Parse content type object from header value
|
* Parse content type object from header value
|
||||||
*/
|
*/
|
||||||
private ContentType getContentType(String headerValue) throws ApiException {
|
protected ContentType getContentType(String headerValue) throws ApiException {
|
||||||
try {
|
try {
|
||||||
return ContentType.parse(headerValue);
|
return ContentType.parse(headerValue);
|
||||||
} catch (UnsupportedCharsetException e) {
|
} catch (UnsupportedCharsetException e) {
|
||||||
@ -768,7 +768,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
/**
|
/**
|
||||||
* Get content type of a response or null if one was not provided
|
* Get content type of a response or null if one was not provided
|
||||||
*/
|
*/
|
||||||
private String getResponseMimeType(HttpResponse response) throws ApiException {
|
protected String getResponseMimeType(HttpResponse response) throws ApiException {
|
||||||
Header contentTypeHeader = response.getFirstHeader("Content-Type");
|
Header contentTypeHeader = response.getFirstHeader("Content-Type");
|
||||||
if (contentTypeHeader != null) {
|
if (contentTypeHeader != null) {
|
||||||
return getContentType(contentTypeHeader.getValue()).getMimeType();
|
return getContentType(contentTypeHeader.getValue()).getMimeType();
|
||||||
@ -877,7 +877,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private File downloadFileFromResponse(CloseableHttpResponse response) throws IOException {
|
protected File downloadFileFromResponse(CloseableHttpResponse response) throws IOException {
|
||||||
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition");
|
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition");
|
||||||
String contentDisposition = contentDispositionHeader == null ? null : contentDispositionHeader.getValue();
|
String contentDisposition = contentDispositionHeader == null ? null : contentDispositionHeader.getValue();
|
||||||
File file = prepareDownloadFile(contentDisposition);
|
File file = prepareDownloadFile(contentDisposition);
|
||||||
@ -948,7 +948,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param urlQueryDeepObject URL query string of the deep object parameters
|
* @param urlQueryDeepObject URL query string of the deep object parameters
|
||||||
* @return The full URL
|
* @return The full URL
|
||||||
*/
|
*/
|
||||||
private String buildUrl(String path, List<Pair> queryParams, List<Pair> collectionQueryParams, String urlQueryDeepObject) {
|
protected String buildUrl(String path, List<Pair> queryParams, List<Pair> collectionQueryParams, String urlQueryDeepObject) {
|
||||||
String baseURL = getBaseURL();
|
String baseURL = getBaseURL();
|
||||||
|
|
||||||
final StringBuilder url = new StringBuilder();
|
final StringBuilder url = new StringBuilder();
|
||||||
@ -1127,7 +1127,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param headerParams Header parameters
|
* @param headerParams Header parameters
|
||||||
* @param cookieParams Cookie parameters
|
* @param cookieParams Cookie parameters
|
||||||
*/
|
*/
|
||||||
private void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
protected void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
||||||
for (String authName : authNames) {
|
for (String authName : authNames) {
|
||||||
Authentication auth = authentications.get(authName);
|
Authentication auth = authentications.get(authName);
|
||||||
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
||||||
|
@ -54,16 +54,16 @@ import feign.Retryer;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
private static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
protected static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
||||||
|
|
||||||
public interface Api {}
|
public interface Api {}
|
||||||
|
|
||||||
{{#jackson}}
|
{{#jackson}}
|
||||||
protected ObjectMapper objectMapper;
|
protected ObjectMapper objectMapper;
|
||||||
{{/jackson}}
|
{{/jackson}}
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
private Map<String, RequestInterceptor> apiAuthorizations;
|
protected Map<String, RequestInterceptor> apiAuthorizations;
|
||||||
private Feign.Builder feignBuilder;
|
protected Feign.Builder feignBuilder;
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
apiAuthorizations = new LinkedHashMap<String, RequestInterceptor>();
|
apiAuthorizations = new LinkedHashMap<String, RequestInterceptor>();
|
||||||
@ -167,7 +167,7 @@ public class ApiClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{{#jackson}}
|
{{#jackson}}
|
||||||
private ObjectMapper createObjectMapper() {
|
protected ObjectMapper createObjectMapper() {
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
|
objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
|
||||||
objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
|
objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
|
||||||
@ -194,7 +194,7 @@ public class ApiClient {
|
|||||||
{{/jackson}}
|
{{/jackson}}
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
{{#hasOAuthMethods}}
|
||||||
private RequestInterceptor buildOauthRequestInterceptor(OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
|
protected RequestInterceptor buildOauthRequestInterceptor(OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
|
||||||
switch (flow) {
|
switch (flow) {
|
||||||
case PASSWORD:
|
case PASSWORD:
|
||||||
return new OauthPasswordGrant(tokenUrl, scopes);
|
return new OauthPasswordGrant(tokenUrl, scopes);
|
||||||
@ -375,7 +375,7 @@ public class ApiClient {
|
|||||||
feignBuilder.requestInterceptor(authorization);
|
feignBuilder.requestInterceptor(authorization);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends RequestInterceptor> T getAuthorization(Class<T> type) {
|
protected <T extends RequestInterceptor> T getAuthorization(Class<T> type) {
|
||||||
return (T) apiAuthorizations.values()
|
return (T) apiAuthorizations.values()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(requestInterceptor -> type.isAssignableFrom(requestInterceptor.getClass()))
|
.filter(requestInterceptor -> type.isAssignableFrom(requestInterceptor.getClass()))
|
||||||
|
@ -25,14 +25,14 @@ import java.io.OutputStream;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
private final String basePath;
|
protected final String basePath;
|
||||||
private final HttpRequestFactory httpRequestFactory;
|
protected final HttpRequestFactory httpRequestFactory;
|
||||||
private final ObjectMapper objectMapper;
|
protected final ObjectMapper objectMapper;
|
||||||
|
|
||||||
private static final String defaultBasePath = "{{basePath}}";
|
protected static final String defaultBasePath = "{{basePath}}";
|
||||||
|
|
||||||
// A reasonable default object mapper. Client can pass in a chosen ObjectMapper anyway, this is just for reasonable defaults.
|
// A reasonable default object mapper. Client can pass in a chosen ObjectMapper anyway, this is just for reasonable defaults.
|
||||||
private static ObjectMapper createDefaultObjectMapper() {
|
protected static ObjectMapper createDefaultObjectMapper() {
|
||||||
ObjectMapper objectMapper = new ObjectMapper()
|
ObjectMapper objectMapper = new ObjectMapper()
|
||||||
{{#failOnUnknownProperties}}
|
{{#failOnUnknownProperties}}
|
||||||
.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
|
.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
|
||||||
@ -84,7 +84,7 @@ public class ApiClient {
|
|||||||
|
|
||||||
public class JacksonJsonHttpContent extends AbstractHttpContent {
|
public class JacksonJsonHttpContent extends AbstractHttpContent {
|
||||||
/* A POJO that can be serialized with a com.fasterxml Jackson ObjectMapper */
|
/* A POJO that can be serialized with a com.fasterxml Jackson ObjectMapper */
|
||||||
private final Object data;
|
protected final Object data;
|
||||||
|
|
||||||
public JacksonJsonHttpContent(Object data) {
|
public JacksonJsonHttpContent(Object data) {
|
||||||
super(Json.MEDIA_TYPE);
|
super(Json.MEDIA_TYPE);
|
||||||
|
@ -85,13 +85,13 @@ import {{invokerPackage}}.auth.OAuth;
|
|||||||
*/
|
*/
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
private static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
protected static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
||||||
|
|
||||||
protected Map<String, String> defaultHeaderMap = new HashMap<>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<>();
|
||||||
protected Map<String, String> defaultCookieMap = new HashMap<>();
|
protected Map<String, String> defaultCookieMap = new HashMap<>();
|
||||||
protected String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
protected String userAgent;
|
protected String userAgent;
|
||||||
private static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
protected static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
||||||
|
|
||||||
protected List<ServerConfiguration> servers = new ArrayList<>({{#servers}}{{#-first}}Arrays.asList(
|
protected List<ServerConfiguration> servers = new ArrayList<>({{#servers}}{{#-first}}Arrays.asList(
|
||||||
{{/-first}} new ServerConfiguration(
|
{{/-first}} new ServerConfiguration(
|
||||||
@ -175,7 +175,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
protected boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
protected ClientConfig clientConfig;
|
protected ClientConfig clientConfig;
|
||||||
protected int connectionTimeout = 0;
|
protected int connectionTimeout = 0;
|
||||||
private int readTimeout = 0;
|
protected int readTimeout = 0;
|
||||||
|
|
||||||
protected Client httpClient;
|
protected Client httpClient;
|
||||||
protected JSON json;
|
protected JSON json;
|
||||||
@ -373,14 +373,14 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBasePath() {
|
protected void updateBasePath() {
|
||||||
if (serverIndex != null) {
|
if (serverIndex != null) {
|
||||||
setBasePath(servers.get(serverIndex).URL(serverVariables));
|
setBasePath(servers.get(serverIndex).URL(serverVariables));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
{{#hasOAuthMethods}}
|
||||||
private void setOauthBasePath(String basePath) {
|
protected void setOauthBasePath(String basePath) {
|
||||||
for(Authentication auth : authentications.values()) {
|
for(Authentication auth : authentications.values()) {
|
||||||
if (auth instanceof OAuth) {
|
if (auth instanceof OAuth) {
|
||||||
((OAuth) auth).setBasePath(basePath);
|
((OAuth) auth).setBasePath(basePath);
|
||||||
@ -1021,7 +1021,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the object with the provided key to the MultiPart.
|
* Adds the object with the provided key to the MultiPart.
|
||||||
* Based on the object type sets Content-Disposition and Content-Type.
|
* Based on the object type sets Content-Disposition and Content-Type.
|
||||||
*
|
*
|
||||||
@ -1029,7 +1029,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param key Key of the object
|
* @param key Key of the object
|
||||||
* @param multiPart MultiPart to add the form param to
|
* @param multiPart MultiPart to add the form param to
|
||||||
*/
|
*/
|
||||||
private void addParamToMultipart(Object value, String key, MultiPart multiPart) {
|
protected void addParamToMultipart(Object value, String key, MultiPart multiPart) {
|
||||||
if (value instanceof File) {
|
if (value instanceof File) {
|
||||||
File file = (File) value;
|
File file = (File) value;
|
||||||
FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key)
|
FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key)
|
||||||
@ -1350,7 +1350,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity<?> entity) {
|
protected Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity<?> entity) {
|
||||||
Response response;
|
Response response;
|
||||||
if ("POST".equals(method)) {
|
if ("POST".equals(method)) {
|
||||||
response = invocationBuilder.post(entity);
|
response = invocationBuilder.post(entity);
|
||||||
@ -1412,7 +1412,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return clientConfig;
|
return clientConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyDebugSetting(ClientConfig clientConfig) {
|
protected void applyDebugSetting(ClientConfig clientConfig) {
|
||||||
if (debugging) {
|
if (debugging) {
|
||||||
clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */));
|
clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */));
|
||||||
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY);
|
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY);
|
||||||
|
@ -85,13 +85,13 @@ import {{invokerPackage}}.auth.OAuth;
|
|||||||
*/
|
*/
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
private static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
protected static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
||||||
|
|
||||||
protected Map<String, String> defaultHeaderMap = new HashMap<>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<>();
|
||||||
protected Map<String, String> defaultCookieMap = new HashMap<>();
|
protected Map<String, String> defaultCookieMap = new HashMap<>();
|
||||||
protected String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
protected String userAgent;
|
protected String userAgent;
|
||||||
private static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
protected static final Logger log = Logger.getLogger(ApiClient.class.getName());
|
||||||
|
|
||||||
protected List<ServerConfiguration> servers = new ArrayList<>({{#servers}}{{#-first}}Arrays.asList(
|
protected List<ServerConfiguration> servers = new ArrayList<>({{#servers}}{{#-first}}Arrays.asList(
|
||||||
{{/-first}} new ServerConfiguration(
|
{{/-first}} new ServerConfiguration(
|
||||||
@ -175,7 +175,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
protected boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
protected ClientConfig clientConfig;
|
protected ClientConfig clientConfig;
|
||||||
protected int connectionTimeout = 0;
|
protected int connectionTimeout = 0;
|
||||||
private int readTimeout = 0;
|
protected int readTimeout = 0;
|
||||||
|
|
||||||
protected Client httpClient;
|
protected Client httpClient;
|
||||||
protected JSON json;
|
protected JSON json;
|
||||||
@ -373,14 +373,14 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBasePath() {
|
protected void updateBasePath() {
|
||||||
if (serverIndex != null) {
|
if (serverIndex != null) {
|
||||||
setBasePath(servers.get(serverIndex).URL(serverVariables));
|
setBasePath(servers.get(serverIndex).URL(serverVariables));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
{{#hasOAuthMethods}}
|
||||||
private void setOauthBasePath(String basePath) {
|
protected void setOauthBasePath(String basePath) {
|
||||||
for(Authentication auth : authentications.values()) {
|
for(Authentication auth : authentications.values()) {
|
||||||
if (auth instanceof OAuth) {
|
if (auth instanceof OAuth) {
|
||||||
((OAuth) auth).setBasePath(basePath);
|
((OAuth) auth).setBasePath(basePath);
|
||||||
@ -1029,7 +1029,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param key Key of the object
|
* @param key Key of the object
|
||||||
* @param multiPart MultiPart to add the form param to
|
* @param multiPart MultiPart to add the form param to
|
||||||
*/
|
*/
|
||||||
private void addParamToMultipart(Object value, String key, MultiPart multiPart) {
|
protected void addParamToMultipart(Object value, String key, MultiPart multiPart) {
|
||||||
if (value instanceof File) {
|
if (value instanceof File) {
|
||||||
File file = (File) value;
|
File file = (File) value;
|
||||||
FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key)
|
FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key)
|
||||||
@ -1350,7 +1350,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity<?> entity) {
|
protected Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity<?> entity) {
|
||||||
Response response;
|
Response response;
|
||||||
if ("POST".equals(method)) {
|
if ("POST".equals(method)) {
|
||||||
response = invocationBuilder.post(entity);
|
response = invocationBuilder.post(entity);
|
||||||
@ -1386,7 +1386,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
protected Client buildHttpClient() {
|
protected Client buildHttpClient() {
|
||||||
// Create ClientConfig if it has not been initialized yet
|
// Create ClientConfig if it has not been initialized yet
|
||||||
if (clientConfig == null) {
|
if (clientConfig == null) {
|
||||||
clientConfig = getDefaultClientConfig();
|
clientConfig = getDefaultClientConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientBuilder clientBuilder = ClientBuilder.newBuilder();
|
ClientBuilder clientBuilder = ClientBuilder.newBuilder();
|
||||||
@ -1412,7 +1412,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return clientConfig;
|
return clientConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyDebugSetting(ClientConfig clientConfig) {
|
protected void applyDebugSetting(ClientConfig clientConfig) {
|
||||||
if (debugging) {
|
if (debugging) {
|
||||||
clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */));
|
clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */));
|
||||||
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY);
|
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY);
|
||||||
|
@ -12,8 +12,8 @@ import {{javaxPackage}}.ws.rs.core.GenericType;
|
|||||||
{{/imports}}
|
{{/imports}}
|
||||||
|
|
||||||
{{#useBeanValidation}}
|
{{#useBeanValidation}}
|
||||||
import jakarta.validation.constraints.*;
|
import {{javaxPackage}}.validation.constraints.*;
|
||||||
import jakarta.validation.Valid;
|
import {{javaxPackage}}.validation.Valid;
|
||||||
|
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -17,8 +17,8 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
{{#useBeanValidation}}
|
{{#useBeanValidation}}
|
||||||
import jakarta.validation.constraints.*;
|
import {{javaxPackage}}.validation.constraints.*;
|
||||||
import jakarta.validation.Valid;
|
import {{javaxPackage}}.validation.Valid;
|
||||||
|
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
/**
|
/**
|
||||||
|
@ -152,7 +152,6 @@ dependencies {
|
|||||||
{{#useReflectionEqualsHashCode}}
|
{{#useReflectionEqualsHashCode}}
|
||||||
implementation "org.apache.commons:commons-lang3:$commons_lang3_version"
|
implementation "org.apache.commons:commons-lang3:$commons_lang3_version"
|
||||||
{{/useReflectionEqualsHashCode}}
|
{{/useReflectionEqualsHashCode}}
|
||||||
|
|
||||||
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
|
||||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version"
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version"
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ import android.os.Parcelable;
|
|||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
{{/parcelableModel}}
|
{{/parcelableModel}}
|
||||||
{{#useBeanValidation}}
|
{{#useBeanValidation}}
|
||||||
import jakarta.validation.constraints.*;
|
import {{javaxPackage}}.validation.constraints.*;
|
||||||
import jakarta.validation.Valid;
|
import {{javaxPackage}}.validation.Valid;
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
{{#performBeanValidation}}
|
{{#performBeanValidation}}
|
||||||
import org.hibernate.validator.constraints.*;
|
import org.hibernate.validator.constraints.*;
|
||||||
|
@ -408,8 +408,14 @@
|
|||||||
<jackson-version>2.17.1</jackson-version>
|
<jackson-version>2.17.1</jackson-version>
|
||||||
<jackson-databind-version>2.17.1</jackson-databind-version>
|
<jackson-databind-version>2.17.1</jackson-databind-version>
|
||||||
<jackson-databind-nullable-version>0.2.6</jackson-databind-nullable-version>
|
<jackson-databind-nullable-version>0.2.6</jackson-databind-nullable-version>
|
||||||
|
{{#useJakartaEe}}
|
||||||
<jakarta-annotation-version>2.1.1</jakarta-annotation-version>
|
<jakarta-annotation-version>2.1.1</jakarta-annotation-version>
|
||||||
<beanvalidation-version>3.0.2</beanvalidation-version>
|
<beanvalidation-version>3.0.2</beanvalidation-version>
|
||||||
|
{{/useJakartaEe}}
|
||||||
|
{{^useJakartaEe}}
|
||||||
|
<jakarta-annotation-version>1.3.5</jakarta-annotation-version>
|
||||||
|
<beanvalidation-version>2.0.2</beanvalidation-version>
|
||||||
|
{{/useJakartaEe}}
|
||||||
<junit-version>5.10.0</junit-version>
|
<junit-version>5.10.0</junit-version>
|
||||||
{{#hasHttpSignatureMethods}}
|
{{#hasHttpSignatureMethods}}
|
||||||
<http-signature-version>1.8</http-signature-version>
|
<http-signature-version>1.8</http-signature-version>
|
||||||
|
@ -45,17 +45,17 @@ import static java.nio.charset.StandardCharsets.UTF_8;
|
|||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
private HttpClient.Builder builder;
|
protected HttpClient.Builder builder;
|
||||||
private ObjectMapper mapper;
|
protected ObjectMapper mapper;
|
||||||
private String scheme;
|
protected String scheme;
|
||||||
private String host;
|
protected String host;
|
||||||
private int port;
|
protected int port;
|
||||||
private String basePath;
|
protected String basePath;
|
||||||
private Consumer<HttpRequest.Builder> interceptor;
|
protected Consumer<HttpRequest.Builder> interceptor;
|
||||||
private Consumer<HttpResponse<InputStream>> responseInterceptor;
|
protected Consumer<HttpResponse<InputStream>> responseInterceptor;
|
||||||
private Consumer<HttpResponse<String>> asyncResponseInterceptor;
|
protected Consumer<HttpResponse<String>> asyncResponseInterceptor;
|
||||||
private Duration readTimeout;
|
protected Duration readTimeout;
|
||||||
private Duration connectTimeout;
|
protected Duration connectTimeout;
|
||||||
|
|
||||||
public static String valueToString(Object value) {
|
public static String valueToString(Object value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
@ -200,7 +200,7 @@ public class ApiClient {
|
|||||||
return mapper;
|
return mapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getDefaultBaseUri() {
|
protected String getDefaultBaseUri() {
|
||||||
return "{{{basePath}}}";
|
return "{{{basePath}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ import {{invokerPackage}}.auth.AWS4Auth;
|
|||||||
*/
|
*/
|
||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
protected List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>({{#servers}}{{#-first}}Arrays.asList(
|
||||||
{{/-first}} new ServerConfiguration(
|
{{/-first}} new ServerConfiguration(
|
||||||
"{{{url}}}",
|
"{{{url}}}",
|
||||||
@ -105,29 +105,29 @@ public class ApiClient {
|
|||||||
){{/-last}}{{/servers}});
|
){{/-last}}{{/servers}});
|
||||||
protected Integer serverIndex = 0;
|
protected Integer serverIndex = 0;
|
||||||
protected Map<String, String> serverVariables = null;
|
protected Map<String, String> serverVariables = null;
|
||||||
private boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||||
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||||
private String tempFolderPath = null;
|
protected String tempFolderPath = null;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
private DateFormat datetimeFormat;
|
protected DateFormat datetimeFormat;
|
||||||
private boolean lenientDatetimeFormat;
|
protected boolean lenientDatetimeFormat;
|
||||||
private int dateLength;
|
protected int dateLength;
|
||||||
|
|
||||||
private InputStream sslCaCert;
|
protected InputStream sslCaCert;
|
||||||
private boolean verifyingSsl;
|
protected boolean verifyingSsl;
|
||||||
private KeyManager[] keyManagers;
|
protected KeyManager[] keyManagers;
|
||||||
|
|
||||||
private OkHttpClient httpClient;
|
protected OkHttpClient httpClient;
|
||||||
private JSON json;
|
protected JSON json;
|
||||||
|
|
||||||
private HttpLoggingInterceptor loggingInterceptor;
|
protected HttpLoggingInterceptor loggingInterceptor;
|
||||||
|
|
||||||
{{#dynamicOperations}}
|
{{#dynamicOperations}}
|
||||||
private Map<String, ApiOperation> operationLookupMap = new HashMap<>();
|
protected Map<String, ApiOperation> operationLookupMap = new HashMap<>();
|
||||||
|
|
||||||
{{/dynamicOperations}}
|
{{/dynamicOperations}}
|
||||||
/**
|
/**
|
||||||
@ -243,11 +243,11 @@ public class ApiClient {
|
|||||||
{{/-first}}
|
{{/-first}}
|
||||||
{{/oauthMethods}}
|
{{/oauthMethods}}
|
||||||
{{/hasOAuthMethods}}
|
{{/hasOAuthMethods}}
|
||||||
private void initHttpClient() {
|
protected void initHttpClient() {
|
||||||
initHttpClient(Collections.<Interceptor>emptyList());
|
initHttpClient(Collections.<Interceptor>emptyList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initHttpClient(List<Interceptor> interceptors) {
|
protected void initHttpClient(List<Interceptor> interceptors) {
|
||||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||||
builder.addNetworkInterceptor(getProgressInterceptor());
|
builder.addNetworkInterceptor(getProgressInterceptor());
|
||||||
for (Interceptor interceptor: interceptors) {
|
for (Interceptor interceptor: interceptors) {
|
||||||
@ -261,7 +261,7 @@ public class ApiClient {
|
|||||||
httpClient = builder.build();
|
httpClient = builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
protected void init() {
|
||||||
verifyingSsl = true;
|
verifyingSsl = true;
|
||||||
|
|
||||||
json = new JSON();
|
json = new JSON();
|
||||||
@ -1715,7 +1715,7 @@ public class ApiClient {
|
|||||||
* @param key The key of the Header element
|
* @param key The key of the Header element
|
||||||
* @param file The file to add to the Header
|
* @param file The file to add to the Header
|
||||||
*/
|
*/
|
||||||
private void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, File file) {
|
protected void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, File file) {
|
||||||
Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + key + "\"; filename=\"" + file.getName() + "\"");
|
Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + key + "\"; filename=\"" + file.getName() + "\"");
|
||||||
MediaType mediaType = MediaType.parse(guessContentTypeFromFile(file));
|
MediaType mediaType = MediaType.parse(guessContentTypeFromFile(file));
|
||||||
mpBuilder.addPart(partHeaders, RequestBody.create(file, mediaType));
|
mpBuilder.addPart(partHeaders, RequestBody.create(file, mediaType));
|
||||||
@ -1728,7 +1728,7 @@ public class ApiClient {
|
|||||||
* @param key The key of the Header element
|
* @param key The key of the Header element
|
||||||
* @param obj The complex object to add to the Header
|
* @param obj The complex object to add to the Header
|
||||||
*/
|
*/
|
||||||
private void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, Object obj) {
|
protected void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, Object obj) {
|
||||||
RequestBody requestBody;
|
RequestBody requestBody;
|
||||||
if (obj instanceof String) {
|
if (obj instanceof String) {
|
||||||
requestBody = RequestBody.create((String) obj, MediaType.parse("text/plain"));
|
requestBody = RequestBody.create((String) obj, MediaType.parse("text/plain"));
|
||||||
@ -1750,7 +1750,7 @@ public class ApiClient {
|
|||||||
* Get network interceptor to add it to the httpClient to track download progress for
|
* Get network interceptor to add it to the httpClient to track download progress for
|
||||||
* async requests.
|
* async requests.
|
||||||
*/
|
*/
|
||||||
private Interceptor getProgressInterceptor() {
|
protected Interceptor getProgressInterceptor() {
|
||||||
return new Interceptor() {
|
return new Interceptor() {
|
||||||
@Override
|
@Override
|
||||||
public Response intercept(Interceptor.Chain chain) throws IOException {
|
public Response intercept(Interceptor.Chain chain) throws IOException {
|
||||||
@ -1771,7 +1771,7 @@ public class ApiClient {
|
|||||||
* Apply SSL related settings to httpClient according to the current values of
|
* Apply SSL related settings to httpClient according to the current values of
|
||||||
* verifyingSsl and sslCaCert.
|
* verifyingSsl and sslCaCert.
|
||||||
*/
|
*/
|
||||||
private void applySslSettings() {
|
protected void applySslSettings() {
|
||||||
try {
|
try {
|
||||||
TrustManager[] trustManagers;
|
TrustManager[] trustManagers;
|
||||||
HostnameVerifier hostnameVerifier;
|
HostnameVerifier hostnameVerifier;
|
||||||
@ -1833,7 +1833,7 @@ public class ApiClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private KeyStore newEmptyKeyStore(char[] password) throws GeneralSecurityException {
|
protected KeyStore newEmptyKeyStore(char[] password) throws GeneralSecurityException {
|
||||||
try {
|
try {
|
||||||
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
|
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
|
||||||
keyStore.load(null, password);
|
keyStore.load(null, password);
|
||||||
@ -1861,7 +1861,7 @@ public class ApiClient {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addOperationLookupEntry(String path, String method, Operation operation) {
|
protected void addOperationLookupEntry(String path, String method, Operation operation) {
|
||||||
if ( operation != null && operation.getOperationId() != null) {
|
if ( operation != null && operation.getOperationId() != null) {
|
||||||
operationLookupMap.put(
|
operationLookupMap.put(
|
||||||
operation.getOperationId(),
|
operation.getOperationId(),
|
||||||
@ -1921,7 +1921,7 @@ public class ApiClient {
|
|||||||
* @return The string representation of the HTTP request body
|
* @return The string representation of the HTTP request body
|
||||||
* @throws {{invokerPackage}}.ApiException If fail to serialize the request body object into a string
|
* @throws {{invokerPackage}}.ApiException If fail to serialize the request body object into a string
|
||||||
*/
|
*/
|
||||||
private String requestBodyToString(RequestBody requestBody) throws ApiException {
|
protected String requestBodyToString(RequestBody requestBody) throws ApiException {
|
||||||
if (requestBody != null) {
|
if (requestBody != null) {
|
||||||
try {
|
try {
|
||||||
final Buffer buffer = new Buffer();
|
final Buffer buffer = new Buffer();
|
||||||
|
@ -322,16 +322,20 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
// a set of all properties/fields (JSON key names)
|
// a set of all properties/fields (JSON key names)
|
||||||
openapiFields = new HashSet<String>();
|
{{#hasVars}}
|
||||||
{{#allVars}}
|
openapiFields = new HashSet<String>(Arrays.asList({{#allVars}}"{{baseName}}"{{^-last}}, {{/-last}}{{/allVars}}));
|
||||||
openapiFields.add("{{baseName}}");
|
{{/hasVars}}
|
||||||
{{/allVars}}
|
{{^hasVars}}
|
||||||
|
openapiFields = new HashSet<String>(0);
|
||||||
|
{{/hasVars}}
|
||||||
|
|
||||||
// a set of required properties/fields (JSON key names)
|
// a set of required properties/fields (JSON key names)
|
||||||
openapiRequiredFields = new HashSet<String>();
|
{{#hasRequired}}
|
||||||
{{#requiredVars}}
|
openapiRequiredFields = new HashSet<String>(Arrays.asList({{#requiredVars}}"{{baseName}}"{{^-last}}, {{/-last}}{{/requiredVars}}));
|
||||||
openapiRequiredFields.add("{{baseName}}");
|
{{/hasRequired}}
|
||||||
{{/requiredVars}}
|
{{^hasRequired}}
|
||||||
|
openapiRequiredFields = new HashSet<String>(0);
|
||||||
|
{{/hasRequired}}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,9 +19,9 @@ public class ApiClient {
|
|||||||
public static final String BASE_URI = "{{.}}";
|
public static final String BASE_URI = "{{.}}";
|
||||||
{{/basePath}}
|
{{/basePath}}
|
||||||
|
|
||||||
private final Config config;
|
protected final Config config;
|
||||||
|
|
||||||
private ApiClient(Config config) {
|
protected ApiClient(Config config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ public class ApiClient {
|
|||||||
{{/apiInfo}}
|
{{/apiInfo}}
|
||||||
|
|
||||||
public static class Config {
|
public static class Config {
|
||||||
private Supplier<RequestSpecBuilder> reqSpecSupplier = () -> new RequestSpecBuilder()
|
protected Supplier<RequestSpecBuilder> reqSpecSupplier = () -> new RequestSpecBuilder()
|
||||||
{{#basePath}}.setBaseUri(BASE_URI){{/basePath}}
|
{{#basePath}}.setBaseUri(BASE_URI){{/basePath}}
|
||||||
.setConfig(config().objectMapperConfig(objectMapperConfig().defaultObjectMapper({{#gson}}gson(){{/gson}}{{#jackson}}jackson(){{/jackson}})));
|
.setConfig(config().objectMapperConfig(objectMapperConfig().defaultObjectMapper({{#gson}}gson(){{/gson}}{{#jackson}}jackson(){{/jackson}})));
|
||||||
|
|
||||||
|
@ -74,26 +74,26 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
public enum CollectionFormat {
|
public enum CollectionFormat {
|
||||||
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
||||||
|
|
||||||
private final String separator;
|
protected final String separator;
|
||||||
CollectionFormat(String separator) {
|
CollectionFormat(String separator) {
|
||||||
this.separator = separator;
|
this.separator = separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String collectionToString(Collection<?> collection) {
|
protected String collectionToString(Collection<?> collection) {
|
||||||
return StringUtils.collectionToDelimitedString(collection, separator);
|
return StringUtils.collectionToDelimitedString(collection, separator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final HttpHeaders defaultHeaders = new HttpHeaders();
|
protected final HttpHeaders defaultHeaders = new HttpHeaders();
|
||||||
private final MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<>();
|
protected final MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<>();
|
||||||
|
|
||||||
private String basePath = "{{basePath}}";
|
protected String basePath = "{{basePath}}";
|
||||||
|
|
||||||
private final RestClient restClient;
|
protected final RestClient restClient;
|
||||||
private final DateFormat dateFormat;
|
protected final DateFormat dateFormat;
|
||||||
private final ObjectMapper objectMapper;
|
protected final ObjectMapper objectMapper;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
@ -118,7 +118,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ApiClient(RestClient restClient, DateFormat format) {
|
protected ApiClient(RestClient restClient, DateFormat format) {
|
||||||
this(restClient, createDefaultObjectMapper(format), format);
|
this(restClient, createDefaultObjectMapper(format), format);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,7 +626,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param uriParams The path parameters
|
* @param uriParams The path parameters
|
||||||
* return templatized query string
|
* return templatized query string
|
||||||
*/
|
*/
|
||||||
private String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
|
protected String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
|
||||||
StringBuilder queryBuilder = new StringBuilder();
|
StringBuilder queryBuilder = new StringBuilder();
|
||||||
queryParams.forEach((name, values) -> {
|
queryParams.forEach((name, values) -> {
|
||||||
if (CollectionUtils.isEmpty(values)) {
|
if (CollectionUtils.isEmpty(values)) {
|
||||||
@ -652,7 +652,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return queryBuilder.toString();
|
return queryBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private RestClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map<String, Object> pathParams,
|
protected RestClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map<String, Object> pathParams,
|
||||||
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
|
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
|
||||||
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams, List<MediaType> accept,
|
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams, List<MediaType> accept,
|
||||||
MediaType contentType, String[] authNames) {
|
MediaType contentType, String[] authNames) {
|
||||||
@ -728,7 +728,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param cookies map all cookies
|
* @param cookies map all cookies
|
||||||
* @return header string for cookies.
|
* @return header string for cookies.
|
||||||
*/
|
*/
|
||||||
private String buildCookieHeader(MultiValueMap<String, String> cookies) {
|
protected String buildCookieHeader(MultiValueMap<String, String> cookies) {
|
||||||
final StringBuilder cookieValue = new StringBuilder();
|
final StringBuilder cookieValue = new StringBuilder();
|
||||||
String delimiter = "";
|
String delimiter = "";
|
||||||
for (final Map.Entry<String, List<String>> entry : cookies.entrySet()) {
|
for (final Map.Entry<String, List<String>> entry : cookies.entrySet()) {
|
||||||
|
@ -56,21 +56,21 @@ import {{invokerPackage}}.auth.OAuth;
|
|||||||
|
|
||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
|
||||||
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
private boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
|
|
||||||
private Client httpClient;
|
protected Client httpClient;
|
||||||
private JSON json;
|
protected JSON json;
|
||||||
private String tempFolderPath = null;
|
protected String tempFolderPath = null;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
private int statusCode;
|
protected int statusCode;
|
||||||
private Map<String, List<String>> responseHeaders;
|
protected Map<String, List<String>> responseHeaders;
|
||||||
|
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
json = new JSON();
|
json = new JSON();
|
||||||
@ -707,7 +707,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Response invoke(Invocation.Builder invocationBuilder, String method, Entity<?> entity) throws ApiException {
|
protected Response invoke(Invocation.Builder invocationBuilder, String method, Entity<?> entity) throws ApiException {
|
||||||
Response response = null;
|
Response response = null;
|
||||||
|
|
||||||
if ("GET".equals(method)) {
|
if ("GET".equals(method)) {
|
||||||
@ -736,7 +736,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
/**
|
/**
|
||||||
* Build the Client used to make HTTP requests.
|
* Build the Client used to make HTTP requests.
|
||||||
*/
|
*/
|
||||||
private Client buildHttpClient(boolean debugging) {
|
protected Client buildHttpClient(boolean debugging) {
|
||||||
final ClientConfiguration clientConfig = new ClientConfiguration(ResteasyProviderFactory.getInstance());
|
final ClientConfiguration clientConfig = new ClientConfiguration(ResteasyProviderFactory.getInstance());
|
||||||
clientConfig.register(json);
|
clientConfig.register(json);
|
||||||
if(debugging){
|
if(debugging){
|
||||||
@ -744,7 +744,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
return ClientBuilder.newClient(clientConfig);
|
return ClientBuilder.newClient(clientConfig);
|
||||||
}
|
}
|
||||||
private Map<String, List<String>> buildResponseHeaders(Response response) {
|
protected Map<String, List<String>> buildResponseHeaders(Response response) {
|
||||||
Map<String, List<String>> responseHeaders = new HashMap<String, List<String>>();
|
Map<String, List<String>> responseHeaders = new HashMap<String, List<String>>();
|
||||||
for (Entry<String, List<Object>> entry: response.getHeaders().entrySet()) {
|
for (Entry<String, List<Object>> entry: response.getHeaders().entrySet()) {
|
||||||
List<Object> values = entry.getValue();
|
List<Object> values = entry.getValue();
|
||||||
@ -762,7 +762,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
*
|
*
|
||||||
* @param authNames The authentications to apply
|
* @param authNames The authentications to apply
|
||||||
*/
|
*/
|
||||||
private void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
protected void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams) {
|
||||||
for (String authName : authNames) {
|
for (String authName : authNames) {
|
||||||
Authentication auth = authentications.get(authName);
|
Authentication auth = authentications.get(authName);
|
||||||
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
|
||||||
|
@ -93,33 +93,33 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
public enum CollectionFormat {
|
public enum CollectionFormat {
|
||||||
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
||||||
|
|
||||||
private final String separator;
|
protected final String separator;
|
||||||
|
|
||||||
private CollectionFormat(String separator) {
|
CollectionFormat(String separator) {
|
||||||
this.separator = separator;
|
this.separator = separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String collectionToString(Collection<?> collection) {
|
protected String collectionToString(Collection<?> collection) {
|
||||||
return StringUtils.collectionToDelimitedString(collection, separator);
|
return StringUtils.collectionToDelimitedString(collection, separator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean debugging = false;
|
protected boolean debugging = false;
|
||||||
|
|
||||||
private HttpHeaders defaultHeaders = new HttpHeaders();
|
protected HttpHeaders defaultHeaders = new HttpHeaders();
|
||||||
private MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<String, String>();
|
protected MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<String, String>();
|
||||||
|
|
||||||
private int maxAttemptsForRetry = {{maxAttemptsForRetry}};
|
protected int maxAttemptsForRetry = {{maxAttemptsForRetry}};
|
||||||
|
|
||||||
private long waitTimeMillis = {{waitTimeMillis}};
|
protected long waitTimeMillis = {{waitTimeMillis}};
|
||||||
|
|
||||||
private String basePath = "{{basePath}}";
|
protected String basePath = "{{basePath}}";
|
||||||
|
|
||||||
private RestTemplate restTemplate;
|
protected RestTemplate restTemplate;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
this.restTemplate = buildRestTemplate();
|
this.restTemplate = buildRestTemplate();
|
||||||
@ -852,7 +852,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param cookies map all cookies
|
* @param cookies map all cookies
|
||||||
* @return header string for cookies.
|
* @return header string for cookies.
|
||||||
*/
|
*/
|
||||||
private String buildCookieHeader(MultiValueMap<String, String> cookies) {
|
protected String buildCookieHeader(MultiValueMap<String, String> cookies) {
|
||||||
final StringBuilder cookieValue = new StringBuilder();
|
final StringBuilder cookieValue = new StringBuilder();
|
||||||
String delimiter = "";
|
String delimiter = "";
|
||||||
for (final Map.Entry<String, List<String>> entry : cookies.entrySet()) {
|
for (final Map.Entry<String, List<String>> entry : cookies.entrySet()) {
|
||||||
@ -906,8 +906,8 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ApiClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
|
protected class ApiClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
|
||||||
private final Log log = LogFactory.getLog(ApiClientHttpRequestInterceptor.class);
|
protected final Log log = LogFactory.getLog(ApiClientHttpRequestInterceptor.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
|
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
|
||||||
@ -917,21 +917,21 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logRequest(HttpRequest request, byte[] body) throws UnsupportedEncodingException {
|
protected void logRequest(HttpRequest request, byte[] body) throws UnsupportedEncodingException {
|
||||||
log.info("URI: " + request.getURI());
|
log.info("URI: " + request.getURI());
|
||||||
log.info("HTTP Method: " + request.getMethod());
|
log.info("HTTP Method: " + request.getMethod());
|
||||||
log.info("HTTP Headers: " + headersToString(request.getHeaders()));
|
log.info("HTTP Headers: " + headersToString(request.getHeaders()));
|
||||||
log.info("Request Body: " + new String(body, StandardCharsets.UTF_8));
|
log.info("Request Body: " + new String(body, StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logResponse(ClientHttpResponse response) throws IOException {
|
protected void logResponse(ClientHttpResponse response) throws IOException {
|
||||||
log.info("HTTP Status Code: " + response.getStatusCode().value());
|
log.info("HTTP Status Code: " + response.getStatusCode().value());
|
||||||
log.info("Status Text: " + response.getStatusText());
|
log.info("Status Text: " + response.getStatusText());
|
||||||
log.info("HTTP Headers: " + headersToString(response.getHeaders()));
|
log.info("HTTP Headers: " + headersToString(response.getHeaders()));
|
||||||
log.info("Response Body: " + bodyToString(response.getBody()));
|
log.info("Response Body: " + bodyToString(response.getBody()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private String headersToString(HttpHeaders headers) {
|
protected String headersToString(HttpHeaders headers) {
|
||||||
if(headers == null || headers.isEmpty()) {
|
if(headers == null || headers.isEmpty()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -948,7 +948,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String bodyToString(InputStream body) throws IOException {
|
protected String bodyToString(InputStream body) throws IOException {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(body, StandardCharsets.UTF_8));
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(body, StandardCharsets.UTF_8));
|
||||||
String line = bufferedReader.readLine();
|
String line = bufferedReader.readLine();
|
||||||
|
@ -55,11 +55,11 @@ import java.util.HashMap;
|
|||||||
|
|
||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
private Map<String, Interceptor> apiAuthorizations;
|
protected Map<String, Interceptor> apiAuthorizations;
|
||||||
private OkHttpClient.Builder okBuilder;
|
protected OkHttpClient.Builder okBuilder;
|
||||||
private Retrofit.Builder adapterBuilder;
|
protected Retrofit.Builder adapterBuilder;
|
||||||
private JSON json;
|
protected JSON json;
|
||||||
private OkHttpClient okHttpClient;
|
protected OkHttpClient okHttpClient;
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
apiAuthorizations = new LinkedHashMap<String, Interceptor>();
|
apiAuthorizations = new LinkedHashMap<String, Interceptor>();
|
||||||
@ -426,8 +426,8 @@ public class ApiClient {
|
|||||||
* expected type is String, then just return the body string.
|
* expected type is String, then just return the body string.
|
||||||
*/
|
*/
|
||||||
class GsonResponseBodyConverterToString<T> implements Converter<ResponseBody, T> {
|
class GsonResponseBodyConverterToString<T> implements Converter<ResponseBody, T> {
|
||||||
private final Gson gson;
|
protected final Gson gson;
|
||||||
private final Type type;
|
protected final Type type;
|
||||||
|
|
||||||
GsonResponseBodyConverterToString(Gson gson, Type type) {
|
GsonResponseBodyConverterToString(Gson gson, Type type) {
|
||||||
this.gson = gson;
|
this.gson = gson;
|
||||||
@ -447,14 +447,14 @@ class GsonResponseBodyConverterToString<T> implements Converter<ResponseBody, T>
|
|||||||
|
|
||||||
class GsonCustomConverterFactory extends Converter.Factory
|
class GsonCustomConverterFactory extends Converter.Factory
|
||||||
{
|
{
|
||||||
private final Gson gson;
|
protected final Gson gson;
|
||||||
private final GsonConverterFactory gsonConverterFactory;
|
protected final GsonConverterFactory gsonConverterFactory;
|
||||||
|
|
||||||
public static GsonCustomConverterFactory create(Gson gson) {
|
public static GsonCustomConverterFactory create(Gson gson) {
|
||||||
return new GsonCustomConverterFactory(gson);
|
return new GsonCustomConverterFactory(gson);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GsonCustomConverterFactory(Gson gson) {
|
protected GsonCustomConverterFactory(Gson gson) {
|
||||||
if (gson == null)
|
if (gson == null)
|
||||||
throw new NullPointerException("gson == null");
|
throw new NullPointerException("gson == null");
|
||||||
this.gson = gson;
|
this.gson = gson;
|
||||||
|
@ -31,13 +31,13 @@ import {{invokerPackage}}.auth.Authentication;
|
|||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
/** Underlying HTTP-client */
|
/** Underlying HTTP-client */
|
||||||
private WSClient wsClient;
|
protected WSClient wsClient;
|
||||||
|
|
||||||
/** Supported auths */
|
/** Supported auths */
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
/** API base path */
|
/** API base path */
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
|
|
||||||
public ApiClient(WSClient wsClient) {
|
public ApiClient(WSClient wsClient) {
|
||||||
this();
|
this();
|
||||||
|
@ -31,13 +31,13 @@ import {{invokerPackage}}.auth.Authentication;
|
|||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
/** Underlying HTTP-client */
|
/** Underlying HTTP-client */
|
||||||
private WSClient wsClient;
|
protected WSClient wsClient;
|
||||||
|
|
||||||
/** Supported auths */
|
/** Supported auths */
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
/** API base path */
|
/** API base path */
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
|
|
||||||
public ApiClient(WSClient wsClient) {
|
public ApiClient(WSClient wsClient) {
|
||||||
this();
|
this();
|
||||||
|
@ -37,22 +37,22 @@ import {{invokerPackage}}.auth.Authentication;
|
|||||||
public class ApiClient {
|
public class ApiClient {
|
||||||
|
|
||||||
/** Underlying HTTP-client */
|
/** Underlying HTTP-client */
|
||||||
private WSClient wsClient;
|
protected WSClient wsClient;
|
||||||
|
|
||||||
/** Creates HTTP call instances */
|
/** Creates HTTP call instances */
|
||||||
private Play26CallFactory callFactory;
|
protected Play26CallFactory callFactory;
|
||||||
|
|
||||||
/** Create {@link java.util.concurrent.CompletionStage} instances from HTTP calls */
|
/** Create {@link java.util.concurrent.CompletionStage} instances from HTTP calls */
|
||||||
private Play26CallAdapterFactory callAdapterFactory;
|
protected Play26CallAdapterFactory callAdapterFactory;
|
||||||
|
|
||||||
/** Supported auths */
|
/** Supported auths */
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
/** API base path */
|
/** API base path */
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
|
|
||||||
/** Default ObjectMapper */
|
/** Default ObjectMapper */
|
||||||
private ObjectMapper defaultMapper;
|
protected ObjectMapper defaultMapper;
|
||||||
|
|
||||||
public ApiClient(WSClient wsClient) {
|
public ApiClient(WSClient wsClient) {
|
||||||
this();
|
this();
|
||||||
|
@ -49,21 +49,21 @@ import static java.util.stream.Collectors.toMap;
|
|||||||
{{>generatedAnnotation}}
|
{{>generatedAnnotation}}
|
||||||
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
||||||
|
|
||||||
private static final Pattern CONTENT_DISPOSITION_PATTERN = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?");
|
protected static final Pattern CONTENT_DISPOSITION_PATTERN = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?");
|
||||||
private static final OpenOptions FILE_DOWNLOAD_OPTIONS = new OpenOptions().setCreate(true).setTruncateExisting(true);
|
protected static final OpenOptions FILE_DOWNLOAD_OPTIONS = new OpenOptions().setCreate(true).setTruncateExisting(true);
|
||||||
|
|
||||||
private final Vertx vertx;
|
protected final Vertx vertx;
|
||||||
private final JsonObject config;
|
protected final JsonObject config;
|
||||||
private final String identifier;
|
protected final String identifier;
|
||||||
|
|
||||||
private MultiMap defaultHeaders = MultiMap.caseInsensitiveMultiMap();
|
protected MultiMap defaultHeaders = MultiMap.caseInsensitiveMultiMap();
|
||||||
private MultiMap defaultCookies = MultiMap.caseInsensitiveMultiMap();
|
protected MultiMap defaultCookies = MultiMap.caseInsensitiveMultiMap();
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
private String basePath = "{{{basePath}}}";
|
protected String basePath = "{{{basePath}}}";
|
||||||
private DateFormat dateFormat;
|
protected DateFormat dateFormat;
|
||||||
private ObjectMapper objectMapper;
|
protected ObjectMapper objectMapper;
|
||||||
private String downloadsDir = "";
|
protected String downloadsDir = "";
|
||||||
private int timeout = -1;
|
protected int timeout = -1;
|
||||||
|
|
||||||
public ApiClient(Vertx vertx, JsonObject config) {
|
public ApiClient(Vertx vertx, JsonObject config) {
|
||||||
Objects.requireNonNull(vertx, "Vertx must not be null");
|
Objects.requireNonNull(vertx, "Vertx must not be null");
|
||||||
@ -385,7 +385,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param mime MIME
|
* @param mime MIME
|
||||||
* @return True if the MIME type is JSON
|
* @return True if the MIME type is JSON
|
||||||
*/
|
*/
|
||||||
private boolean isJsonMime(String mime) {
|
protected boolean isJsonMime(String mime) {
|
||||||
String jsonMime = "(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$";
|
String jsonMime = "(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$";
|
||||||
return mime != null && (mime.matches(jsonMime) || mime.equalsIgnoreCase("application/json-patch+json"));
|
return mime != null && (mime.matches(jsonMime) || mime.equalsIgnoreCase("application/json-patch+json"));
|
||||||
}
|
}
|
||||||
@ -523,7 +523,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildCookieHeader(MultiMap cookies) {
|
protected String buildCookieHeader(MultiMap cookies) {
|
||||||
final StringBuilder cookieValue = new StringBuilder();
|
final StringBuilder cookieValue = new StringBuilder();
|
||||||
String delimiter = "";
|
String delimiter = "";
|
||||||
for (final Map.Entry<String, String> entry : cookies.entries()) {
|
for (final Map.Entry<String, String> entry : cookies.entries()) {
|
||||||
@ -680,7 +680,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
|
|
||||||
public static class AuthInfo {
|
public static class AuthInfo {
|
||||||
|
|
||||||
private final Map<String, Authentication> authentications = new LinkedHashMap<>();{{#authMethods}}{{#isBasic}}{{#isBasicBasic}}
|
protected final Map<String, Authentication> authentications = new LinkedHashMap<>();{{#authMethods}}{{#isBasic}}{{#isBasicBasic}}
|
||||||
|
|
||||||
public void add{{#lambda.pascalcase}}{{name}}{{/lambda.pascalcase}}Authentication(String username, String password) {
|
public void add{{#lambda.pascalcase}}{{name}}{{/lambda.pascalcase}}Authentication(String username, String password) {
|
||||||
HttpBasicAuth auth = new HttpBasicAuth();
|
HttpBasicAuth auth = new HttpBasicAuth();
|
||||||
|
@ -89,28 +89,28 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
public enum CollectionFormat {
|
public enum CollectionFormat {
|
||||||
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
|
||||||
|
|
||||||
private final String separator;
|
protected final String separator;
|
||||||
private CollectionFormat(String separator) {
|
CollectionFormat(String separator) {
|
||||||
this.separator = separator;
|
this.separator = separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String collectionToString(Collection<?> collection) {
|
protected String collectionToString(Collection<?> collection) {
|
||||||
return StringUtils.collectionToDelimitedString(collection, separator);
|
return StringUtils.collectionToDelimitedString(collection, separator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate";
|
protected static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate";
|
||||||
|
|
||||||
private HttpHeaders defaultHeaders = new HttpHeaders();
|
protected HttpHeaders defaultHeaders = new HttpHeaders();
|
||||||
private MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<String, String>();
|
protected MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<String, String>();
|
||||||
|
|
||||||
private String basePath = "{{basePath}}";
|
protected String basePath = "{{basePath}}";
|
||||||
|
|
||||||
private final WebClient webClient;
|
protected final WebClient webClient;
|
||||||
private final DateFormat dateFormat;
|
protected final DateFormat dateFormat;
|
||||||
private final ObjectMapper objectMapper;
|
protected final ObjectMapper objectMapper;
|
||||||
|
|
||||||
private Map<String, Authentication> authentications;
|
protected Map<String, Authentication> authentications;
|
||||||
|
|
||||||
|
|
||||||
public ApiClient() {
|
public ApiClient() {
|
||||||
@ -135,7 +135,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient(mapper.copy())), format);
|
this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient(mapper.copy())), format);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ApiClient(WebClient webClient, DateFormat format) {
|
protected ApiClient(WebClient webClient, DateFormat format) {
|
||||||
this.webClient = webClient;
|
this.webClient = webClient;
|
||||||
this.dateFormat = format;
|
this.dateFormat = format;
|
||||||
this.objectMapper = createDefaultObjectMapper(format);
|
this.objectMapper = createDefaultObjectMapper(format);
|
||||||
@ -634,7 +634,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
* @param uriParams The path parameters
|
* @param uriParams The path parameters
|
||||||
* return templatized query string
|
* return templatized query string
|
||||||
*/
|
*/
|
||||||
private String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
|
protected String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
|
||||||
StringBuilder queryBuilder = new StringBuilder();
|
StringBuilder queryBuilder = new StringBuilder();
|
||||||
queryParams.forEach((name, values) -> {
|
queryParams.forEach((name, values) -> {
|
||||||
if (CollectionUtils.isEmpty(values)) {
|
if (CollectionUtils.isEmpty(values)) {
|
||||||
@ -660,7 +660,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
|
|||||||
return queryBuilder.toString();
|
return queryBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private WebClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map<String, Object> pathParams,
|
protected WebClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map<String, Object> pathParams,
|
||||||
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
|
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
|
||||||
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams, List<MediaType> accept,
|
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams, List<MediaType> accept,
|
||||||
MediaType contentType, String[] authNames) {
|
MediaType contentType, String[] authNames) {
|
||||||
|
@ -36,8 +36,12 @@
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
|
public {{{dataType}}} getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.valueOf(value);
|
return String.valueOf(value);
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}@RequestPart{{/isArray}}{{^isArray}}{{#reactive}}@RequestPart{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}
|
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}@RequestPart{{/isArray}}{{^isArray}}{{#reactive}}@RequestPart{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{{dataType}}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}
|
@ -2,9 +2,10 @@
|
|||||||
{{#vars}}
|
{{#vars}}
|
||||||
{
|
{
|
||||||
"name": "{{baseName}}",
|
"name": "{{baseName}}",
|
||||||
"type": {{^required}}["null", {{/required}}{{>typeProperty}}{{^required}}]{{/required}},
|
"type": {{^defaultValue}}{{^required}}["null", {{/required}}{{>typeProperty}}{{^required}}]{{/required}}{{/defaultValue}}{{#defaultValue}}{{^required}}[{{/required}}{{>typeProperty}}{{^required}}, "null"]{{/required}}{{/defaultValue}},
|
||||||
"doc": "{{{description}}}"{{^required}},
|
"doc": "{{{description}}}"{{#defaultValue}},
|
||||||
"default": null{{/required}}
|
"default": {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{^required}},
|
||||||
|
"default": null{{/required}}{{/defaultValue}}
|
||||||
}{{^-last}},{{/-last}}
|
}{{^-last}},{{/-last}}
|
||||||
{{/vars}}
|
{{/vars}}
|
||||||
]
|
]
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
#include "{{packageName}}/ApiException.h"
|
#include "{{packageName}}/ApiException.h"
|
||||||
#include "{{packageName}}/IHttpBody.h"
|
#include "{{packageName}}/IHttpBody.h"
|
||||||
#include "{{packageName}}/HttpContent.h"
|
#include "{{packageName}}/HttpContent.h"
|
||||||
|
{{^hasModelImport}}
|
||||||
|
#include "{{packageName}}/ModelBase.h"
|
||||||
|
{{/hasModelImport}}
|
||||||
#if defined (_WIN32) || defined (_WIN64)
|
#if defined (_WIN32) || defined (_WIN64)
|
||||||
#undef U
|
#undef U
|
||||||
#endif
|
#endif
|
||||||
@ -52,6 +54,9 @@ public:
|
|||||||
static utility::string_t parameterToString(double value);
|
static utility::string_t parameterToString(double value);
|
||||||
static utility::string_t parameterToString(const utility::datetime &value);
|
static utility::string_t parameterToString(const utility::datetime &value);
|
||||||
static utility::string_t parameterToString(bool value);
|
static utility::string_t parameterToString(bool value);
|
||||||
|
{{^hasModelImport}}
|
||||||
|
static utility::string_t parameterToString(const ModelBase& value);
|
||||||
|
{{/hasModelImport}}
|
||||||
template<class T>
|
template<class T>
|
||||||
static utility::string_t parameterToString(const std::vector<T>& value);
|
static utility::string_t parameterToString(const std::vector<T>& value);
|
||||||
template<class T>
|
template<class T>
|
||||||
|
@ -79,6 +79,13 @@ utility::string_t ApiClient::parameterToString(const utility::datetime &value)
|
|||||||
return utility::conversions::to_string_t(value.to_string(utility::datetime::ISO_8601));
|
return utility::conversions::to_string_t(value.to_string(utility::datetime::ISO_8601));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{{^hasModelImport}}
|
||||||
|
utility::string_t ApiClient::parameterToString(const ModelBase& value)
|
||||||
|
{
|
||||||
|
return value.toJson().serialize();
|
||||||
|
}
|
||||||
|
{{/hasModelImport}}
|
||||||
|
|
||||||
utility::string_t ApiClient::parameterToString(bool value)
|
utility::string_t ApiClient::parameterToString(bool value)
|
||||||
{
|
{
|
||||||
std::stringstream valueAsStringStream;
|
std::stringstream valueAsStringStream;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#
|
#
|
||||||
# NOTE: Auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
# NOTE: Auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|
||||||
cmake_minimum_required (VERSION 3.5)
|
cmake_minimum_required (VERSION 3.10)
|
||||||
|
|
||||||
project({{{packageName}}} CXX)
|
project({{{packageName}}} CXX)
|
||||||
|
|
||||||
@ -36,6 +36,7 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(cpprestsdk REQUIRED)
|
find_package(cpprestsdk REQUIRED)
|
||||||
|
target_compile_definitions(cpprestsdk::cpprest INTERFACE _TURN_OFF_PLATFORM_STRING)
|
||||||
find_package(Boost REQUIRED)
|
find_package(Boost REQUIRED)
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
@ -63,14 +64,16 @@ if (UNIX)
|
|||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest)
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest crypto)
|
find_library(CRYPTO_LIB crypto REQUIRED)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest ${CRYPTO_LIB})
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "Building client library for Windows")
|
message(STATUS "Building client library for Windows")
|
||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest)
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest bcrypt)
|
find_library(BCRYPT_LIB bcrypt REQUIRED)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::headers cpprestsdk::cpprest ${BCRYPT_LIB})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -92,6 +92,15 @@ class {{declspec}} {{classname}}
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
{{classname}}();
|
{{classname}}();
|
||||||
|
{{classname}}(utility::string_t str);
|
||||||
|
operator utility::string_t() const {
|
||||||
|
return enumToStrMap.at(getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
{{! operator std::string() const {
|
||||||
|
return enumToStrMap.at(getValue());
|
||||||
|
} }}
|
||||||
|
|
||||||
virtual ~{{classname}}();
|
virtual ~{{classname}}();
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
@ -124,6 +133,21 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
e{{classname}} m_value;
|
e{{classname}} m_value;
|
||||||
|
std::map<e{{classname}},utility::string_t> enumToStrMap = {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{ e{{classname}}::{{classname}}_{{{name}}}, "{{{name}}}" }{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
};
|
||||||
|
std::map<utility::string_t,e{{classname}}> strToEnumMap = {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{ "{{{name}}}", e{{classname}}::{{classname}}_{{{name}}} }{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
|
@ -82,7 +82,7 @@ using EnumUnderlyingType = {{#isNumeric}}int64_t{{/isNumeric}}{{^isNumeric}}util
|
|||||||
{{/isNumeric}}
|
{{/isNumeric}}
|
||||||
{{^isNumeric}}
|
{{^isNumeric}}
|
||||||
{{#enumVars}}
|
{{#enumVars}}
|
||||||
if (val == utility::conversions::to_string_t(U("{{{value}}}")))
|
if (val == utility::conversions::to_string_t(_XPLATSTR("{{{value}}}")))
|
||||||
return {{classname}}::e{{classname}}::{{classname}}_{{name}};
|
return {{classname}}::e{{classname}}::{{classname}}_{{name}};
|
||||||
{{/enumVars}}
|
{{/enumVars}}
|
||||||
{{/isNumeric}}
|
{{/isNumeric}}
|
||||||
@ -97,7 +97,7 @@ EnumUnderlyingType fromEnum({{classname}}::e{{classname}} e)
|
|||||||
{
|
{
|
||||||
{{#enumVars}}
|
{{#enumVars}}
|
||||||
case {{classname}}::e{{classname}}::{{classname}}_{{name}}:
|
case {{classname}}::e{{classname}}::{{classname}}_{{name}}:
|
||||||
return {{#isNumeric}}{{value}}{{/isNumeric}}{{^isNumeric}}U("{{value}}"){{/isNumeric}};
|
return {{#isNumeric}}{{value}}{{/isNumeric}}{{^isNumeric}}_XPLATSTR("{{value}}"){{/isNumeric}};
|
||||||
{{#-last}}
|
{{#-last}}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -137,9 +137,9 @@ bool {{classname}}::fromJson(const web::json::value& val)
|
|||||||
void {{classname}}::toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& prefix) const
|
void {{classname}}::toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& prefix) const
|
||||||
{
|
{
|
||||||
utility::string_t namePrefix = prefix;
|
utility::string_t namePrefix = prefix;
|
||||||
if (!namePrefix.empty() && namePrefix.back() != U('.'))
|
if (!namePrefix.empty() && namePrefix.back() != _XPLATSTR('.'))
|
||||||
{
|
{
|
||||||
namePrefix.push_back(U('.'));
|
namePrefix.push_back(_XPLATSTR('.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto e = fromEnum(m_value);
|
auto e = fromEnum(m_value);
|
||||||
@ -150,9 +150,9 @@ bool {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
|
|||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
utility::string_t namePrefix = prefix;
|
utility::string_t namePrefix = prefix;
|
||||||
if (!namePrefix.empty() && namePrefix.back() != U('.'))
|
if (!namePrefix.empty() && namePrefix.back() != _XPLATSTR('.'))
|
||||||
{
|
{
|
||||||
namePrefix.push_back(U('.'));
|
namePrefix.push_back(_XPLATSTR('.'));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
EnumUnderlyingType e;
|
EnumUnderlyingType e;
|
||||||
@ -176,6 +176,10 @@ void {{classname}}::setValue({{classname}}::e{{classname}} const value)
|
|||||||
m_value = value;
|
m_value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{{classname}}::{{classname}}(utility::string_t str){
|
||||||
|
setValue( strToEnumMap[str] );
|
||||||
|
}
|
||||||
|
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
|
|
||||||
@ -227,13 +231,13 @@ web::json::value {{classname}}::toJson() const
|
|||||||
{{#isEnum}}{{#isContainer}}{{#isArray}}
|
{{#isEnum}}{{#isContainer}}{{#isArray}}
|
||||||
{{{dataType}}} refVal = from{{{enumName}}}(m_{{name}});
|
{{{dataType}}} refVal = from{{{enumName}}}(m_{{name}});
|
||||||
{{/isArray}}{{#isMap}}
|
{{/isArray}}{{#isMap}}
|
||||||
val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
|
val[utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
|
||||||
{{/isMap}}{{/isContainer}}{{^isContainer}}
|
{{/isMap}}{{/isContainer}}{{^isContainer}}
|
||||||
utility::string_t refVal = from{{{datatypeWithEnum}}}(m_{{name}});
|
utility::string_t refVal = from{{{datatypeWithEnum}}}(m_{{name}});
|
||||||
{{/isContainer}}{{^isMap}}val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(refVal);
|
{{/isContainer}}{{^isMap}}val[utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))] = ModelBase::toJson(refVal);
|
||||||
{{/isMap}}{{/isEnum}}
|
{{/isMap}}{{/isEnum}}
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
|
val[utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
}
|
}
|
||||||
{{/isInherited}}
|
{{/isInherited}}
|
||||||
@ -250,9 +254,9 @@ bool {{classname}}::fromJson(const web::json::value& val)
|
|||||||
{{/parent}}
|
{{/parent}}
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
{{^isInherited}}
|
{{^isInherited}}
|
||||||
if(val.has_field(utility::conversions::to_string_t(U("{{baseName}}"))))
|
if(val.has_field(utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))))
|
||||||
{
|
{
|
||||||
const web::json::value& fieldValue = val.at(utility::conversions::to_string_t(U("{{baseName}}")));
|
const web::json::value& fieldValue = val.at(utility::conversions::to_string_t(_XPLATSTR("{{baseName}}")));
|
||||||
if(!fieldValue.is_null())
|
if(!fieldValue.is_null())
|
||||||
{
|
{
|
||||||
{{{dataType}}} refVal_{{setter}};
|
{{{dataType}}} refVal_{{setter}};
|
||||||
@ -277,26 +281,26 @@ bool {{classname}}::fromJson(const web::json::value& val)
|
|||||||
void {{classname}}::toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& prefix) const
|
void {{classname}}::toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& prefix) const
|
||||||
{
|
{
|
||||||
utility::string_t namePrefix = prefix;
|
utility::string_t namePrefix = prefix;
|
||||||
if(namePrefix.size() > 0 && namePrefix.substr(namePrefix.size() - 1) != utility::conversions::to_string_t(U(".")))
|
if(namePrefix.size() > 0 && namePrefix.substr(namePrefix.size() - 1) != utility::conversions::to_string_t(_XPLATSTR(".")))
|
||||||
{
|
{
|
||||||
namePrefix += utility::conversions::to_string_t(U("."));
|
namePrefix += utility::conversions::to_string_t(_XPLATSTR("."));
|
||||||
}
|
}
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
if(m_{{name}}IsSet)
|
if(m_{{name}}IsSet)
|
||||||
{
|
{
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), m_{{name}}));
|
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(_XPLATSTR("{{baseName}}")), m_{{name}}));
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{#isEnum}}
|
{{#isEnum}}
|
||||||
{{#isContainer}}
|
{{#isContainer}}
|
||||||
{{#isArray}}
|
{{#isArray}}
|
||||||
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), from{{{enumName}}}(m_{{name}})));
|
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(_XPLATSTR("{{baseName}}")), from{{{enumName}}}(m_{{name}})));
|
||||||
{{/isArray}}{{#isMap}}
|
{{/isArray}}{{#isMap}}
|
||||||
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), m_{{name}}));
|
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(_XPLATSTR("{{baseName}}")), m_{{name}}));
|
||||||
{{/isMap}}
|
{{/isMap}}
|
||||||
{{/isContainer}}
|
{{/isContainer}}
|
||||||
{{^isContainer}}
|
{{^isContainer}}
|
||||||
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), from{{{datatypeWithEnum}}}(m_{{name}})));
|
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(_XPLATSTR("{{baseName}}")), from{{{datatypeWithEnum}}}(m_{{name}})));
|
||||||
{{/isContainer}}
|
{{/isContainer}}
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
}
|
}
|
||||||
@ -307,16 +311,16 @@ bool {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
|
|||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
utility::string_t namePrefix = prefix;
|
utility::string_t namePrefix = prefix;
|
||||||
if(namePrefix.size() > 0 && namePrefix.substr(namePrefix.size() - 1) != utility::conversions::to_string_t(U(".")))
|
if(namePrefix.size() > 0 && namePrefix.substr(namePrefix.size() - 1) != utility::conversions::to_string_t(_XPLATSTR(".")))
|
||||||
{
|
{
|
||||||
namePrefix += utility::conversions::to_string_t(U("."));
|
namePrefix += utility::conversions::to_string_t(_XPLATSTR("."));
|
||||||
}
|
}
|
||||||
|
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
if(multipart->hasContent(utility::conversions::to_string_t(U("{{baseName}}"))))
|
if(multipart->hasContent(utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))))
|
||||||
{
|
{
|
||||||
{{{dataType}}} refVal_{{setter}};
|
{{{dataType}}} refVal_{{setter}};
|
||||||
ok &= ModelBase::fromHttpContent(multipart->getContent(utility::conversions::to_string_t(U("{{baseName}}"))), refVal_{{setter}} );
|
ok &= ModelBase::fromHttpContent(multipart->getContent(utility::conversions::to_string_t(_XPLATSTR("{{baseName}}"))), refVal_{{setter}} );
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
{{setter}}(refVal_{{setter}});
|
{{setter}}(refVal_{{setter}});
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
|
@ -128,12 +128,12 @@ namespace {{packageName}}.Client
|
|||||||
{ // array
|
{ // array
|
||||||
foreach (var value in parameter.Value)
|
foreach (var value in parameter.Value)
|
||||||
{
|
{
|
||||||
httpValues.Add(HttpUtility.UrlEncode(parameter.Key) + "[]", value);
|
httpValues.Add({{#net90OrLater}}HttpUtility.UrlEncode({{/net90OrLater}}parameter.Key{{#net90OrLater}}){{/net90OrLater}} + "[]", value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
httpValues.Add(HttpUtility.UrlEncode(parameter.Key), parameter.Value[0]);
|
httpValues.Add({{#net90OrLater}}HttpUtility.UrlEncode({{/net90OrLater}}parameter.Key{{#net90OrLater}}){{/net90OrLater}}, parameter.Value[0]);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (parameter.Value.Count > 1)
|
if (parameter.Value.Count > 1)
|
||||||
|
@ -493,7 +493,7 @@ namespace {{packageName}}.Client
|
|||||||
{
|
{
|
||||||
InterceptRequest(request);
|
InterceptRequest(request);
|
||||||
|
|
||||||
RestResponse<T> response = await getResponse(client);
|
RestResponse<T> response = await getResponse(client).ConfigureAwait(false);
|
||||||
|
|
||||||
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
|
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
|
||||||
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
|
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
|
||||||
@ -562,7 +562,7 @@ namespace {{packageName}}.Client
|
|||||||
{
|
{
|
||||||
if (policyResult.Outcome == OutcomeType.Successful)
|
if (policyResult.Outcome == OutcomeType.Successful)
|
||||||
{
|
{
|
||||||
return await client.Deserialize<T>(policyResult.Result, cancellationToken);
|
return await client.Deserialize<T>(policyResult.Result, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -621,7 +621,7 @@ namespace {{packageName}}.Client
|
|||||||
{
|
{
|
||||||
var policy = RetryConfiguration.AsyncRetryPolicy;
|
var policy = RetryConfiguration.AsyncRetryPolicy;
|
||||||
var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false);
|
var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false);
|
||||||
return await DeserializeRestResponseFromPolicyAsync<T>(client, request, policyResult, cancellationToken);
|
return await DeserializeRestResponseFromPolicyAsync<T>(client, request, policyResult, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -134,7 +134,7 @@ namespace {{packageName}}.Client
|
|||||||
{
|
{
|
||||||
#if (NETCOREAPP)
|
#if (NETCOREAPP)
|
||||||
string framework = RuntimeInformation.FrameworkDescription;
|
string framework = RuntimeInformation.FrameworkDescription;
|
||||||
string key = framework.StartsWith(".NET 9")?parameter.Key:HttpUtility.UrlEncode(parameter.Key);
|
string key = framework.StartsWith(".NET 9") ? parameter.Key : {{#net90OrLater}}HttpUtility.UrlEncode({{/net90OrLater}}parameter.Key{{#net90OrLater}}){{/net90OrLater}};
|
||||||
if (parameter.Value.Count > 1)
|
if (parameter.Value.Count > 1)
|
||||||
{ // array
|
{ // array
|
||||||
foreach (var value in parameter.Value)
|
foreach (var value in parameter.Value)
|
||||||
|
@ -60,6 +60,9 @@
|
|||||||
{{#vars}}
|
{{#vars}}
|
||||||
{{#hasValidation}}
|
{{#hasValidation}}
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
|
{{^isDateTime}}
|
||||||
|
{{^isDate}}
|
||||||
|
{{^isTime}}
|
||||||
{{#maxLength}}
|
{{#maxLength}}
|
||||||
// {{{name}}} ({{{dataType}}}) maxLength
|
// {{{name}}} ({{{dataType}}}) maxLength
|
||||||
if (this.{{{name}}} != null && this.{{{name}}}.Length > {{maxLength}})
|
if (this.{{{name}}} != null && this.{{{name}}}.Length > {{maxLength}})
|
||||||
@ -76,6 +79,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
{{/minLength}}
|
{{/minLength}}
|
||||||
|
{{/isTime}}
|
||||||
|
{{/isDate}}
|
||||||
|
{{/isDateTime}}
|
||||||
{{#maximum}}
|
{{#maximum}}
|
||||||
// {{{name}}} ({{{dataType}}}) maximum
|
// {{{name}}} ({{{dataType}}}) maximum
|
||||||
if ({{#useGenericHost}}{{^required}}this.{{{name}}}Option.IsSet && {{/required}}{{/useGenericHost}}this.{{{name}}}{{#useGenericHost}}{{^required}}Option.Value{{/required}}{{/useGenericHost}} {{#exclusiveMaximum}}<={{/exclusiveMaximum}}{{^exclusiveMaximum}}>{{/exclusiveMaximum}} ({{{dataType}}}){{maximum}})
|
if ({{#useGenericHost}}{{^required}}this.{{{name}}}Option.IsSet && {{/required}}{{/useGenericHost}}this.{{{name}}}{{#useGenericHost}}{{^required}}Option.Value{{/required}}{{/useGenericHost}} {{#exclusiveMaximum}}<={{/exclusiveMaximum}}{{^exclusiveMaximum}}>{{/exclusiveMaximum}} ({{{dataType}}}){{maximum}})
|
||||||
|
@ -77,137 +77,23 @@ defmodule {{moduleName}}.Connection do
|
|||||||
defdelegate request(client, options), to: Tesla
|
defdelegate request(client, options), to: Tesla
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Configure a client with no authentication.
|
Configure a {{moduleName}} client.
|
||||||
|
|
||||||
### Returns
|
|
||||||
|
|
||||||
Tesla.Env.client
|
|
||||||
"""
|
|
||||||
@spec new() :: Tesla.Env.client()
|
|
||||||
def new do
|
|
||||||
Tesla.client(middleware(), adapter())
|
|
||||||
end
|
|
||||||
|
|
||||||
@doc """
|
|
||||||
Configure a client that may have authentication.
|
|
||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
- `options`: an optional keyword list of {{moduleName}}.Connection.options.
|
||||||
The first parameter *may* be a `token` (a string, a token fetcher class,
|
|
||||||
or a module/function tuple) or a keyword list of `options`. They are
|
|
||||||
documented separately, but only *one* of them will be passed.
|
|
||||||
|
|
||||||
- `token`: a String or a function of arity one. This value, or the result
|
|
||||||
of the function call, will be set as a bearer token in the
|
|
||||||
`authorization` header.
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
- `options`: a keyword list of {{moduleName}}.Connection.options.
|
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
Tesla.Env.client
|
Tesla.Env.client
|
||||||
"""
|
"""
|
||||||
{{#hasOAuthMethods}}
|
|
||||||
@spec new(String.t() | token_fetcher | options) :: Tesla.Env.client()
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
{{^hasOAuthMethods}}
|
|
||||||
@spec new(options) :: Tesla.Env.client()
|
@spec new(options) :: Tesla.Env.client()
|
||||||
{{/hasOAuthMethods}}
|
def new(options \\ []) do
|
||||||
{{#hasOAuthMethods}}
|
|
||||||
def new(token) when is_binary(token) or is_function(token, 1) or is_tuple(token) do
|
|
||||||
new(token: token)
|
|
||||||
end
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
|
|
||||||
def new(options) when is_list(options) do
|
|
||||||
options
|
options
|
||||||
|> middleware()
|
|> middleware()
|
||||||
|> Tesla.client(adapter())
|
|> Tesla.client(adapter())
|
||||||
end
|
end
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
|
||||||
{{#hasHttpBasicMethods}}
|
|
||||||
@doc """
|
|
||||||
Configure a client using bearer authentication with scopes, or with
|
|
||||||
username and password for basic authentication.
|
|
||||||
|
|
||||||
### Parameters
|
|
||||||
|
|
||||||
- `token_or_username`: a String representing a bearer token or a username,
|
|
||||||
depending on the type of the next parameter, or a function arity one
|
|
||||||
that returns a bearer token.
|
|
||||||
- `scopes_or_password`: a list of Strings represenging OAuth2 scopes, or
|
|
||||||
a single string that is the password for the username provided.
|
|
||||||
- `options`: a keyword list of {{moduleName}}.Connection.options.
|
|
||||||
|
|
||||||
### Returns
|
|
||||||
|
|
||||||
Tesla.Env.client
|
|
||||||
"""
|
|
||||||
@spec new(
|
|
||||||
token_or_username :: String.t() | token_fetcher,
|
|
||||||
scopes_or_password :: list(String.t()) | String.t(),
|
|
||||||
options
|
|
||||||
) :: Tesla.Env.client()
|
|
||||||
{{/hasHttpBasicMethods}}
|
|
||||||
{{^hasHttpBasicMethods}}
|
|
||||||
@doc """
|
|
||||||
Configure a client using bearer authentication with scopes.
|
|
||||||
|
|
||||||
### Parameters
|
|
||||||
|
|
||||||
- `token`: a String or a function of arity one. This value, or the result
|
|
||||||
of the function call, will be set as a bearer token in the
|
|
||||||
`authorization` header.
|
|
||||||
- `scopes`: a list of Strings represenging OAuth2 scopes.
|
|
||||||
- `options`: a keyword list of {{moduleName}}.Connection.options.
|
|
||||||
|
|
||||||
### Returns
|
|
||||||
|
|
||||||
Tesla.Env.client
|
|
||||||
"""
|
|
||||||
@spec new(String.t() | token_fetcher, list(String.t()), options) :: Tesla.Env.client()
|
|
||||||
{{/hasHttpBasicMethods}}
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
{{^hasOAuthMethods}}
|
|
||||||
{{#hasHttpBasicMethods}}
|
|
||||||
@doc """
|
|
||||||
Configure a client using username and password for basic authentication.
|
|
||||||
|
|
||||||
### Parameters
|
|
||||||
|
|
||||||
- `username`: a String representing a username.
|
|
||||||
- `password`: a String representing a password.
|
|
||||||
- `options`: a keyword list of {{moduleName}}.Connection.options.
|
|
||||||
|
|
||||||
### Returns
|
|
||||||
|
|
||||||
Tesla.Env.client
|
|
||||||
"""
|
|
||||||
@spec new(String.t(), String.t()), options) :: Tesla.Env.client()
|
|
||||||
{{/hasHttpBasicMethods}}
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
|
|
||||||
{{#hasOAuthMethods}}
|
|
||||||
def new(token_or_username, scopes_or_password, options \\ [])
|
|
||||||
|
|
||||||
def new(token, scopes, options)
|
|
||||||
when (is_binary(token) or is_function(token, 1) or is_tuple(token)) and is_list(scopes) do
|
|
||||||
options
|
|
||||||
|> Keyword.merge(token: token, token_scopes: scopes)
|
|
||||||
|> new()
|
|
||||||
end
|
|
||||||
{{/hasOAuthMethods}}
|
|
||||||
|
|
||||||
{{#hasHttpBasicMethods}}
|
|
||||||
def new(username, password, options) when is_binary(username) and is_binary(password) do
|
|
||||||
options
|
|
||||||
|> Keyword.merge(username: username, password: password)
|
|
||||||
|> new()
|
|
||||||
end
|
|
||||||
{{/hasHttpBasicMethods}}
|
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Returns fully configured middleware for passing to Tesla.client/2.
|
Returns fully configured middleware for passing to Tesla.client/2.
|
||||||
"""
|
"""
|
||||||
|
@ -202,14 +202,14 @@ import {{packageName}}.infrastructure.ITransformForStorage
|
|||||||
{{#-first}}
|
{{#-first}}
|
||||||
// a set of all properties/fields (JSON key names)
|
// a set of all properties/fields (JSON key names)
|
||||||
{{/-first}}
|
{{/-first}}
|
||||||
openapiFields.add("{{baseName}}")
|
openapiFields.add("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
|
||||||
{{/allVars}}
|
{{/allVars}}
|
||||||
|
|
||||||
{{#requiredVars}}
|
{{#requiredVars}}
|
||||||
{{#-first}}
|
{{#-first}}
|
||||||
// a set of required properties/fields (JSON key names)
|
// a set of required properties/fields (JSON key names)
|
||||||
{{/-first}}
|
{{/-first}}
|
||||||
openapiRequiredFields.add("{{baseName}}")
|
openapiRequiredFields.add("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
|
||||||
{{/requiredVars}}
|
{{/requiredVars}}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,26 +248,26 @@ import {{packageName}}.infrastructure.ITransformForStorage
|
|||||||
{{#items.isModel}}
|
{{#items.isModel}}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
// ensure the json data is an array
|
// ensure the json data is an array
|
||||||
if (!jsonObj.get("{{{baseName}}}").isJsonArray) {
|
if (!jsonObj.get("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").isJsonArray) {
|
||||||
throw IllegalArgumentException(String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString()))
|
throw IllegalArgumentException(String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the required field `{{{baseName}}}` (array)
|
// validate the required field `{{{baseName}}}` (array)
|
||||||
for (i in 0 until jsonObj.getAsJsonArray("{{{baseName}}}").size()) {
|
for (i in 0 until jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").size()) {
|
||||||
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{{baseName}}}").get(i))
|
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").get(i))
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{^required}}
|
{{^required}}
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
if (jsonObj.getAsJsonArray("{{{baseName}}}") != null) {
|
if (jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}") != null) {
|
||||||
// ensure the json data is an array
|
// ensure the json data is an array
|
||||||
require(jsonObj["{{{baseName}}}"].isJsonArray) {
|
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the optional field `{{{baseName}}}` (array)
|
// validate the optional field `{{{baseName}}}` (array)
|
||||||
for (i in 0 until jsonObj.getAsJsonArray("{{{baseName}}}").size()) {
|
for (i in 0 until jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").size()) {
|
||||||
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{{baseName}}}").get(i))
|
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").get(i))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,19 +276,19 @@ import {{packageName}}.infrastructure.ITransformForStorage
|
|||||||
{{^items.isModel}}
|
{{^items.isModel}}
|
||||||
{{^required}}
|
{{^required}}
|
||||||
// ensure the optional json data is an array if present
|
// ensure the optional json data is an array if present
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
require(jsonObj["{{{baseName}}}"].isJsonArray()) {
|
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray()) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
// ensure the required json array is present
|
// ensure the required json array is present
|
||||||
requireNotNull(jsonObj["{{{baseName}}}"]) {
|
requireNotNull(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"]) {
|
||||||
"Expected the field `{{{baseName}}}` to be an array in the JSON string but got `null`"
|
"Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `null`"
|
||||||
}
|
}
|
||||||
require(jsonObj["{{{baseName}}}"].isJsonArray()) {
|
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray()) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{/items.isModel}}
|
{{/items.isModel}}
|
||||||
@ -296,42 +296,42 @@ import {{packageName}}.infrastructure.ITransformForStorage
|
|||||||
{{^isContainer}}
|
{{^isContainer}}
|
||||||
{{#isString}}
|
{{#isString}}
|
||||||
{{#notRequiredOrIsNullable}}
|
{{#notRequiredOrIsNullable}}
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
require(jsonObj.get("{{{baseName}}}").isJsonPrimitive) {
|
require(jsonObj.get("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").isJsonPrimitive) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/notRequiredOrIsNullable}}
|
{{/notRequiredOrIsNullable}}
|
||||||
{{^notRequiredOrIsNullable}}
|
{{^notRequiredOrIsNullable}}
|
||||||
require(jsonObj["{{{baseName}}}"].isJsonPrimitive) {
|
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonPrimitive) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
{{/notRequiredOrIsNullable}}
|
{{/notRequiredOrIsNullable}}
|
||||||
{{/isString}}
|
{{/isString}}
|
||||||
{{#isModel}}
|
{{#isModel}}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
// validate the required field `{{{baseName}}}`
|
// validate the required field `{{{baseName}}}`
|
||||||
{{{dataType}}}.validateJsonElement(jsonObj["{{{baseName}}}"])
|
{{{dataType}}}.validateJsonElement(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"])
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{^required}}
|
{{^required}}
|
||||||
// validate the optional field `{{{baseName}}}`
|
// validate the optional field `{{{baseName}}}`
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
{{{dataType}}}.validateJsonElement(jsonObj["{{{baseName}}}"])
|
{{{dataType}}}.validateJsonElement(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"])
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{/isModel}}
|
{{/isModel}}
|
||||||
{{#isEnum}}
|
{{#isEnum}}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
// validate the required field `{{{baseName}}}`
|
// validate the required field `{{{baseName}}}`
|
||||||
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
|
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{^required}}
|
{{^required}}
|
||||||
// validate the optional field `{{{baseName}}}`
|
// validate the optional field `{{{baseName}}}`
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
|
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
@ -339,15 +339,15 @@ import {{packageName}}.infrastructure.ITransformForStorage
|
|||||||
{{#isEnumRef}}
|
{{#isEnumRef}}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
// validate the required field `{{{baseName}}}`
|
// validate the required field `{{{baseName}}}`
|
||||||
require({{{dataType}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
|
require({{{dataType}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
{{^required}}
|
{{^required}}
|
||||||
// validate the optional field `{{{baseName}}}`
|
// validate the optional field `{{{baseName}}}`
|
||||||
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
|
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
|
||||||
require({{{dataType}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
|
require({{{dataType}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
|
||||||
String.format("Expected the field `{{{baseName}}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
|
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/required}}
|
{{/required}}
|
||||||
|
@ -43,7 +43,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
|
|||||||
|
|
||||||
{{#operation}}
|
{{#operation}}
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}} * @param {{{paramName}}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
|
{{#allParams}} * @param {{{paramName}}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
|
||||||
|
@ -123,7 +123,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
|||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{/allParams}}
|
{{/allParams}}
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
||||||
@ -161,7 +161,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
||||||
|
@ -131,7 +131,7 @@ import okhttp3.MultipartBody
|
|||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{/allParams}}
|
{{/allParams}}
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
* Responses:{{#responses}}
|
* Responses:{{#responses}}
|
||||||
|
@ -88,7 +88,7 @@ import {{packageName}}.infrastructure.*
|
|||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{/allParams}}
|
{{/allParams}}
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
||||||
@ -123,7 +123,7 @@ import {{packageName}}.infrastructure.*
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
||||||
|
@ -37,7 +37,7 @@ import {{packageName}}.infrastructure.CollectionFormats.*
|
|||||||
|
|
||||||
{{#operation}}
|
{{#operation}}
|
||||||
/**
|
/**
|
||||||
* {{{httpMethod}}} {{{path}}}
|
* {{{httpMethod}}} {{#sanitizePathComment}}{{{path}}}{{/sanitizePathComment}}
|
||||||
* {{summary}}
|
* {{summary}}
|
||||||
* {{notes}}
|
* {{notes}}
|
||||||
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
{{#allParams}}* @param {{{paramName}}} {{description}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}{{/required}}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user