Compare commits

...

11 Commits

Author SHA1 Message Date
William Cheng
4eaac3d152 v7.7.0 release (#19046) 2024-07-02 15:44:37 +08:00
Dieter Eickstaedt
c9da04cb65 feat: x-enum-description support added to kotlin-server code generator (#19041) 2024-07-01 13:16:26 +01:00
Rodrigo de Almeida - RMA3
21d3cfe924 Fix Issue 18224 - Load x-field-extra-annotation in the operation parameter (#18967)
* fix issue 18959

* fix issue 18224

* fix issue 18224

* fix spaces

---------

Co-authored-by: Rodrigo Maciel de Almeida <rodrigo.almeida@wefin.com.br>
2024-06-30 16:27:14 +08:00
loicconan
fb17e5699d [PHP-SYMFONY] Debug Symfony version 7, enums ref, array of enums $ref and date assert (#19008)
* [PHP-SYMFONY] Debug for Symfony 7 support & debug enum ref & debug array enum ref & debug date assert

* [PHP-SYMFONY] Debug for Symfony 7 support & debug enum ref & debug array enum ref & debug date assert

* [PHP-SYMFONY] Debug for Symfony 7 support & debug enum ref & debug array enum ref & debug date assert
2024-06-30 10:11:26 +08:00
ksn-partisia
fa2b5750ce [Bug] [Java] Remove raw type compilation warnings when generating using jersey2 or jersey3 (#19033)
* Add type annotations to raw types for jersey2 and jersey3 templates

* Update samples

* Add type parameters to anyof_model.mustache and oneof_model.mustache

---------

Co-authored-by: Kasper S. Nielsen <kasper.s.nielsen@secata.com>
2024-06-30 10:06:12 +08:00
Cameron Koegel
53f1094765 [Python] Allow Overriding Accept Header (#19025)
* [Python] Allow Overriding Accept Header

* generate samples

* add tests
2024-06-28 19:27:10 +08:00
Val Packett
44e9ff58bd [android][volley] Remove unused robolectric test dependency (#19022)
Causes failures like:
Configuration `:debugUnitTestRuntimeClasspath` contains AndroidX dependencies, but the `android.useAndroidX` property is not enabled, which may cause runtime issues.
2024-06-27 09:51:56 +08:00
Val Packett
9c26848f11 [kotlin-client] Generate safe ?. access for optional enums (#18982) (#19023)
Fixes #18982
2024-06-26 15:53:56 +01:00
William Cheng
0c4bfe3ffe Add tests for anyof with discriminator (#19021)
* add tests for anyof with discriminator

* remove test

* update samples
2024-06-26 16:00:58 +08:00
qbuzzdaan
6b9d95be89 Tries to fix #18975 by changing how the deserializer interacts with its parent class (#18976)
* [JAVA] Fix for #18975, ensure static block of parent deser class loads

* Add sample spec with type with anyOf
2024-06-26 15:22:20 +08:00
Cameron Koegel
0d05ee35f0 [Python] Add Flag to Allow Ignoring Operation Servers (#18981)
* [Python] Add Flag to Allow Ignoring Operation Servers

* generate samples

* add tests
2024-06-26 15:08:13 +08:00
197 changed files with 3130 additions and 1202 deletions

View File

@@ -80,7 +80,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -120,7 +120,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
|x-operation-extra-annotation|List of custom annotations to be added to operation|OPERATION|null |x-operation-extra-annotation|List of custom annotations to be added to operation|OPERATION|null
|x-spring-paginated|Add org.springframework.data.domain.Pageable to controller method. Can be used to handle page & size query parameters|OPERATION|false |x-spring-paginated|Add org.springframework.data.domain.Pageable to controller method. Can be used to handle page & size query parameters|OPERATION|false
|x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null

View File

@@ -77,7 +77,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
|x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false |x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false

View File

@@ -80,7 +80,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -82,7 +82,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -103,7 +103,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -102,7 +102,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -114,7 +114,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
|x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false |x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false

View File

@@ -88,7 +88,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -89,7 +89,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -92,7 +92,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -82,7 +82,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -82,7 +82,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -85,7 +85,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -82,7 +82,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -114,7 +114,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
|x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false |x-webclient-blocking|Specifies if method for specific operation should be blocking or non-blocking(ex: return `Mono<T>/Flux<T>` or `return T/List<T>/Set<T>` & execute `.block()` inside generated method)|OPERATION|false

View File

@@ -96,7 +96,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -87,7 +87,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -110,7 +110,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -105,7 +105,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -88,7 +88,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -89,7 +89,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -88,7 +88,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -96,7 +96,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
## IMPORT MAPPING ## IMPORT MAPPING

View File

@@ -113,7 +113,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null |x-accepts|Specify custom value for 'Accept' header for operation|OPERATION|null
|x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null |x-content-type|Specify custom value for 'Content-Type' header for operation|OPERATION|null
|x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null |x-class-extra-annotation|List of custom annotations to be added to model|MODEL|null
|x-field-extra-annotation|List of custom annotations to be added to property|FIELD|null |x-field-extra-annotation|List of custom annotations to be added to property|FIELD, OPERATION_PARAMETER|null
|x-operation-extra-annotation|List of custom annotations to be added to operation|OPERATION|null |x-operation-extra-annotation|List of custom annotations to be added to operation|OPERATION|null
|x-spring-paginated|Add org.springframework.data.domain.Pageable to controller method. Can be used to handle page & size query parameters|OPERATION|false |x-spring-paginated|Add org.springframework.data.domain.Pageable to controller method. Can be used to handle page & size query parameters|OPERATION|false
|x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -1,5 +1,5 @@
# RELEASE_VERSION # RELEASE_VERSION
openApiGeneratorVersion=7.7.0-SNAPSHOT openApiGeneratorVersion=7.7.0
# /RELEASE_VERSION # /RELEASE_VERSION
# BEGIN placeholders # BEGIN placeholders

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -1,3 +1,3 @@
# RELEASE_VERSION # RELEASE_VERSION
openApiGeneratorVersion=7.7.0-SNAPSHOT openApiGeneratorVersion=7.7.0
# /RELEASE_VERSION # /RELEASE_VERSION

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<executions> <executions>
<execution> <execution>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<executions> <executions>
<execution> <execution>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<dependencies> <dependencies>
<dependency> <dependency>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<executions> <executions>
<execution> <execution>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<executions> <executions>
<execution> <execution>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<executions> <executions>
<execution> <execution>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -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.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>

View File

@@ -19,7 +19,7 @@ import java.util.List;
X_ACCEPTS("x-accepts", ExtensionLevel.OPERATION, "Specify custom value for 'Accept' header for operation", null), X_ACCEPTS("x-accepts", ExtensionLevel.OPERATION, "Specify custom value for 'Accept' header for operation", null),
X_CONTENT_TYPE("x-content-type", ExtensionLevel.OPERATION, "Specify custom value for 'Content-Type' header for operation", null), X_CONTENT_TYPE("x-content-type", ExtensionLevel.OPERATION, "Specify custom value for 'Content-Type' header for operation", null),
X_CLASS_EXTRA_ANNOTATION("x-class-extra-annotation", ExtensionLevel.MODEL, "List of custom annotations to be added to model", null), X_CLASS_EXTRA_ANNOTATION("x-class-extra-annotation", ExtensionLevel.MODEL, "List of custom annotations to be added to model", null),
X_FIELD_EXTRA_ANNOTATION("x-field-extra-annotation", ExtensionLevel.FIELD, "List of custom annotations to be added to property", null), X_FIELD_EXTRA_ANNOTATION("x-field-extra-annotation", Arrays.asList(ExtensionLevel.FIELD, ExtensionLevel.OPERATION_PARAMETER), "List of custom annotations to be added to property", null),
X_OPERATION_EXTRA_ANNOTATION("x-operation-extra-annotation", ExtensionLevel.OPERATION, "List of custom annotations to be added to operation", null), X_OPERATION_EXTRA_ANNOTATION("x-operation-extra-annotation", ExtensionLevel.OPERATION, "List of custom annotations to be added to operation", null),
X_VERSION_PARAM("x-version-param", ExtensionLevel.OPERATION_PARAMETER, "Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false", null), X_VERSION_PARAM("x-version-param", ExtensionLevel.OPERATION_PARAMETER, "Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false", null),
X_PATTERN_MESSAGE("x-pattern-message", Arrays.asList(ExtensionLevel.FIELD, ExtensionLevel.OPERATION_PARAMETER), "Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable", null), X_PATTERN_MESSAGE("x-pattern-message", Arrays.asList(ExtensionLevel.FIELD, ExtensionLevel.OPERATION_PARAMETER), "Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable", null),

View File

@@ -35,7 +35,7 @@ public abstract class AbstractOpenApiSchema {
* *
* @return an instance of the actual schema/object * @return an instance of the actual schema/object
*/ */
public abstract Map<String, GenericType> getSchemas(); public abstract Map<String, GenericType<?>> getSchemas();
/** /**
* Get the actual instance * Get the actual instance

View File

@@ -824,9 +824,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
return formatDate((Date) param); return formatDate((Date) param);
} {{#jsr310}}else if (param instanceof OffsetDateTime) { } {{#jsr310}}else if (param instanceof OffsetDateTime) {
return formatOffsetDateTime((OffsetDateTime) param); return formatOffsetDateTime((OffsetDateTime) param);
} {{/jsr310}}else if (param instanceof Collection) { } {{/jsr310}}else if (param instanceof Collection<?>) {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for(Object o : (Collection)param) { for(Object o : (Collection<?>)param) {
if(b.length() > 0) { if(b.length() > 0) {
b.append(','); b.append(',');
} }
@@ -852,9 +852,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
// preconditions // preconditions
if (name == null || name.isEmpty() || value == null) return params; if (name == null || name.isEmpty() || value == null) return params;
Collection valueCollection; Collection<?> valueCollection;
if (value instanceof Collection) { if (value instanceof Collection<?>) {
valueCollection = (Collection) value; valueCollection = (Collection<?>) value;
} else { } else {
params.add(new Pair(name, parameterToString(value))); params.add(new Pair(name, parameterToString(value)));
return params; return params;

View File

@@ -191,9 +191,9 @@ public class JSON implements ContextResolver<ObjectMapper> {
visitedClasses.add(modelClass); visitedClasses.add(modelClass);
// Traverse the oneOf/anyOf composed schemas. // Traverse the oneOf/anyOf composed schemas.
Map<String, GenericType> descendants = modelDescendants.get(modelClass); Map<String, GenericType<?>> descendants = modelDescendants.get(modelClass);
if (descendants != null) { if (descendants != null) {
for (GenericType childType : descendants.values()) { for (GenericType<?> childType : descendants.values()) {
if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) { if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) {
return true; return true;
} }
@@ -210,7 +210,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
/** /**
* A map of oneOf/anyOf descendants for each model class. * A map of oneOf/anyOf descendants for each model class.
*/ */
private static Map<Class<?>, Map<String, GenericType>> modelDescendants = new HashMap<>(); private static Map<Class<?>, Map<String, GenericType<?>>> modelDescendants = new HashMap<>();
/** /**
* Register a model class discriminator. * Register a model class discriminator.
@@ -230,7 +230,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
* @param modelClass the model class * @param modelClass the model class
* @param descendants a map of oneOf/anyOf descendants. * @param descendants a map of oneOf/anyOf descendants.
*/ */
public static void registerDescendants(Class<?> modelClass, Map<String, GenericType> descendants) { public static void registerDescendants(Class<?> modelClass, Map<String, GenericType<?>> descendants) {
modelDescendants.put(modelClass, descendants); modelDescendants.put(modelClass, descendants);
} }

View File

@@ -57,7 +57,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
Object deserialized = null; Object deserialized = null;
{{#discriminator}} {{#discriminator}}
Class<?> cls = JSON.getClassForElement(tree, {{classname}}.class); Class<?> cls = JSON.getClassForElement(tree, new {{classname}}().getClass());
if (cls != null) { if (cls != null) {
// When the OAS schema includes a discriminator, use the discriminator value to // When the OAS schema includes a discriminator, use the discriminator value to
// discriminate the anyOf schemas. // discriminate the anyOf schemas.
@@ -99,7 +99,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
// store a list of schema names defined in anyOf // store a list of schema names defined in anyOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public {{classname}}() { public {{classname}}() {
super("anyOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}}); super("anyOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
@@ -144,7 +144,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return {{classname}}.schemas; return {{classname}}.schemas;
} }

View File

@@ -169,7 +169,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
// store a list of schema names defined in oneOf // store a list of schema names defined in oneOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public {{classname}}() { public {{classname}}() {
super("oneOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}}); super("oneOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
@@ -218,7 +218,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return {{classname}}.schemas; return {{classname}}.schemas;
} }

View File

@@ -35,7 +35,7 @@ public abstract class AbstractOpenApiSchema {
* *
* @return an instance of the actual schema/object * @return an instance of the actual schema/object
*/ */
public abstract Map<String, GenericType> getSchemas(); public abstract Map<String, GenericType<?>> getSchemas();
/** /**
* Get the actual instance * Get the actual instance

View File

@@ -824,9 +824,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
return formatDate((Date) param); return formatDate((Date) param);
} {{#jsr310}}else if (param instanceof OffsetDateTime) { } {{#jsr310}}else if (param instanceof OffsetDateTime) {
return formatOffsetDateTime((OffsetDateTime) param); return formatOffsetDateTime((OffsetDateTime) param);
} {{/jsr310}}else if (param instanceof Collection) { } {{/jsr310}}else if (param instanceof Collection<?>) {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for(Object o : (Collection)param) { for(Object o : (Collection<?>)param) {
if(b.length() > 0) { if(b.length() > 0) {
b.append(','); b.append(',');
} }
@@ -852,9 +852,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
// preconditions // preconditions
if (name == null || name.isEmpty() || value == null) return params; if (name == null || name.isEmpty() || value == null) return params;
Collection valueCollection; Collection<?> valueCollection;
if (value instanceof Collection) { if (value instanceof Collection<?>) {
valueCollection = (Collection) value; valueCollection = (Collection<?>) value;
} else { } else {
params.add(new Pair(name, parameterToString(value))); params.add(new Pair(name, parameterToString(value)));
return params; return params;

View File

@@ -191,9 +191,9 @@ public class JSON implements ContextResolver<ObjectMapper> {
visitedClasses.add(modelClass); visitedClasses.add(modelClass);
// Traverse the oneOf/anyOf composed schemas. // Traverse the oneOf/anyOf composed schemas.
Map<String, GenericType> descendants = modelDescendants.get(modelClass); Map<String, GenericType<?>> descendants = modelDescendants.get(modelClass);
if (descendants != null) { if (descendants != null) {
for (GenericType childType : descendants.values()) { for (GenericType<?> childType : descendants.values()) {
if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) { if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) {
return true; return true;
} }
@@ -210,7 +210,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
/** /**
* A map of oneOf/anyOf descendants for each model class. * A map of oneOf/anyOf descendants for each model class.
*/ */
private static Map<Class<?>, Map<String, GenericType>> modelDescendants = new HashMap<>(); private static Map<Class<?>, Map<String, GenericType<?>>> modelDescendants = new HashMap<>();
/** /**
* Register a model class discriminator. * Register a model class discriminator.
@@ -230,7 +230,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
* @param modelClass the model class * @param modelClass the model class
* @param descendants a map of oneOf/anyOf descendants. * @param descendants a map of oneOf/anyOf descendants.
*/ */
public static void registerDescendants(Class<?> modelClass, Map<String, GenericType> descendants) { public static void registerDescendants(Class<?> modelClass, Map<String, GenericType<?>> descendants) {
modelDescendants.put(modelClass, descendants); modelDescendants.put(modelClass, descendants);
} }

View File

@@ -57,7 +57,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
Object deserialized = null; Object deserialized = null;
{{#discriminator}} {{#discriminator}}
Class<?> cls = JSON.getClassForElement(tree, {{classname}}.class); Class<?> cls = JSON.getClassForElement(tree, new {{classname}}().getClass());
if (cls != null) { if (cls != null) {
// When the OAS schema includes a discriminator, use the discriminator value to // When the OAS schema includes a discriminator, use the discriminator value to
// discriminate the anyOf schemas. // discriminate the anyOf schemas.
@@ -99,7 +99,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
// store a list of schema names defined in anyOf // store a list of schema names defined in anyOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public {{classname}}() { public {{classname}}() {
super("anyOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}}); super("anyOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
@@ -144,7 +144,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return {{classname}}.schemas; return {{classname}}.schemas;
} }

View File

@@ -169,7 +169,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
// store a list of schema names defined in oneOf // store a list of schema names defined in oneOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public {{classname}}() { public {{classname}}() {
super("oneOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}}); super("oneOf", {{#isNullable}}Boolean.TRUE{{/isNullable}}{{^isNullable}}Boolean.FALSE{{/isNullable}});
@@ -218,7 +218,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return {{classname}}.schemas; return {{classname}}.schemas;
} }

View File

@@ -54,7 +54,7 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
Object deserialized = null; Object deserialized = null;
{{#discriminator}} {{#discriminator}}
Class<?> cls = JSON.getClassForElement(tree, {{classname}}.class); Class<?> cls = JSON.getClassForElement(tree, new {{classname}}().getClass());
if (cls != null) { if (cls != null) {
// When the OAS schema includes a discriminator, use the discriminator value to // When the OAS schema includes a discriminator, use the discriminator value to
// discriminate the anyOf schemas. // discriminate the anyOf schemas.

View File

@@ -1 +1 @@
{{#isHeaderParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}} @RequestHeader(value = "{{baseName}}", required = {{#required}}true{{/required}}{{^required}}false{{/required}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isHeaderParam}} {{#isHeaderParam}}{{#vendorExtensions.x-field-extra-annotation}}{{{vendorExtensions.x-field-extra-annotation}}} {{/vendorExtensions.x-field-extra-annotation}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}} @RequestHeader(value = "{{baseName}}", required = {{#required}}true{{/required}}{{^required}}false{{/required}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isHeaderParam}}

View File

@@ -1 +1 @@
{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{>paramDoc}} @PathVariable("{{baseName}}"){{>dateTimeParam}}{{#isDeprecated}} @Deprecated{{/isDeprecated}} {{>optionalDataType}} {{paramName}}{{/isPathParam}} {{#isPathParam}}{{#vendorExtensions.x-field-extra-annotation}}{{{vendorExtensions.x-field-extra-annotation}}} {{/vendorExtensions.x-field-extra-annotation}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{>paramDoc}} @PathVariable("{{baseName}}"){{>dateTimeParam}}{{#isDeprecated}} @Deprecated{{/isDeprecated}} {{>optionalDataType}} {{paramName}}{{/isPathParam}}

View File

@@ -1 +1 @@
{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}}{{^isModel}} @RequestParam(value = {{#isMap}}""{{/isMap}}{{^isMap}}"{{baseName}}"{{/isMap}}{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{/isModel}}{{>dateTimeParam}}{{#isDeprecated}} @Deprecated{{/isDeprecated}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}} {{#isQueryParam}}{{#vendorExtensions.x-field-extra-annotation}}{{{vendorExtensions.x-field-extra-annotation}}} {{/vendorExtensions.x-field-extra-annotation}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}}{{^isModel}} @RequestParam(value = {{#isMap}}""{{/isMap}}{{^isMap}}"{{baseName}}"{{/isMap}}{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{/isModel}}{{>dateTimeParam}}{{#isDeprecated}} @Deprecated{{/isDeprecated}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}}

View File

@@ -58,8 +58,6 @@ ext {
httpmime_version = "4.5.14" httpmime_version = "4.5.14"
volley_version = "1.2.1" volley_version = "1.2.1"
junit_version = "4.13.2" junit_version = "4.13.2"
robolectric_version = "4.5.1"
concurrent_unit_version = "0.4.6"
} }
dependencies { dependencies {
@@ -73,8 +71,6 @@ dependencies {
} }
implementation "com.android.volley:volley:${volley_version}" implementation "com.android.volley:volley:${volley_version}"
testImplementation "junit:junit:$junit_version" testImplementation "junit:junit:$junit_version"
testImplementation "org.robolectric:robolectric:${robolectric_version}"
testImplementation "net.jodah:concurrentunit:${concurrent_unit_version}"
} }
publishing { publishing {

View File

@@ -190,7 +190,7 @@ import {{packageName}}.infrastructure.toMultiValue
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!
}}{{#hasFormParams}}mapOf({{#formParams}} }}{{#hasFormParams}}mapOf({{#formParams}}
"{{#lambda.escapeDollar}}{{{baseName}}}{{/lambda.escapeDollar}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{! "{{#lambda.escapeDollar}}{{{baseName}}}{{/lambda.escapeDollar}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{!
}}{{/formParams}}){{/hasFormParams}}{{! }}{{/formParams}}){{/hasFormParams}}{{!
}}{{/hasBodyParam}} }}{{/hasBodyParam}}
val localVariableQuery: MultiValueMap = {{^hasQueryParams}}mutableMapOf() val localVariableQuery: MultiValueMap = {{^hasQueryParams}}mutableMapOf()
@@ -225,7 +225,7 @@ import {{packageName}}.infrastructure.toMultiValue
return RequestConfig( return RequestConfig(
method = RequestMethod.{{httpMethod}}, method = RequestMethod.{{httpMethod}},
path = "{{path}}"{{#pathParams}}.replace("{"+"{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}}, path = "{{path}}"{{#pathParams}}.replace("{"+"{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}},
query = localVariableQuery, query = localVariableQuery,
headers = localVariableHeaders, headers = localVariableHeaders,
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}}, requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},

View File

@@ -92,7 +92,7 @@ import {{packageName}}.infrastructure.*
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!
}}{{#hasFormParams}}mapOf({{#formParams}} }}{{#hasFormParams}}mapOf({{#formParams}}
"{{{baseName}}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{! "{{{baseName}}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{!
}}{{/formParams}}){{/hasFormParams}}{{! }}{{/formParams}}){{/hasFormParams}}{{!
}}{{/hasBodyParam}} }}{{/hasBodyParam}}
val localVariableQuery = {{^hasQueryParams}}mutableMapOf<kotlin.String, kotlin.collections.List<kotlin.String>>() val localVariableQuery = {{^hasQueryParams}}mutableMapOf<kotlin.String, kotlin.collections.List<kotlin.String>>()
@@ -127,7 +127,7 @@ import {{packageName}}.infrastructure.*
val params = mutableMapOf<String, Any>( val params = mutableMapOf<String, Any>(
{{#pathParams}} {{#pathParams}}
"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}{{/isContainer}}, "{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}{{/isContainer}},
{{/pathParams}} {{/pathParams}}
) )

View File

@@ -94,7 +94,7 @@ import {{packageName}}.infrastructure.*
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!
}}{{#hasFormParams}}mapOf({{#formParams}} }}{{#hasFormParams}}mapOf({{#formParams}}
"{{{baseName}}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{! "{{{baseName}}}" to PartConfig(body = {{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}, headers = mutableMapOf({{#contentType}}"Content-Type" to "{{contentType}}"{{/contentType}})),{{!
}}{{/formParams}}){{/hasFormParams}}{{! }}{{/formParams}}){{/hasFormParams}}{{!
}}{{/hasBodyParam}} }}{{/hasBodyParam}}
val localVariableQuery = {{^hasQueryParams}}mutableMapOf<kotlin.String, kotlin.collections.List<kotlin.String>>() val localVariableQuery = {{^hasQueryParams}}mutableMapOf<kotlin.String, kotlin.collections.List<kotlin.String>>()
@@ -129,7 +129,7 @@ import {{packageName}}.infrastructure.*
val params = mutableMapOf<String, Any>( val params = mutableMapOf<String, Any>(
{{#pathParams}} {{#pathParams}}
"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}{{/isContainer}}, "{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}{{/isContainer}},
{{/pathParams}} {{/pathParams}}
) )

View File

@@ -136,7 +136,7 @@ import {{packageName}}.infrastructure.*
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> { fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> {
val vertxClient = WebClient.create(vertx) val vertxClient = WebClient.create(vertx)
val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}})) val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}}))
{{#hasFormParams}}request.putHeader("Content-Type", {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}){{/hasFormParams}} {{#hasFormParams}}request.putHeader("Content-Type", {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}){{/hasFormParams}}
{{#headerParams}}{{{paramName}}}{{^required}}?{{/required}}.apply { request.putHeader("{{baseName}}", {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}})}{{/headerParams}} {{#headerParams}}{{{paramName}}}{{^required}}?{{/required}}.apply { request.putHeader("{{baseName}}", {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}})}{{/headerParams}}
@@ -150,7 +150,7 @@ import {{packageName}}.infrastructure.*
{{#hasFormParams}} {{#hasFormParams}}
val form = io.vertx.core.MultiMap.caseInsensitiveMultiMap(); val form = io.vertx.core.MultiMap.caseInsensitiveMultiMap();
{{#formParams}} {{#formParams}}
{{{paramName}}}{{^required}}?{{/required}}.let { form.add("{{{baseName}}}", {{{paramName}}}{{#isEnum}}.value{{/isEnum}}{{^isString}}.toString(){{/isString}}) } {{{paramName}}}{{^required}}?{{/required}}.let { form.add("{{{baseName}}}", {{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}{{^isString}}.toString(){{/isString}}) }
{{/formParams}} {{/formParams}}
{{/hasFormParams}} {{/hasFormParams}}

View File

@@ -4,6 +4,11 @@
*/ */
enum class {{classname}}(val value: {{dataType}}) { enum class {{classname}}(val value: {{dataType}}) {
{{#allowableValues}}{{#enumVars}} {{#allowableValues}}{{#enumVars}}
{{#enumDescription}}
/**
* {{.}}
*/
{{/enumDescription}}
{{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
{{/enumVars}}{{/allowableValues}} {{/enumVars}}{{/allowableValues}}
} }

View File

@@ -13,6 +13,12 @@ import kotlinx.serialization.Serializable
{{>additionalModelTypeAnnotations}} {{>additionalModelTypeAnnotations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) {
{{#allowableValues}}{{#enumVars}} {{#allowableValues}}{{#enumVars}}
{{#enumDescription}}
/**
* {{.}}
*/
{{/enumDescription}}
@JsonProperty(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) @JsonProperty(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}})
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) @SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}})

View File

@@ -28,6 +28,7 @@
"ext-curl": "*", "ext-curl": "*",
"ext-json": "*", "ext-json": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"doctrine/annotations": "^2.0",
"symfony/validator": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0",
"jms/serializer-bundle": "^5.4", "jms/serializer-bundle": "^5.4",
"symfony/framework-bundle": "^6.4|^7.0" "symfony/framework-bundle": "^6.4|^7.0"

View File

@@ -30,6 +30,20 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}} {{/parentSchema}}
return $this->{{name}}; return $this->{{name}};
} }
/**
* Sets {{name}}.
*
* @param {{{vendorExtensions.x-comment-type}}} ${{name}}{{#description}} {{{.}}}{{/description}}
*
* @return $this
*/
public function {{setter}}({{#vendorExtensions.x-parameter-type}}{{vendorExtensions.x-parameter-type}} {{/vendorExtensions.x-parameter-type}}${{name}}{{^required}} = null{{/required}}): self
{
$this->{{name}} = ${{name}};
return $this;
}
{{#isEnumRef}} {{#isEnumRef}}
/** /**
* Gets {{name}} for serialization. * Gets {{name}} for serialization.
@@ -40,6 +54,24 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}} {{/parentSchema}}
{ {
return $this->{{name}}?->value ? (string) $this->{{name}}->value : null; return $this->{{name}}?->value ? (string) $this->{{name}}->value : null;
} }
/**
* Sets {{name}}.
*
* @param string|{{{vendorExtensions.x-comment-type}}} ${{name}}{{#description}} {{{.}}}{{/description}}
*
* @return $this
*/
public function setDeserialized{{nameInPascalCase}}(string|{{#vendorExtensions.x-comment-type}}{{vendorExtensions.x-comment-type}} {{/vendorExtensions.x-comment-type}}${{name}}{{^required}} = null{{/required}}): self
{
if (is_string(${{name}})) {
${{name}} = {{baseType}}::tryFrom(${{name}});
}
$this->{{name}} = ${{name}};
return $this;
}
{{/isEnumRef}} {{/isEnumRef}}
{{#isContainer}} {{#isContainer}}
@@ -53,26 +85,36 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}} {{/parentSchema}}
public function getSerialized{{nameInPascalCase}}(): array public function getSerialized{{nameInPascalCase}}(): array
{ {
return array_map( return array_map(
static fn ($value) => (string) $value->value, static fn ($value) => $value?->value ? (string) $value->value : null,
$this->test ?? [] $this->{{name}} ?? []
); );
} }
/**
* Sets {{name}}.
*
* @param {{^required}}?{{/required}}array ${{name}}{{#description}} {{{.}}}{{/description}}
*
* @return $this
*/
public function setDeserialized{{nameInPascalCase}}({{^required}}?{{/required}}array ${{name}}{{^required}} = []{{/required}}): self
{
$this->{{name}} = array_map(
static function ($value) {
if (is_string($value)) {
$value = {{baseType}}::tryFrom($value);
}
return $value;
},
${{name}} ?? []
);
return $this;
}
{{/isEnumRef}} {{/isEnumRef}}
{{/items}} {{/items}}
{{/isContainer}} {{/isContainer}}
/**
* Sets {{name}}.
*
* @param {{{vendorExtensions.x-comment-type}}} ${{name}}{{#description}} {{{.}}}{{/description}}
*
* @return $this
*/
public function {{setter}}({{#vendorExtensions.x-parameter-type}}{{vendorExtensions.x-parameter-type}} {{/vendorExtensions.x-parameter-type}}${{name}}{{^required}} = null{{/required}}): self
{
$this->{{name}} = ${{name}};
return $this;
}
{{/vars}} {{/vars}}
} }

View File

@@ -5,30 +5,7 @@
{{/description}} {{/description}}
* @var {{{vendorExtensions.x-comment-type}}} * @var {{{vendorExtensions.x-comment-type}}}
* @SerializedName("{{baseName}}") * @SerializedName("{{baseName}}")
{{#required}}
* @Assert\NotNull()
{{^isPrimitiveType}}
* @Assert\Valid()
{{/isPrimitiveType}}
{{/required}}
{{#isEnum}}
{{#isContainer}}
* @Assert\All({
{{#items}}
* @Assert\Choice({ {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} })
{{/items}}
* })
{{/isContainer}}
{{^isContainer}}
* @Assert\Choice({ {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} })
{{/isContainer}}
{{/isEnum}}
{{#isContainer}} {{#isContainer}}
* @Assert\All({
{{#items}}
* @Assert\Type("{{dataType}}")
{{/items}}
* })
{{#isMap}} {{#isMap}}
{{#items}} {{#items}}
* @Type("array<string, {{dataType}}>") * @Type("array<string, {{dataType}}>")
@@ -37,7 +14,7 @@
{{^isMap}} {{^isMap}}
{{#items}} {{#items}}
{{#isEnumRef}} {{#isEnumRef}}
* @Accessor(getter="getSerialized{{nameInPascalCase}}") * @Accessor(getter="getSerialized{{nameInPascalCase}}", setter="setDeserialized{{nameInPascalCase}}")
* @Type("array<string>") * @Type("array<string>")
{{/isEnumRef}} {{/isEnumRef}}
{{^isEnumRef}} {{^isEnumRef}}
@@ -48,66 +25,95 @@
{{/isContainer}} {{/isContainer}}
{{^isContainer}} {{^isContainer}}
{{#isDate}} {{#isDate}}
* @Assert\Type("\Date")
* @Type("DateTime<'Y-m-d'>") * @Type("DateTime<'Y-m-d'>")
{{/isDate}} {{/isDate}}
{{#isDateTime}} {{#isDateTime}}
* @Assert\Type("\DateTime"))
* @Type("DateTime") * @Type("DateTime")
{{/isDateTime}} {{/isDateTime}}
{{#isEnumRef}} {{#isEnumRef}}
* @Accessor(getter="getSerialized{{nameInPascalCase}}") * @Accessor(getter="getSerialized{{nameInPascalCase}}", setter="setDeserialized{{nameInPascalCase}}")
* @Type("string") * @Type("string")
{{/isEnumRef}} {{/isEnumRef}}
{{^isDate}} {{^isDate}}
{{^isDateTime}} {{^isDateTime}}
{{^isEnumRef}} {{^isEnumRef}}
* @Assert\Type("{{dataType}}")
* @Type("{{dataType}}") * @Type("{{dataType}}")
{{/isEnumRef}} {{/isEnumRef}}
{{/isDateTime}} {{/isDateTime}}
{{/isDate}} {{/isDate}}
{{/isContainer}}
*/
{{#required}}
#[Assert\NotNull]
{{^isPrimitiveType}}
#[Assert\Valid]
{{/isPrimitiveType}}
{{/required}}
{{#isEnum}}
{{#isContainer}}
#[Assert\All([
{{#items}}
new Assert\Choice([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]),
{{/items}}
])]
{{/isContainer}}
{{^isContainer}}
#[Assert\Choice([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}])]
{{/isContainer}}
{{/isEnum}}
{{#isContainer}}
#[Assert\All([
{{#items}}
new Assert\Type("{{dataType}}"),
{{/items}}
])]
{{/isContainer}}
{{^isContainer}}
{{#isDate}}
#[Assert\Type("\DateTime")]
{{/isDate}}
{{#isDateTime}}
#[Assert\Type("\DateTime")]
{{/isDateTime}}
{{^isDate}}
{{^isDateTime}}
{{^isEnumRef}}
#[Assert\Type("{{dataType}}")]
{{/isEnumRef}}
{{/isDateTime}}
{{/isDate}}
{{/isContainer}} {{/isContainer}}
{{#hasValidation}} {{#hasValidation}}
{{#maxLength}} {{#maxLength}}
* @Assert\Length( #[Assert\Length(max: {{.}})]
* max = {{.}}
* )
{{/maxLength}} {{/maxLength}}
{{#minLength}} {{#minLength}}
* @Assert\Length( #[Assert\Length(min: {{.}})]
* min = {{.}}
* )
{{/minLength}} {{/minLength}}
{{#minimum}} {{#minimum}}
{{#exclusiveMinimum}} {{#exclusiveMinimum}}
* @Assert\GreaterThan({{minimum}}) #[Assert\GreaterThan({{minimum}})]
{{/exclusiveMinimum}} {{/exclusiveMinimum}}
{{^exclusiveMinimum}} {{^exclusiveMinimum}}
* @Assert\GreaterThanOrEqual({{minimum}}) #[Assert\GreaterThanOrEqual({{minimum}})]
{{/exclusiveMinimum}} {{/exclusiveMinimum}}
{{/minimum}} {{/minimum}}
{{#maximum}} {{#maximum}}
{{#exclusiveMaximum}} {{#exclusiveMaximum}}
* @Assert\LessThan({{maximum}}) #[Assert\LessThan({{maximum}})]
{{/exclusiveMaximum}} {{/exclusiveMaximum}}
{{^exclusiveMaximum}} {{^exclusiveMaximum}}
* @Assert\LessThanOrEqual({{maximum}}) #[Assert\LessThanOrEqual({{maximum}})]
{{/exclusiveMaximum}} {{/exclusiveMaximum}}
{{/maximum}} {{/maximum}}
{{#pattern}} {{#pattern}}
* @Assert\Regex("/{{.}}/") #[Assert\Regex("/{{.}}/")]
{{/pattern}} {{/pattern}}
{{#maxItems}} {{#maxItems}}
* @Assert\Count( #[Assert\Count(max: {{.}})]
* max = {{.}}
* )
{{/maxItems}} {{/maxItems}}
{{#minItems}} {{#minItems}}
* @Assert\Count( #[Assert\Count(min: {{.}})]
* min = {{.}}
* )
{{/minItems}} {{/minItems}}
{{/hasValidation}} {{/hasValidation}}
*/
protected {{{vendorExtensions.x-parameter-type}}} ${{name}} = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}; protected {{{vendorExtensions.x-parameter-type}}} ${{name}} = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}};

View File

@@ -101,12 +101,16 @@ class JmsSerializer implements SerializerInterface
case '\DateTime': case '\DateTime':
return is_null($data) ? null :new DateTime($data); return is_null($data) ? null :new DateTime($data);
default: default:
if (is_null($data)) {
return null;
}
if (!class_exists($type)) { if (!class_exists($type)) {
throw new RuntimeException(sprintf("Type %s is unsupported", $type)); throw new RuntimeException(sprintf("Type %s is unsupported", $type));
} }
$reflectionClass = new \ReflectionClass($type); $reflectionClass = new \ReflectionClass($type);
if (!$reflectionClass->implementsInterface('\BackedENum')) { if (!$reflectionClass->implementsInterface('\BackedEnum')) {
throw new RuntimeException(sprintf("Type %s is unsupported", $type)); throw new RuntimeException(sprintf("Type %s is unsupported", $type));
} }

View File

@@ -186,11 +186,12 @@ class {{classname}}:
{{#hasProduces}} {{#hasProduces}}
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[{{#produces}} _header_params['Accept'] = self.api_client.select_header_accept(
'{{{mediaType}}}'{{^-last}}, {{/-last}}{{/produces}} [{{#produces}}
] '{{{mediaType}}}'{{^-last}}, {{/-last}}{{/produces}}
) ]
)
{{/hasProduces}} {{/hasProduces}}
{{#hasConsumes}} {{#hasConsumes}}

View File

@@ -232,7 +232,7 @@ class ApiClient:
body = self.sanitize_for_serialization(body) body = self.sanitize_for_serialization(body)
# request url # request url
if _host is None: if _host is None or self.configuration.ignore_operation_servers:
url = self.configuration.host + resource_path url = self.configuration.host + resource_path
else: else:
# use server/host defined in path or operation instead # use server/host defined in path or operation instead

View File

@@ -24,6 +24,9 @@ class Configuration:
"""This class contains various settings of the API client. """This class contains various settings of the API client.
:param host: Base url. :param host: Base url.
:param ignore_operation_servers
Boolean to ignore operation servers for the API client.
Config will use `host` as the base url regardless of the operation servers.
:param api_key: Dict to store API key(s). :param api_key: Dict to store API key(s).
Each entry in the dict specifies an API key. Each entry in the dict specifies an API key.
The dict key is the name of the security scheme in the OAS specification. The dict key is the name of the security scheme in the OAS specification.
@@ -148,6 +151,7 @@ conf = {{{packageName}}}.Configuration(
{{/hasHttpSignatureMethods}} {{/hasHttpSignatureMethods}}
server_index=None, server_variables=None, server_index=None, server_variables=None,
server_operation_index=None, server_operation_variables=None, server_operation_index=None, server_operation_variables=None,
ignore_operation_servers=False,
ssl_ca_cert=None, ssl_ca_cert=None,
retries=None, retries=None,
*, *,
@@ -166,6 +170,9 @@ conf = {{{packageName}}}.Configuration(
self.server_operation_variables = server_operation_variables or {} self.server_operation_variables = server_operation_variables or {}
"""Default server variables """Default server variables
""" """
self.ignore_operation_servers = ignore_operation_servers
"""Ignore operation servers
"""
self.temp_folder_path = None self.temp_folder_path = None
"""Temp file folder for downloading files """Temp file folder for downloading files
""" """

View File

@@ -3269,6 +3269,52 @@ public class SpringCodegenTest {
.bodyContainsLines("if (b.value.equals(value)) {"); .bodyContainsLines("if (b.value.equals(value)) {");
} }
@Test
public void testHasOperationParameterExtraAnnotation_issue18224() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_18224.yaml");
final SpringCodegen codegen = new SpringCodegen();
codegen.setOpenAPI(openAPI);
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(SpringCodegen.DATE_LIBRARY, "java8-localdatetime");
codegen.additionalProperties().put(INTERFACE_ONLY, "true");
codegen.additionalProperties().put(USE_RESPONSE_ENTITY, "false");
codegen.additionalProperties().put(DELEGATE_PATTERN, "true");
codegen.additionalProperties().put(REQUEST_MAPPING_OPTION, "api_interface");
codegen.additionalProperties().put(SPRING_CONTROLLER, "true");
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
input.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
generator.setGenerateMetadata(false); // skip metadata generation
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("TestApi.java"));
javaFileAssert
.assertMethod("_postToTest")
.assertParameter("groupObj")
.assertParameterAnnotations()
.containsWithName("com.test.MyAnnotationInPath")
.toParameter()
.toMethod()
.assertParameter("token")
.assertParameterAnnotations()
.containsWithName("com.test.MyAnnotationInQuery")
.toParameter()
.toMethod()
.assertParameter("clientId")
.assertParameterAnnotations()
.containsWithName("com.test.MyAnnotationInHeader");
}
@Test @Test
public void testHasOperationExtraAnnotation_issue15822() throws IOException { public void testHasOperationExtraAnnotation_issue15822() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); File output = Files.createTempDirectory("test").toFile().getCanonicalFile();

View File

@@ -23,6 +23,38 @@ import static org.openapitools.codegen.languages.features.BeanValidationFeatures
public class KotlinServerCodegenTest { public class KotlinServerCodegenTest {
@Test
public void enumDescription() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
KotlinServerCodegen codegen = new KotlinServerCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(LIBRARY, JAXRS_SPEC);
new DefaultGenerator().opts(new ClientOptInput()
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/enum-description.yaml"))
.config(codegen))
.generate();
String outputPath = output.getAbsolutePath() + "/src/main/kotlin/org/openapitools/server";
Path petApi = Paths.get(outputPath + "/models/Type.kt");
assertFileNotContains(
petApi,
"import jakarta.ws.rs.*",
"import jakarta.ws.rs.core.Response",
"@jakarta.annotation.Generated(value = arrayOf(\"org.openapitools.codegen.languages.KotlinServerCodegen\")"
);
// assert, that all enum values have a description comment
assertFileContains(
petApi,
"Pegasi b is a gas giant exoplanet that orbits a G-type star",
"Mercury is the first planet from the Sun and the smallest in the Solar System",
"The planet we all live on"
);
}
@Test @Test
public void javaxImports() throws IOException { public void javaxImports() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); File output = Files.createTempDirectory("test").toFile().getCanonicalFile();

View File

@@ -0,0 +1,36 @@
openapi: 3.0.0
info:
title: Sample API
description: API description in Markdown.
version: 1.0.0
paths:
/ponies:
get:
summary: Returns all animals.
description: Optional extended description in Markdown.
responses:
200:
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pony'
components:
schemas:
Pony:
type: object
properties:
type:
$ref: '#/components/schemas/Type'
Type:
type: string
enum:
- Earth
- Pegasi
- Mercury
x-enum-descriptions:
- The planet we all live on
- Pegasi b is a gas giant exoplanet that orbits a G-type star
- Mercury is the first planet from the Sun and the smallest in the Solar System

View File

@@ -0,0 +1,66 @@
openapi: 3.0.3
info:
title: sample spec
version: 1.0.0
paths:
/test/{groupObj}:
post:
summary: Post to test
description: ''
operationId: postToTest
parameters:
- $ref: '#/components/parameters/groupObj'
- $ref: '#/components/parameters/token'
- $ref: '#/components/parameters/clientId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ObjTest'
responses:
201:
description: success
components:
parameters:
groupObj:
in: path
name: groupObj
required: true
schema:
type: string
pattern: "[a-zA-Z]"
x-pattern-message: "Only letters"
x-field-extra-annotation: '@com.test.MyAnnotationInPath'
token:
in: query
name: token
required: true
schema:
type: string
pattern: "[0-9a-fA-F]"
x-pattern-message: "Only numbers and letters a-f"
x-field-extra-annotation: '@com.test.MyAnnotationInQuery'
clientId:
in: header
name: clientId
required: true
schema:
type: string
pattern: "\\d"
x-pattern-message: "Only numbers"
x-field-extra-annotation: '@com.test.MyAnnotationInHeader'
schemas:
ObjTest:
description: A model to return
type: object
properties:
field1:
type: integer
format: int64
field2:
type: string
pattern: "\\w"
x-pattern-message: "Only letters, numbers and underscore"
field3:
type: string
pattern: "\\w"

View File

@@ -2202,6 +2202,13 @@ components:
- $ref: '#/components/schemas/Pig' - $ref: '#/components/schemas/Pig'
discriminator: discriminator:
propertyName: className propertyName: className
mammal_anyof:
anyOf:
- $ref: '#/components/schemas/whale'
- $ref: '#/components/schemas/zebra'
- $ref: '#/components/schemas/Pig'
discriminator:
propertyName: className
whale: whale:
type: object type: object
properties: properties:

View File

@@ -1981,6 +1981,13 @@ components:
- $ref: '#/components/schemas/Pig' - $ref: '#/components/schemas/Pig'
discriminator: discriminator:
propertyName: className propertyName: className
mammal_anyof:
anyOf:
- $ref: '#/components/schemas/whale'
- $ref: '#/components/schemas/zebra'
- $ref: '#/components/schemas/Pig'
discriminator:
propertyName: className
whale: whale:
type: object type: object
properties: properties:

View File

@@ -15,7 +15,7 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<name>openapi-generator-project</name> <name>openapi-generator-project</name>
<!-- RELEASE_VERSION --> <!-- RELEASE_VERSION -->
<version>7.7.0-SNAPSHOT</version> <version>7.7.0</version>
<!-- /RELEASE_VERSION --> <!-- /RELEASE_VERSION -->
<url>https://github.com/openapitools/openapi-generator</url> <url>https://github.com/openapitools/openapi-generator</url>
<scm> <scm>

View File

@@ -250,11 +250,12 @@ class AuthApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -493,11 +494,12 @@ class AuthApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -255,11 +255,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'image/gif' [
] 'image/gif'
) ]
)
# authentication setting # authentication setting
@@ -517,11 +518,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -788,11 +790,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1058,11 +1061,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1328,11 +1332,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1598,11 +1603,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1868,11 +1874,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2138,11 +2145,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2408,11 +2416,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2678,11 +2687,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:

View File

@@ -297,11 +297,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -567,11 +568,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -912,11 +914,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:

View File

@@ -327,11 +327,12 @@ class HeaderApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -311,11 +311,12 @@ class PathApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -289,11 +289,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -600,11 +601,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -893,11 +895,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1152,11 +1155,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1411,11 +1415,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1671,11 +1676,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1931,11 +1937,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2190,11 +2197,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2449,11 +2457,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2708,11 +2717,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -228,7 +228,7 @@ class ApiClient:
body = self.sanitize_for_serialization(body) body = self.sanitize_for_serialization(body)
# request url # request url
if _host is None: if _host is None or self.configuration.ignore_operation_servers:
url = self.configuration.host + resource_path url = self.configuration.host + resource_path
else: else:
# use server/host defined in path or operation instead # use server/host defined in path or operation instead

View File

@@ -33,6 +33,9 @@ class Configuration:
"""This class contains various settings of the API client. """This class contains various settings of the API client.
:param host: Base url. :param host: Base url.
:param ignore_operation_servers
Boolean to ignore operation servers for the API client.
Config will use `host` as the base url regardless of the operation servers.
:param api_key: Dict to store API key(s). :param api_key: Dict to store API key(s).
Each entry in the dict specifies an API key. Each entry in the dict specifies an API key.
The dict key is the name of the security scheme in the OAS specification. The dict key is the name of the security scheme in the OAS specification.
@@ -84,6 +87,7 @@ conf = openapi_client.Configuration(
access_token=None, access_token=None,
server_index=None, server_variables=None, server_index=None, server_variables=None,
server_operation_index=None, server_operation_variables=None, server_operation_index=None, server_operation_variables=None,
ignore_operation_servers=False,
ssl_ca_cert=None, ssl_ca_cert=None,
retries=None, retries=None,
*, *,
@@ -102,6 +106,9 @@ conf = openapi_client.Configuration(
self.server_operation_variables = server_operation_variables or {} self.server_operation_variables = server_operation_variables or {}
"""Default server variables """Default server variables
""" """
self.ignore_operation_servers = ignore_operation_servers
"""Ignore operation servers
"""
self.temp_folder_path = None self.temp_folder_path = None
"""Temp file folder for downloading files """Temp file folder for downloading files
""" """

View File

@@ -250,11 +250,12 @@ class AuthApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -493,11 +494,12 @@ class AuthApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -255,11 +255,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'image/gif' [
] 'image/gif'
) ]
)
# authentication setting # authentication setting
@@ -517,11 +518,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -788,11 +790,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1058,11 +1061,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1328,11 +1332,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1598,11 +1603,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -1868,11 +1874,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2138,11 +2145,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2408,11 +2416,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'application/json' [
] 'application/json'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -2678,11 +2687,12 @@ class BodyApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:

View File

@@ -297,11 +297,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -567,11 +568,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:
@@ -912,11 +914,12 @@ class FormApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# set the HTTP header `Content-Type` # set the HTTP header `Content-Type`
if _content_type: if _content_type:

View File

@@ -327,11 +327,12 @@ class HeaderApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -311,11 +311,12 @@ class PathApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -289,11 +289,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -600,11 +601,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -893,11 +895,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1152,11 +1155,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1411,11 +1415,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1671,11 +1676,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -1931,11 +1937,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2190,11 +2197,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2449,11 +2457,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting
@@ -2708,11 +2717,12 @@ class QueryApi:
# set the HTTP header `Accept` # set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept( if 'Accept' not in _header_params:
[ _header_params['Accept'] = self.api_client.select_header_accept(
'text/plain' [
] 'text/plain'
) ]
)
# authentication setting # authentication setting

View File

@@ -228,7 +228,7 @@ class ApiClient:
body = self.sanitize_for_serialization(body) body = self.sanitize_for_serialization(body)
# request url # request url
if _host is None: if _host is None or self.configuration.ignore_operation_servers:
url = self.configuration.host + resource_path url = self.configuration.host + resource_path
else: else:
# use server/host defined in path or operation instead # use server/host defined in path or operation instead

View File

@@ -33,6 +33,9 @@ class Configuration:
"""This class contains various settings of the API client. """This class contains various settings of the API client.
:param host: Base url. :param host: Base url.
:param ignore_operation_servers
Boolean to ignore operation servers for the API client.
Config will use `host` as the base url regardless of the operation servers.
:param api_key: Dict to store API key(s). :param api_key: Dict to store API key(s).
Each entry in the dict specifies an API key. Each entry in the dict specifies an API key.
The dict key is the name of the security scheme in the OAS specification. The dict key is the name of the security scheme in the OAS specification.
@@ -84,6 +87,7 @@ conf = openapi_client.Configuration(
access_token=None, access_token=None,
server_index=None, server_variables=None, server_index=None, server_variables=None,
server_operation_index=None, server_operation_variables=None, server_operation_index=None, server_operation_variables=None,
ignore_operation_servers=False,
ssl_ca_cert=None, ssl_ca_cert=None,
retries=None, retries=None,
*, *,
@@ -102,6 +106,9 @@ conf = openapi_client.Configuration(
self.server_operation_variables = server_operation_variables or {} self.server_operation_variables = server_operation_variables or {}
"""Default server variables """Default server variables
""" """
self.ignore_operation_servers = ignore_operation_servers
"""Ignore operation servers
"""
self.temp_folder_path = None self.temp_folder_path = None
"""Temp file folder for downloading files """Temp file folder for downloading files
""" """

View File

@@ -592,9 +592,9 @@ public class ApiClient extends JavaTimeFormatter {
return formatDate((Date) param); return formatDate((Date) param);
} else if (param instanceof OffsetDateTime) { } else if (param instanceof OffsetDateTime) {
return formatOffsetDateTime((OffsetDateTime) param); return formatOffsetDateTime((OffsetDateTime) param);
} else if (param instanceof Collection) { } else if (param instanceof Collection<?>) {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for(Object o : (Collection)param) { for(Object o : (Collection<?>)param) {
if(b.length() > 0) { if(b.length() > 0) {
b.append(','); b.append(',');
} }
@@ -620,9 +620,9 @@ public class ApiClient extends JavaTimeFormatter {
// preconditions // preconditions
if (name == null || name.isEmpty() || value == null) return params; if (name == null || name.isEmpty() || value == null) return params;
Collection valueCollection; Collection<?> valueCollection;
if (value instanceof Collection) { if (value instanceof Collection<?>) {
valueCollection = (Collection) value; valueCollection = (Collection<?>) value;
} else { } else {
params.add(new Pair(name, parameterToString(value))); params.add(new Pair(name, parameterToString(value)));
return params; return params;

View File

@@ -179,9 +179,9 @@ public class JSON implements ContextResolver<ObjectMapper> {
visitedClasses.add(modelClass); visitedClasses.add(modelClass);
// Traverse the oneOf/anyOf composed schemas. // Traverse the oneOf/anyOf composed schemas.
Map<String, GenericType> descendants = modelDescendants.get(modelClass); Map<String, GenericType<?>> descendants = modelDescendants.get(modelClass);
if (descendants != null) { if (descendants != null) {
for (GenericType childType : descendants.values()) { for (GenericType<?> childType : descendants.values()) {
if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) { if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) {
return true; return true;
} }
@@ -198,7 +198,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
/** /**
* A map of oneOf/anyOf descendants for each model class. * A map of oneOf/anyOf descendants for each model class.
*/ */
private static Map<Class<?>, Map<String, GenericType>> modelDescendants = new HashMap<>(); private static Map<Class<?>, Map<String, GenericType<?>>> modelDescendants = new HashMap<>();
/** /**
* Register a model class discriminator. * Register a model class discriminator.
@@ -218,7 +218,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
* @param modelClass the model class * @param modelClass the model class
* @param descendants a map of oneOf/anyOf descendants. * @param descendants a map of oneOf/anyOf descendants.
*/ */
public static void registerDescendants(Class<?> modelClass, Map<String, GenericType> descendants) { public static void registerDescendants(Class<?> modelClass, Map<String, GenericType<?>> descendants) {
modelDescendants.put(modelClass, descendants); modelDescendants.put(modelClass, descendants);
} }

View File

@@ -46,7 +46,7 @@ public abstract class AbstractOpenApiSchema {
* *
* @return an instance of the actual schema/object * @return an instance of the actual schema/object
*/ */
public abstract Map<String, GenericType> getSchemas(); public abstract Map<String, GenericType<?>> getSchemas();
/** /**
* Get the actual instance * Get the actual instance

View File

@@ -135,7 +135,7 @@ public class Example extends AbstractOpenApiSchema {
} }
// store a list of schema names defined in oneOf // store a list of schema names defined in oneOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public Example() { public Example() {
super("oneOf", Boolean.FALSE); super("oneOf", Boolean.FALSE);
@@ -160,7 +160,7 @@ public class Example extends AbstractOpenApiSchema {
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return Example.schemas; return Example.schemas;
} }

View File

@@ -592,9 +592,9 @@ public class ApiClient extends JavaTimeFormatter {
return formatDate((Date) param); return formatDate((Date) param);
} else if (param instanceof OffsetDateTime) { } else if (param instanceof OffsetDateTime) {
return formatOffsetDateTime((OffsetDateTime) param); return formatOffsetDateTime((OffsetDateTime) param);
} else if (param instanceof Collection) { } else if (param instanceof Collection<?>) {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for(Object o : (Collection)param) { for(Object o : (Collection<?>)param) {
if(b.length() > 0) { if(b.length() > 0) {
b.append(','); b.append(',');
} }
@@ -620,9 +620,9 @@ public class ApiClient extends JavaTimeFormatter {
// preconditions // preconditions
if (name == null || name.isEmpty() || value == null) return params; if (name == null || name.isEmpty() || value == null) return params;
Collection valueCollection; Collection<?> valueCollection;
if (value instanceof Collection) { if (value instanceof Collection<?>) {
valueCollection = (Collection) value; valueCollection = (Collection<?>) value;
} else { } else {
params.add(new Pair(name, parameterToString(value))); params.add(new Pair(name, parameterToString(value)));
return params; return params;

View File

@@ -179,9 +179,9 @@ public class JSON implements ContextResolver<ObjectMapper> {
visitedClasses.add(modelClass); visitedClasses.add(modelClass);
// Traverse the oneOf/anyOf composed schemas. // Traverse the oneOf/anyOf composed schemas.
Map<String, GenericType> descendants = modelDescendants.get(modelClass); Map<String, GenericType<?>> descendants = modelDescendants.get(modelClass);
if (descendants != null) { if (descendants != null) {
for (GenericType childType : descendants.values()) { for (GenericType<?> childType : descendants.values()) {
if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) { if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) {
return true; return true;
} }
@@ -198,7 +198,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
/** /**
* A map of oneOf/anyOf descendants for each model class. * A map of oneOf/anyOf descendants for each model class.
*/ */
private static Map<Class<?>, Map<String, GenericType>> modelDescendants = new HashMap<>(); private static Map<Class<?>, Map<String, GenericType<?>>> modelDescendants = new HashMap<>();
/** /**
* Register a model class discriminator. * Register a model class discriminator.
@@ -218,7 +218,7 @@ public class JSON implements ContextResolver<ObjectMapper> {
* @param modelClass the model class * @param modelClass the model class
* @param descendants a map of oneOf/anyOf descendants. * @param descendants a map of oneOf/anyOf descendants.
*/ */
public static void registerDescendants(Class<?> modelClass, Map<String, GenericType> descendants) { public static void registerDescendants(Class<?> modelClass, Map<String, GenericType<?>> descendants) {
modelDescendants.put(modelClass, descendants); modelDescendants.put(modelClass, descendants);
} }

View File

@@ -46,7 +46,7 @@ public abstract class AbstractOpenApiSchema {
* *
* @return an instance of the actual schema/object * @return an instance of the actual schema/object
*/ */
public abstract Map<String, GenericType> getSchemas(); public abstract Map<String, GenericType<?>> getSchemas();
/** /**
* Get the actual instance * Get the actual instance

View File

@@ -135,7 +135,7 @@ public class Example extends AbstractOpenApiSchema {
} }
// store a list of schema names defined in oneOf // store a list of schema names defined in oneOf
public static final Map<String, GenericType> schemas = new HashMap<>(); public static final Map<String, GenericType<?>> schemas = new HashMap<>();
public Example() { public Example() {
super("oneOf", Boolean.FALSE); super("oneOf", Boolean.FALSE);
@@ -156,7 +156,7 @@ public class Example extends AbstractOpenApiSchema {
} }
@Override @Override
public Map<String, GenericType> getSchemas() { public Map<String, GenericType<?>> getSchemas() {
return Example.schemas; return Example.schemas;
} }

View File

@@ -38,8 +38,6 @@ ext {
httpmime_version = "4.5.14" httpmime_version = "4.5.14"
volley_version = "1.2.1" volley_version = "1.2.1"
junit_version = "4.13.2" junit_version = "4.13.2"
robolectric_version = "4.5.1"
concurrent_unit_version = "0.4.6"
} }
dependencies { dependencies {
@@ -53,8 +51,6 @@ dependencies {
} }
implementation "com.android.volley:volley:${volley_version}" implementation "com.android.volley:volley:${volley_version}"
testImplementation "junit:junit:$junit_version" testImplementation "junit:junit:$junit_version"
testImplementation "org.robolectric:robolectric:${robolectric_version}"
testImplementation "net.jodah:concurrentunit:${concurrent_unit_version}"
} }
publishing { publishing {

Some files were not shown because too many files have changed in this diff Show More