* Add setting for generating the oneOf interfaces as sealed interfaces
* Generate samples
* Add internal java17 additionalProperty setting
* Move samples to highlight that they do not use the petstore
* Align documentation
* Update samples
* Align documentation
* Update mustache files and samples to change gradle settings to java17
* [php] Backport #21458 to php client
Fixes#21485
Credits to @jozefbriss
* [php] Fix deprecation warning when running integration tests
OpenAPI\Client\FakeHttpClient::setResponse(): Implicitly marking parameter $response as nullable is deprecated, the explicit nullable type must be used instead
---------
Co-authored-by: simonhammes <simonhammes@users.noreply.github.com>
* [Bugfix][Maven-Plugin] Bugfix for remote input specs with parameters
If the inputSpec was a web address that contained parameters, code generation would fail, because the filepath would contain illegal characters, since the code inside the if-block would be skipped. A side effect of this was, that in the log and in the filename in linux the parameters would be leaked, which could potentially sensitive information like Gitlab Access Tokens
* [Test][Gradle Plugin] Update GenerateTaskDslTest.kt
Extended the Test for testing remote inputSpecs with urlParams, a case that caused problems in the maven plugin.
* add bearer capability
* avoid using shared state
* revert needless change
* Revert authentication changes from unused root Java/api.mustache template
* applied change to correct lib type
* updated test files
* made security method more generic for flexibility
* regenerated samples
* further cleanup
* code style
* regenerated samples
* made header assignment more explicit, per each method
* fixed extra comma
* fixed commas, regenerated samples
* moved header population to utility method
* moved static class inside main class
* regenerated samples
* added comments, fixed indentation
* regenerated samples
---------
Co-authored-by: Ilya Nemtsev <ilyanemtsev@192.168.1.34>
* [kotlin-spring] add a Spring type converter for enum values #21564
* [kotlin-spring] simplify unit test for inner enum converter
* update samples
* code review feedback; move containsEnums to ModelUtils
* code review feedback; provide comment for generated EnumConverterConfiguration.kt
* update samples
---------
Co-authored-by: Chris Gual <cgual@omnidian.com>
* [java-spring] provide a clarifying comment for the generated EnumConverterConfiguration class
* update samples
---------
Co-authored-by: Chris Gual <cgual@omnidian.com>
* Oat++ Server Generator (C++)
* Fixed for support for newest OpenAPI version.
* ALPHA not STABLE.
* Fixed for support for newest OpenAPI version.
* Added github workflow & changed to OA3 Petstore.
* Good catch on adding the Workflow.
* Might help to update the samples.
* Set C++ Standard the CMake way.
* Would be easier if there was a .pc file.
* oatpp.lib.
* Add ws2.
* This probably doesn't work, need to take a time out.
* Fix image upload for content-type image
* update samples
* add test case in spec and update samples
* update bitrise stack so we get xcpretty 0.4.1
* Revert "add test case in spec and update samples"
This reverts commit 92202dd850.
* [req] Allow models and apis list properties to span multi-lines and include white space (#19628)
* Add comment for DefaultGenerator.getPropertyAsSet
* Fix some variable names in DefaultGeneratorTest.testGenerateMultiLinePropertiesIssue19628
---------
Co-authored-by: Chris Gual <cgual@omnidian.com>
* Changes so that the tests use one test engine (junit) rather than switching between two (junit and testng)
* Update outdated samples
* Correct remaining missed assertEquals clauses (expected - actual misplaced)
* [JavaSpring] Fix when openapi spec file has array of files
The isArray is not checked for non-reactive isFile condition. This is remediated.
* update samples
---------
Co-authored-by: Siddharth Wagle <SidWagz@users.noreply.github.com>
* Add rust-server-deprecated generator in preparation for hyper1 upgrade to rust-server generator
* [Rust Server] Fix spacing in `Cargo.mustache` (#17876)
* [Rust Server] Update dependency versions in `Cargo.mustache` (#17876)
* [Rust Server] Update templates so generated client and server compile (#17876)
* [Rust Server] Get `server` example to compile (#17876)
* [Rust Server] Update `client` example to compile (#17876)
* [Rust Server] Update `bin/cli.rs` to compile (#17876)
* Revert changes to use typed auth in rust-server. Run sample generation.
* Hyper1 fixup compilation errors in all examples
* Add tests to all examples, clippy, tests, cli-bin, run examples
* Use headers Auth structs
* Fixup various clippy lints
* Move more Service impl to use BoxBody
* Reduce generic restriction on some Service impl where possible
* Appease clippy lints in rust 1.88
---------
Co-authored-by: Azriel Hoh <azriel@healthpoint.co.nz>
* php-nextgen - Fix flatten() to support arrays of files in multipart/form-data
Previously, FormDataProcessor::flatten() unconditionally passed all values through ObjectSerializer::toString(),
which caused an error when flattening arrays containing file resources (e.g. for OpenAPI
multipart/form-data definitions with `type: array`, `items: type: string, format: binary`).
This change adds a check for is_resource() to preserve stream handles without serialization,
ensuring correct behavior when uploading multiple files in a single request.
* php-nextgen - Fix flatten() to support arrays of files in multipart/form-data - samples
* fixed inconsistencies with the dart-dio json_serializable string binary response types
* update deserialize template to handle responseFile
* regenerate samples
* only convert return_type to Uint8List
* remove unused imports from previous changes
* fixed issues where import wouldn't get included
* specific unit test for binary response
* reverted changes to nested generators
* removed 2 additional php modifications
* regen samples
Fix issue where period-delimited model names (e.g. microsoft.graph.fido2AuthenticationMethod)
were being converted to unwieldy names with "Period" substitutions. Now periods are replaced
with underscores like hyphens, resulting in cleaner and more idiomatic Rust identifiers.
Fixes#15254
* fix: add support for discriminator in oneOf schemas and update model imports
* chore: generate samples
* fix: enhance model imports for oneOf arrays in mustache templates
* fix: correct import formatting in mustache templates and TypeScript files
* Add deprecation markers
* Move inputSpec (avoid sharing with other generators)
* Generate samples
* Refactor unit tests
* Add test helper method
* Revert "Add test helper method"
This reverts commit d3935e87d9.
* Assert number of expected @deprecated
* make Pair immutable and in google-code-style
* apply google-code-style to JavaTimeFormatter (to make it consistent with most other auto-generated java)
* move upperCaseBearer to ctor (scheme is final and private; only needs to be fixed once); also replaced Optional with ternary (perf and cleaner code)
* apply google-code-style to Authentication to make it consistent with rest of auth code
* fresh samples
* Handle date parameters in the URL path
* Reformat template and add cast for date fields
* Change code structure by moving path tranformations to assignment
Couldn't get handlebars to format the inline replaces in a sane way
without collapsing everything onto one very ugly line. This way keeps
some sane template formatting while still outputting workable code.
* Regenerate samples after merge
* Updated param checking
* Try a new commit after manually re-logging into CircleCI
* typescript-fetch: use `type` modifier on imports for `discriminator.mappedModels`
This ensures that the generated code works when `--verbatimModuleSyntax` is enabled for the TypeScript compiler.
Regular imports already use the `type` modifier, so this should not be a breaking change.
* update samples
* Validate pyproject.toml of echo client python sample
* Use PEP-508 compatible version constraint for `requires-python` key
* Update samples
* Move job to petstore workflow
* Update generated sample
* Use equals or greater than operator instead of greater than
* Update samples
* [cpp-rest-sdk] fix enum values being used instead of names
* [cpp-rest-sdk] remove unnecessary prefix for enum classes
* [cpprest-sdk]: use _XPLATSTR for string_t on Windows
* feat(php): add support for 'off' variable naming convention in AbstractPhpCodegen
* feat(php-laravel): add tests for issue 21334 with API and model definitions
* feat(php-laravel): update variableNamingConvention option in php-laravel help file to include 'off' as a valid value
* feat: enhance variableNamingConvention options to include 'off' and detailed descriptions in documentation
* feat(php): update variableNamingConvention from 'off' to 'original' in AbstractPhpCodegen
* feat: include php-laravel-issue-21334 in workflow triggers for push and pull_request events
Changes Date.parse to Date.iso8601 to fix incorrect type coercion in OneOf contexts. Previously, arbitrary strings matching Date.parse's lenient pattern (e.g., "ABC1") were incorrectly coerced to dates (2025-06-01), when they should have remained as strings.
For example:
- "ABC1" was parsed as Date(2025-06-01) instead of remaining "ABC1"
- This occurred because Date.parse treats the first char as month ('A'=1)
and remaining digits as day
The fix ensures only ISO8601 formatted strings (e.g. "2025-06-02") are parsed as dates, improving type safety and preventing unexpected coercion of string values.
* fix: update axum generated multipart requests to own the Multipart or Body
Notes: &Multipart cannot access fields, as we need mutable access.
* chore: run the updated rust-axum sample
* chore: run the updated rust-axum sample (2)
Notes: Ran
./mvnw clean package || exit
./bin/generate-samples.sh
./bin/configs/*.yaml || exit
./bin/utils/export_docs_generators.sh || exit
* chore: fix inconsistent lifetimes
Notes: Multipart should be owned; normal request remains borrowed
* chore: rerun axum samples
* feat(angular): add util "provideApi" for standalone applications (Angular 17 and above)
* feat(angular): update README with new provideApi usage examples for Angular applications
* feat(angular): update README to reflect new provideApi import path and usage examples
* feat(angular): add support for README_beforeV17 and update provideApi return type
* feat(angular): add support for README_beforeV17 and update provideApi return type
* feat(angular): add support for README_beforeV17 and update provideApi return type
* fix: correct casing in DuplicateTest and FooDuplicateTest headers
* feat(angular): add provideApi function and update README with usage examples
* Convert pyproject.toml template to the format expected by Poetry >=2.0
(https://python-poetry.org/blog/announcing-poetry-2.0.0)
* Update samples
* Add option to fallback to Poetry 1.x style pyproject.toml
* Generate new docs and samples
* Place project.urls section a bit further down, so that it doesn't clash with other sections
* Update samples
* Adds ordered routes to go-server router
* Generate and fix test
* Newline
* Readd escaping
* Fixes go router unit test
* Updates tests, one more time
* correct sanitize_for_serialization in python generator, fixes#18106
The method did not consider the objects created for oneOf schemata. If one of the cases was a list, to_dict would return it instead of something that has an items() method.
* generate new samples
* fix: #20878 Provide " as member" where needed
- Generate new samples
- Add tests for all effected python versions
- Ran tests with success
Commands used to verify:
./bin/generate-samples.sh ./bin/configs/python*
mvn verify -Psamples
mvn integration-test -f modules/openapi-generator/pom.xml -Dtest=org.openapitools.codegen.python.PythonPydanticV1ClientCodegenTest -e
mvn integration-test -f modules/openapi-generator/pom.xml -Dtest=org.openapitools.codegen.python.PythonClientCodegenTest -e
* remove 3.8 tests
* use localhost
* update tests
* update test
---------
Co-authored-by: Robert Plummer <rplummer@sequel.ae>
recent commit 40894382fc already improved
that method: before that other commit it was juste impossible to query
a endpoint with a response type that was something else than
application/json or application/xml. With that commit it became possible
to query such endpoint provided that the client declare in its Accept
header that it can cope with */* (or provided that the client omitted
that header altogether).
But there were still cases badly handled. For instance if an endpoint
returns a response of type image/png and that it receives a query with
header "Accept: image/png", then it would reply with 406.
To avoid any other issue with type resolution, this commit revamps the
getOutputFormat function more thoroughly and does it by implementing
the specification available at
https://httpwg.org/specs/rfc9110.html#field.accept ), which means that
the format accepted by the client are ordered by the relative weights
specified it specified.
PR #21261 added support for endpoint with response of type text/plain
or even image/png.
This commit adds such endpoint so that:
- the way those are supported is clearer (as it is now directly visible
in the generated sample files)
- if a future commit impacts this part of the generation it will be easier
to assess that impact
* add asJsonObject method to OAIEnum class to fix enum handling in query parameters
* update samples
---------
Co-authored-by: William Cheng <wing328hk@gmail.com>
* [php-symfony] Never return 406 when user accepts */*
When a query has header "Accept" set to "*/*" it means it accepts
everything. It is hence weird to return a 406.
This patch ensures it does not occur: when the query accepts everything
then we take any produced type.
This fixes#13334. This also partly makes the open PR #15560 obsolete
(or at least, it provides a workaround)
* [php-symfony] Don't crash at runtime on null convertFormat
$this->convertFormat may return "null". When it's the case we end up
calling
...->serialize($data, null);
but this crashes at runtime because that serialize method declares that
the 2nd parameter is of type "string" (so null is not accepted).
With this patch we avoid having an error 500. Instead we return something
that makes perfect sense when the OpenApi specification declares a content
of type "text/plain" and that the returned value is for instance a string,
an int, or a boolean.
* [php Symfony] fix return type for non json/xml api
This fixes the generated returned type of controller methods for
endpoint with a response declared like
content:
text/plain:
schema:
type: <boolean|string|integer|number>
or for
content:
image/png:
schema:
type: string
format: binary
Without this commit the generated method *had to* return a value that
matched "array|object|null", which does not work in this case.
This commit makes it possible to return the proper type.
* [rust] support model/maps as deep/explode params
* [rust] add tests for rust deep objects
* [rust] detect normal non deep objects
* [rust] distinguish model and object
* [rust] fix objects as params for hyper
* Chores : update $request->bool to $request->boolean
$request->bool is not a laravel function should be $request->boolean()
* Chores : update FakeController.php $request->boolean()
* [kotlin] Added path sanitization in javadoc comments
* added sample as regression test
* Added samples/client/others/kotlin-jvm-okhttp-path-comments to github workflow
* Make all Java ApiClients in templates extendable
* Make all Java ApiClients in samples extendable
* Fix compilation of enum constructor
* Fix compilation of enum constructor in templates
Static analysis tools such as PHPStan report errors when dynamic calls are used
for static methods.
```
ERROR Dynamic call to static method PHPUnit\Framework\Assert::assertEquals().
```
According to the source code of PHPUnit
(https://github.com/sebastianbergmann/phpunit/blob/9.5.0/src/Framework/Assert.php)
the function is indeed static.
```php
public static function assertTrue($condition, string $message = ''): void
```
This change updates to PHP Flight test template `register_routes_test.mustache`
to use static calls for PHPUnit assertions.
* [cpp-rest-sdk] support serializing models as parameters
This fixes the code generation for the cases where the model is referenced as a parameter
* [cpprest-sdk] avoid newlines when no model import
* feature: implement deepObject query params as per documentation.
ClosesOpenAPITools/openapi-generator#19342.
* chore: regenerate samples.
* chore: symplify code (via @joscha)
* chore: regenerate samples
* test: add integration test for typescript-angular deepObject query params
* fix: typo in the integration tests path
* chore: use node v18 for integration tests
* chore: make ES6 compliant
* chore: make test name semantically accurate
* chore: regenerate samples
* test: add angular v16 deep-object test
* chore: delete previous bespoke test for deep objects (uses test introduced in 71629f8d9a instead)
* chore: restore missing OAS for deep object API tests
* test: move angular deepObject tests to v19 and delete v16 ones
* test: atomic deepObject test on service rather than integration with app component
* chore: clean up superfluous import
* [cpp-rest-sdk] fix finding of the crypto libraries
This fixes finding of the crypto for cpprest sdk via find_library. It also bumps the minimum CMake version to 3.10 to avoid deprecation warnings
* docs: add myself as a technical committee member
The dev container fails to build because of the outdated docker-in-docker feature. This updates the docker-in-docker and fixes the build. I also updated the docker compose references in the docs.
* Optimize HashSet Initialization
Noticed this while debugging - we can avoid wasting memory/cpu creating 16 buckets when we only need one or a few.
* generate samples
* use Arrays.asList
* fix spring multipart optional parameters
* use optional only in not required params
* remove debug line
---------
Co-authored-by: Jaime Sanchez <jaime.sanchezf@externos.santalucia.es>
Co-authored-by: William Cheng <wing328hk@gmail.com>
* [cpprestsdk] Support passing enum request parameters
* Add a fake endpoint to test enum request parameters
* Add auto-generated sample codes
* Update to date with master branch
---------
Co-authored-by: leslizhang <453688819@qq.com>
* respect useJakartaEE in jersey3
* useJakarteEE=true in jersey3 samples
* don't force jakarta package for jersey3
* adjust whitespace between jersey2 and jersey3
* enforce useJakartaEe for jersey3, warn on misuse for jersey 2
* set useJakartaEe for jersey3, generate samples
* Align indentation
* Add equals and hashcode to singleRequestParameter static class
* Add missing sample updates that were affected by new imports
* add restclient sample
* update FILES, chmod=+x
* Update samples with jakarta annotations
* Updates samples
---------
Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
* Fix for allof multi model with only metadata fields
* Update samples
* fixed compiler errors in java 17 and lower
* refactored isMetadataOnlySchema to ModelUtils.java
* Fixes so that a oneOf schema with a single sub-schema is simplified when SIMPLIFY_ONEOF_ANYOF is set to true
* Adjusts oneOf_array test to ensure that it is generated as an interface instead of being simplified
* Update ruby samples so that they no longer refer to a model that is now gone due to the schema being simplified
* fix(rust): Fixed Rust model files not matching module imports causing compiler errors
* chore(rust): Update samples with a duplicate model test
* update samples
---------
Co-authored-by: Ross Sullivan <rosssullivan101@gmail.com>
* fix: Support PathParams not of primitive types for Go in generated tests
Signed-off-by: Paul Horton <phorton@sonatype.com>
* use tabs consistently
---------
Signed-off-by: Paul Horton <phorton@sonatype.com>
* Add useResponseAsReturnType option to kotlin, jvm-retrofit2 and coroutines api template (#15491)
* Add useResponseAsReturnType flag to kotlin-jvm-retrofit2-coroutines.yaml sample
* Generate sample
* fix(typescript-angular): enable "exactOptionalPropertyTypes" and ensure assignments align with type definition
* fix(typescript-angular): update condition checks to explicitly compare with undefined
* chore(gradle): add autogenerated properties file for OpenAPI Generator
* [BUG][kotlin-spring] Fix defaultValue for RequestHeader is not generated (#20504)
* revert apiDelegate changes
* fix: fix unresolved reference for enum type
* check if enum_values are existing
If no enum_values are given for in a serverUrl, the check must be ignored.
* update samples
---------
Co-authored-by: William Cheng <wing328hk@gmail.com>
The gradle.properties.mustache template was empty. Removing this override allow to specify gradleProperties while using native library
Co-authored-by: Ronan Pozzi <ronan-pozzi@asys.fr>
* fix/ x-enum-varnames in python
* make x-enum-varnames examples more clear
* make x enum varname usage more explicit
* fix tests
* trigger tests
* trigger tests once again...
* fix more tests
* [PHP] - Add FormDataProcessor to handle nested ModelInterface data
* Generating samples
* Updates php-nextgen and psr-18
* Adds tests
* Some more tests
* One last test
* Updating files
* Fixing diff
* Test fix
* Updating samples
* [swift6][client] All models conform to Codable so this method should not be needed anymore
* [swift6][client] All models conform to Codable so this method should not be needed anymore
* feat: add test-array endpoint and TestArrayResponse schema to oneOf.yaml
* feat: enhance oneOf handling in TypeScript code generators with string and array support
* fix: correct type checks for string and object arrays in modelOneOf.mustache
* refactor: remove oneOfStringEnums handling and simplify oneOf logic in TypeScript code generators
* chore: update samples
* refactor: remove unnecessary string oneOf checks in TypeScriptFetchClientCodegen
* Make the OpenAPINormalizer configurable
Add comment to force rebuild
* Add documentation of NORMALIZER_CLASS
* Use default normalizeSchema() method and add a new skipNormalization method
* super.normalizedSchema() can proceed
* [julia] better serverside validation code
Updating the code generated for julia server to add more checks in the validation stage of incoming requests. Particularly adds checks for request body and required parameters. Updates the generated models with some helper methods that are used in validation filter.
* bump OpenAPI.jl version to use for CI
* Added HttpClient5 flavour to Java OpenFeign client generator.
* Converted templates intendation to spaces.
* Added the new sample folder to GH wf so that the CI can test the change.
* Added the missing auto-generated docs/samples files.
* Converted indentation to spaces also in the modified Java class.
* [PHP] - Add range HTTP code support
* Adding response body to 200
* Fix diff; update php-nextgen sample
* Working on unit tests
* Removes dangling files
* Finalize tests
* Remove dangling files
* Add tests for no response body exception
* fix(crystal): fix typos in Crystal templates
* fix(crystal): various fixes for partial_oneof_module.mustache Crystal template
1. `class << self` doesn't exist in Crystal, you must prefix class methods with `self.`
2. use double quotes for String litterals (simple quotes are for Char litterals)
3. global `private` keyword doesn't exist in Crystal, you must prefix private methods with `private`
4. you must specify types when using `each_with_object({})`
* fix(crystal): add isKeyInCookie in Crystal configuration.mustache
* fix(crystal): wrap `rescue` in a `begin`
* fix(crystal): use Spectator shard to run tests (`described_class` is not available in Crystal std lib)
* fix(crystal): dry tests
* fix(crystal): enable some API tests, mark others as pending
* fix(crystal): update samples
* fix(crystal): update sample app specs
* fix(crystal): install development dependencies
* [julia] fix regex escape on server codegen
Fixed escaping of regex patterns on julialang server codegen.
* add comment for the escapeRegex method
* simplify
* Keep static middleware when options contain no middleware field
* Regenerate samples
* Fix indentation and quotes
* Extract middleware merge logic into function
* Regenerate samples
* Simplify extracted functions
* Regenerate samples
* Fix: Pass static config when no options are given for inversify
* Fix: Allow overriding http api with options
* Regenerate samples
* Use default parameter for default middlware merge strategy
* Throw exception for failed match within switch block
* formParams.mustache should contain @FormParam, not @QueryParam (#20991)
* updated samples; form parameters are declared using @FormParam, not @QueryParam (#20991)
* Fix for problems when a nullable parameter has a default value
When a default value is present the parameter is moved to non-nullable. This works because we could replace the null with a default value. This will actually set the default value.
* Adds (optional) validation to the beans.
Option to set: `useBeanValidation` to `true`. This will insert validation rules from the `jakarta.validation` package much like it does with the spring generator.
Aso sneaked in `JsonProperty` annotations in order to more formally adhere to the name in the spec as opposed to configuring ObjectMappers in order to translate names to match the spec.
* Update samples
* Fix for required headerParams
* issue-20804: Add nullability annotations to Java generated clients
Motivation:
Be able to use generated clients in code checked by tools like NullAway.
* issue-20804: Add nullability annotations to Java generated clients
Motivation:
Be able to use generated clients in code checked by tools like NullAway.
* issue-20804: Add nullability annotations to Java generated clients
Motivation:
Be able to use generated clients in code checked by tools like NullAway.
The openapi 2.0 spec did not support bearer authentication but it was
added in openapi 3.0. In order to support client generation that
includes support for bearerAuth, this change adds a new feature to the
OpenapiNormalizer so that it can be configured to look for a specific
securityDefinition name and convert it to bearerAuth.
* [kotlin-spring] Generate @Valid annotation on all RequestParts/Params for Multipart requests when useBeanValidation=true
* [kotlin-spring] Fix failing test
The test was failing because of the newly added @Valid and an assert which is not correct anymore.
* Drop support for python 3.8 and add support for 3.13 in python generator templates
* Update docs
* Test samples without python 3.8 and with 3.13
* Generate samples
* Wrap Complex Type
* update
* Add java doc and update test
* change default wrapComplexType to true
* add protobuf-schema-config-complex to CI
* add service proto to address CI failure
* Output of CLI commands per PR comments
* Rebuilding PHP examples, PSR-18
* Rebuilding PHP examples
* Adds explanation for ::flatten_array(); optimized array_is_list pollyfill
* [PHP] Fix converting objects to formdata
* flatten_array -> flattenArray to match code style
* Adds unit test
* Revert "Output of CLI commands per PR comments"
This reverts commit 2eaa93731c.
* Includes php-nextgen; tightens up ::toFormValue()
* Missing ArrayAccess import
* Adds test for refactored ObjectSerializer::toFormValue()
* [Swift][client] add identifier to each request
* [Swift][client] add identifier to each request
* [Swift][client] CI first build the projects then run the unit tests
* fix(openapi-generator): fixes GlobalSettings class to avoid ClassCastException when GlobalSettings#log is invoked
* fix(openapi-generator): sets GlobalSettings log level to debug
* Add Filter by tag and method under OpenAPINormalizer
* Update message for invalid filters
* Update customization documentation with new filters
* Add comment for new code block
* [java] generateClientAsBean for restclient and webclient
Added possibility to generate restclient and webclient as a @Component in the same fashion as resttemplate.
Fix#17885Fix#19229
* - Samples
Prior to this commit, a JS client generated with skipDefaultUserAgent
enabled results in a src/ApiClient.js file that doesn't define
this.defaultHeaders. This breaks because this.defaultHeaders is later
directly passed to a superagent request which expects an object and not
undefined.
Fixes#20791.
* Cleanup the existing model template
* `{{^isContainer}}foobar{{/isContainer}}{{^isContainer}}` is equivalent to `{{^isContainer}}foobar`
* Add indentations to make it easier to read the template. The generated code is
uglier, but it is ok since users are encouraged to reformat anyway
* Add a default value for non-required lists
Closes https://github.com/OpenAPITools/openapi-generator/issues/20777
* protobuf enum prefix use upper underscore
Add json name parameters and change parameter field name to snake case
* rerun generate-samples.sh
* Add CI test
* rebase master
---------
Co-authored-by: xil <xil@uber.com>
* added intellij-codestyle.xml and sample of it being applied to some java code-gen classes
* code-format changes ONLY
* few more format changes since last merge with master
* applied code-style to all java one last time
- [ ] Have you provided a full/minimal spec to reproduce the issue?
- [ ] Have you validated the input using an OpenAPI validator ([example](https://apitools.dev/swagger-parser/online/))?
- [ ] Have you validated the input using an OpenAPI validator?
- [ ] Have you [tested with the latest master](https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-to-test-with-the-latest-master-of-openapi-generator) to confirm the issue still exists?
- [ ] Have you searched for related issues/PRs?
- [ ] What's the actual output vs expected output?
(For Windows users, please run the script in [Git BASH](https://gitforwindows.org/))
(For Windows users, please run the script in [WSL](https://learn.microsoft.com/en-us/windows/wsl/install))
Commit all changed files.
This is important, as CI jobs will verify _all_ generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example `./bin/generate-samples.sh bin/configs/java*`.
IMPORTANT: Do **NOT** purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
- [ ] File the PR against the [correct branch](https://github.com/OpenAPITools/openapi-generator/wiki/Git-Branches): `master` (upcoming `7.x.0` minor release - breaking changes with fallbacks), `8.0.x` (breaking changes without fallbacks)
- [ ] If your PR solves a reported issue, reference it using [GitHub's linking syntax](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) (e.g., having `"fixes #123"` present in the PR description)
- [ ] If your PR is targeting a particular programming language, @mention the [technical committee](https://github.com/openapitools/openapi-generator/#62---openapi-generator-technical-committee) members, so they are more likely to review the pull request.
[](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.openapitools%22%20AND%20a%3A%22openapi-generator%22)
[](https://join.slack.com/t/openapi-generator/shared_invite/zt-2wmkn4s8g-n19PJ99Y6Vei74WMUIehQA)
[](https://join.slack.com/t/openapi-generator/shared_invite/zt-36ucx4ybl-jYrN6euoYn6zxXNZdldoZA)
[](https://twitter.com/oas_generator)
[](https://gitpod.io/#https://github.com/OpenAPITools/openapi-generator)
#### Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity
@@ -89,39 +92,55 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se
- [6.3 - History of OpenAPI Generator](#63---history-of-openapi-generator)
- [7 - License](#7---license)
- [Sponsors](#sponsors)
- [Thank you to our bronze sponsors!](#thank-you-to-our-bronze-sponsors)
- [Thank you GoDaddy for sponsoring the domain names, Linode for sponsoring the VPS, Checkly for sponsoring the API monitoring and Gradle for sponsoring Develocity](#thank-you-godaddy-for-sponsoring-the-domain-names-linode-for-sponsoring-the-vps-checkly-for-sponsoring-the-api-monitoring-and-gradle-for-sponsoring-develocity)
- [Overview](#overview)
- [Table of contents](#table-of-contents)
- [1 - Installation](#1---installation)
- [1.1 - Compatibility](#11---compatibility)
- [1.2 - Artifacts on Maven Central](#12---artifacts-on-maven-central)
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
(if you're on Windows, replace the last command with `java -jar modules\openapi-generator-cli\target\openapi-generator-cli.jar generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php -o c:\temp\php_api_client`)
<!-- RELEASE_VERSION -->
You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.11.0/openapi-generator-cli-7.11.0.jar)
You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.14.0/openapi-generator-cli-7.14.0.jar)
<!-- /RELEASE_VERSION -->
To get a list of **general** options available, please run `java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help generate`
@@ -1109,6 +1128,7 @@ Here is a list of template creators:
* C# Azure functions: @Abrhm7786
* C# NancyFX: @mstefaniuk
* C++ (Qt5 QHttpEngine): @etherealjoy
* C++ Oat++: @Kraust
* C++ Pistache: @sebymiano
* C++ Restbed: @stkrwork
* Erlang Server: @galaxie@nelsonvides
@@ -1139,6 +1159,7 @@ Here is a list of template creators:
* Kotlin (Spring Boot): @dr4ke616
* Kotlin (Vertx): @Wooyme
* Kotlin (JAX-RS): @anttileppa
* Kotlin Misk: @andrewwilsonnew@guiarn
* Kotlin WireMock: @stefankoppier
* NodeJS Express: @YishTish
* PHP Flight: @daniel-sc
@@ -1217,7 +1238,7 @@ If you want to join the committee, please kindly apply by sending an email to te
To customize the default values for containers, one can leverage the option `defaultToEmptyContainer` to customize what to initalize for array/set/map by respecting the default values in the spec
Set optional array and map default value to an empty container
Note: not all generators support this generator's option (e.g. --additional-properties defaultToEmptyContainer="?array" in CLI) so please test to confirm. Java generators are the first to implement this feature. We welcome PRs to support this option in other generators. Related PR: https://github.com/OpenAPITools/openapi-generator/pull/21269
## Name Mapping
One can map the property name using `nameMappings` option and parameter name using `parameterNameMappings` option to something else. Consider the following schema:
@@ -504,7 +530,7 @@ Another useful option is `inlineSchemaOptions`, which allows you to customize ho
- `MAP_ITEM_SUFFIX` set the map item suffix
- `SKIP_SCHEMA_REUSE=true` is a special value to skip reusing inline schemas during refactoring
- `REFACTOR_ALLOF_INLINE_SCHEMAS=true` will restore the 6.x (or below) behaviour to refactor allOf inline schemas into $ref. (v7.0.0 will skip the refactoring of these allOf inline schemas by default)
- `RESOLVE_INLINE_ENUMS=true` will refactor inline enum definitions into $ref
- `RESOLVE_INLINE_ENUMS=true` will refactor inline enum definitions into $ref. This must be activated to allow the renaming of inline enum definitions using `inlineSchemaMappings`.
- `FILTER`: When set to `operationId:addPet|getPetById` for example, it will add `x-internal:true` to operations with operationId not equal to addPet/getPetById (which will have x-internal set to false) so that these operations marked as internal won't be generated.
- `NORMALIZER_CLASS`: Set to full classname of a class extending the default org.openapitools.codegen.OpenAPINormalizer. It allows customization of the default normalizer.
The `FILTER` parameter allows selective inclusion of API operations based on specific criteria. It applies the `x-internal: true` property to operations that do **not** match the specified values, preventing them from being generated.
### Available Filters
- **`operationId`**
When set to `operationId:addPet|getPetById`, operations **not** matching `addPet` or `getPetById` will be marked as internal (`x-internal: true`), and excluded from generation. Matching operations will have `x-internal: false`.
- **`method`**
When set to `method:get|post`, operations **not** using `GET` or `POST` methods will be marked as internal (`x-internal: true`), preventing their generation.
- **`tag`**
When set to `tag:person|basic`, operations **not** tagged with `person` or `basic` will be marked as internal (`x-internal: true`), and will not be generated.
- `SET_BEARER_AUTH_FOR_NAME`: When set to the name of an openapi 2.0 securityDefinition, that securityDefinition will be converted to the openapi 3.0 bearerAuth securityScheme.
@@ -494,6 +494,8 @@ Here is a working sample that put's together all of this.
- The default project structure now follows the SPM (Swift Package Manager) structure. To revert to the old structure, set the `useSPMFileStructure` flag to `false`.
- The former `{{projectName}}API` is now called `{{projectName}}APIConfiguration`.
- You can now set a request interceptor and retrier by configuring `OpenAPIClient.shared.interceptor`, making authenticated requests easier to manage.
- The protocol `JSONEncodable` was renamed to `ParameterConvertible`.
- The flag `useJSONEncodable` was renamed to `useParameterConvertible`.
[](https://join.slack.com/t/openapi-generator/shared_invite/zt-2wmkn4s8g-n19PJ99Y6Vei74WMUIehQA)
[](https://join.slack.com/t/openapi-generator/shared_invite/zt-36ucx4ybl-jYrN6euoYn6zxXNZdldoZA)
## What is the governance structure of the OpenAPI Generator project?
| helpTxt | Generates a C++ API server (based on Oat++) | |
## CONFIG OPTIONS
These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details.
| Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- |
|addExternalLibs|Add the Possibility to fetch and compile external Libraries needed by this Framework.| |true|
|reservedWordPrefix|Prefix to prepend to reserved words in order to avoid conflicts| |r_|
|variableNameFirstCharacterUppercase|Make first character of variable name uppercase (eg. value -> Value)| |true|
@@ -44,7 +44,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|packageName|C# package name (convention: Title.Case).| |Org.OpenAPITools|
|packageTags|Tags to identify the package| |null|
|packageVersion|C# package version.| |1.0.0|
|releaseNote|Release note, default to 'Minor update'.| |Minor update|
|returnICollection|Return ICollection<T> instead of the concrete type.| |false|
|sourceFolder|source folder for generated code| |src|
|targetFramework|The target .NET framework version. To target multiple frameworks, use `;` as the separator, e.g. `netstandard2.1;netcoreapp3.1`|<dl><dt>**netstandard1.3**</dt><dd>.NET Standard 1.3</dd><dt>**netstandard1.4**</dt><dd>.NET Standard 1.4</dd><dt>**netstandard1.5**</dt><dd>.NET Standard 1.5</dd><dt>**netstandard1.6**</dt><dd>.NET Standard 1.6</dd><dt>**netstandard2.0**</dt><dd>.NET Standard 2.0</dd><dt>**netstandard2.1**</dt><dd>.NET Standard 2.1</dd><dt>**net47**</dt><dd>.NET Framework 4.7</dd><dt>**net48**</dt><dd>.NET Framework 4.8</dd><dt>**net8.0**</dt><dd>.NET 8.0 (End of Support 10 November 2026)</dd><dt>**net9.0**</dt><dd>.NET 9.0 (End of Support 12 May 2026)</dd></dl>|net9.0|
@@ -54,6 +53,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|useIntForTimeout|Use int for Timeout (fall back to v7.9.0 templates). This option (for restsharp only) will be deprecated so please migrated to TimeSpan instead.| |false|
|useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false|
|useSourceGeneration|Use source generation where available (only `generichost` library supports this option).| |false|
|useVirtualForHooks|Generate code that exposes public virtual hooks on ApiClient to customize low-level HTTP requests (only `restsharp`. `httpclient` libraries support this option).| |false|
|zeroBasedEnums|Enumerations with string values will start from 0 when true, 1 when false. If not set, enumerations with string values will start from 0 if the first value is 'unknown', case insensitive.| |null|
@@ -38,7 +38,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|<dl><dt>**false**</dt><dd>The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.</dd><dt>**true**</dt><dd>Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.</dd></dl>|true|
|discriminatorCaseSensitive|Whether the discriminator value lookup should be case-sensitive or not. This option only works for Java API client| |true|
|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true|
|enumPropertyNaming|Naming convention for enum properties: 'MACRO_CASE' and 'legacy'| |MACRO_CASE|
|enumPropertyNaming|Naming convention for enum properties: 'MACRO_CASE', 'legacy' and 'original'| |MACRO_CASE|
|enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response.With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|<dl><dt>**false**</dt><dd>No changes to the enum's are made, this is the default option.</dd><dt>**true**</dt><dd>With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.</dd></dl>|false|
|generateBuilders|Whether to generate builders for models| |false|
|generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false|
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.