Compare commits

..

38 Commits

Author SHA1 Message Date
William Cheng
3259bf71e6 3.2.2 release (#869)
* run bin/utils/release_version_update.sh

* comment out ensure-up-to-date script

* run bin/utils/release_version_update_docs.sh

* fix link to lc3
2018-08-22 16:44:31 +08:00
Michael Kotten
526e980a69 [JAXRS] use contextPath variable for @ApplicationPath in RestApplication (#850)
* Use contextPath variable for RestApplication templates
* Update generated RestApplication.java files, as they are skipped by default otherwise
* Update Petstore sample for jaxrs so that CIs can verify the change
2018-08-22 09:15:08 +02:00
Jeremie Bresson
ab09909f99 Add missing import 2018-08-22 06:53:48 +02:00
Matthieu Berthomé
d8b597b168 [DefaultGenerator] consider referenced headers (#863) 2018-08-22 06:07:57 +02:00
Jens Oberender
9bc335b35e Forbiddenapis check and fix (#672)
* Added forbiddenapis check and fixed the findings in the normal code
* Fixed forbiddenapi findings in java templates and samples.
* Generated all samples for Java.
2018-08-22 06:06:01 +02:00
William Cheng
227f2779d7 escape various descriptions in the spec (#866) 2018-08-22 11:48:32 +08:00
William Cheng
2ffda45adf Add https://www.suva.ch/ to the company list (#868) 2018-08-22 10:43:32 +08:00
marcotta
bb2712fe45 Use thread safe manager store dictionary (#864)
Fix crash due to concurrent access of managerStore dictionary.
Swift2 and Swift3 had been enhanced respectively with the following
pull requests: #3873 #5610
2018-08-22 02:27:40 +08:00
Jim Schubert
cbf61d5524 [docker] build files for automated builds (#836) 2018-08-21 23:08:24 +08:00
matthesrieke
39763a8ca7 fix unescaped description in requestBody (#857)
Fix unescaped description in requestBody
2018-08-21 22:28:32 +08:00
Jim Schubert
aa19369466 📝 Remove swagger comment, fix typo in README (#862)
I had previously copied the multi-task description in the gradle
plugin's docs from a response made in an issue. The reference to 'the
old swagger plugin' have no context in the gradle plugin README, so I've
updated that wording.

Also, I found that the link to openapi-generator-cli.sh in the root
README was broken. It pointed to openapi-generator.cli.sh instead of
openapi-generator-cli.sh.
2018-08-21 22:13:55 +08:00
Jérémie Bresson
3f65d6c350 [all] Support for Free-Form Objects (#849)
Consider "additionalProperties: true"

Fixes #796
2018-08-21 12:26:54 +02:00
Yuriy Belenko
99646e6436 [Slim] Update main documentation (#839)
* [Slim] Update main documentation

Kotlin server README has been used as a ref. There are no links to apis and
models docs, because Slim codegen doesn't provide them right now.
Also I'm not sure about white spaces, but we can change it anytime in future.

* [Slim] Refresh samples
2018-08-21 18:25:43 +08:00
Dominik Sumer
450d624474 add possiblity to pass baseOptions to the API Configuration, which will be passed to every fetch call (#642) 2018-08-21 16:25:56 +08:00
OmriHarary
ca0c35aa15 [java-server] Fix improper quoting of default values for query parameters (#708) 2018-08-21 10:17:31 +02:00
Daiki Matsudate
fcfd8ea76e Update swift samples (#738)
* update all swift samples

* fix method name starting with number literal

* better handling of operationId starting with number

* update swift 4 samples
2018-08-21 15:17:56 +08:00
ccozzolino
2044c36398 Adjust client response handler to be backwards compatible with older versions of Vert.x (<3.5) (#854) 2018-08-21 13:12:18 +08:00
Yuriy Belenko
d374e1c160 [Slim] Official htaccess (#838)
* [Slim] Change htaccess to official

Slim docs contains more simple htaccess example.
https://www.slimframework.com/docs/v3/start/web-servers.html#apache-configuration

* [Slim] Refresh samples
2018-08-21 11:59:29 +08:00
Jean-François Côté
ee491a0e5e Fix problems in typescript jquery generator (#801)
* Add missing curly bracket + remove unnecessary `postProcessParameter` because it add 2 time "models."

* Add generated client for samples
2018-08-20 08:44:46 -04:00
Yuriy Belenko
e605882451 [PHP] Add gitignore to AbstractPhpCodegen (#765)
* [PHP] Remove PHP related rules from root gitignore

After conversation with @ackintosh we've agreed that every PHP codegen
should create it's own `.gitignore`. Client libraries(SDKs) should ignore
`composer.lock` file while server stubs better do opposite.

* [PHP] Set .gitignore as default supporting file

* [PHP] Add default gitignore to Client SDK

* [PHP] Add default gitignore to Laravel

* [PHP] Add default gitignore to Lumen

* [PHP] Add default gitignore to Silex

Seems like issue #663 and pull request #681 missed this security script,
I've changed output path in bin/security/silex-petstore-server.sh.

* [PHP] Update Slim

* [PHP] Add default gitignore to Symfony

I've copied few old rules from root gitignore to local one. These rules
should be reviewed by original SymfonyCodegen authors.

* [PHP] Add default gitignore to Zend

* [PHP] Refresh Openapi3 client samples

* [PHP] Add refs to .gitignore templates collection
2018-08-20 12:16:01 +08:00
Jérémie Bresson
b91c8e17a7 Improve documentation for usage of a generator in an other jar (#817) 2018-08-20 12:15:10 +08:00
Matiss
dcc622d374 Improve Symfony 4.1 compatibility (#830) 2018-08-20 12:11:33 +08:00
Jim Schubert
a3e5edc367 📝 Updating 'help generate' switches in README
Adds new --log-to-stderr as well as a missed option for
--skip-validate-spec.
2018-08-19 21:37:20 -04:00
Jack O'Sullivan
bd7c9e30d3 [cli] Don't log to STDOUT if debug flags are set (#474)
It makes sense that error messages should be written to STDERR and
all others should be written to STDOUT (as shown in #207). However, it
would be convenient to parse the debugging output when the relevant
flags are set.

This change will disable logging to STDOUT and redirect all log messages
to STDERR when any of the debug flags are set. (Resolves #473)
2018-08-19 21:33:49 -04:00
Jim Schubert
62dfb749f1 [gradle-plugin] README notes on multiple specs (#847)
A user asked about how one would approach generating code from multiple
specifications. Adding this information to the README, as it seems
others would find the information helpful. Also explaining how to use
tasks from this plugin as this may not be commonly known or intuitive
beahvior.
2018-08-19 16:17:26 -04:00
Tino Fuhrmann
3b9de3baa3 Added server variable support (#816)
* Added server variable support

* Replaced tabs with 4 spaces
2018-08-19 17:45:55 +08:00
William Cheng
d593988e5d fix erlang optiona/required parameters (#829) 2018-08-19 14:52:21 +08:00
Victor Orlovsky
0191210145 [Java][Rest-assured] Fix generated javadoc and "swagger-annotations" improvement (#831)
Added "@Api" swagger annotation, "nickname" for ApiOperation. 
Fixed javadock for rest-assured client.
2018-08-17 18:15:02 +02:00
William Cheng
0f30a052b2 Add an option to skip "form" model generation (#700)
* add option to generate all models

* update doc

* rename option to skipFormModel

* update petstore samples

* Update doc

* Update samples
2018-08-17 17:22:30 +08:00
Rytis Karpuška
1c6ab3f831 Add localVar prefix to parameterized functions variables in cpprestsdk in order to make name clashing less probable. (#731) 2018-08-16 18:16:58 +08:00
William Cheng
5ffc297a69 Fix Ruby script path in ensure-up-to-date (#823)
* fix ruby script path in ensure-up-to-date

* bin/ruby-client-petstore.sh
2018-08-16 13:59:47 +08:00
Victor Orlovsky
e7340bfe5b [Java][Rest-assured] Fix "invokerPackage" in ApiClient, remove unnecessary @Authorization (#822) 2018-08-16 06:15:15 +02:00
William Cheng
ca651becf8 Add support for multi consumes in inline schema (#789)
* add support for multi consumes in inline schema

* add copyright

* revert redirectTestOutputToFile change in pom.xml
2018-08-16 00:24:19 +08:00
William Cheng
6de09688ad Add auto-generated readme for cpprestsdk client (#814)
* add auto-generated readme for cpprestsdk client

* update cpprest client sample

* remove error message from cmake
2018-08-16 00:23:48 +08:00
William Cheng
94806b8036 update release table (#818) 2018-08-16 00:23:27 +08:00
Michael Kotten
fa52826c24 [JAXRS-spec] Add option useSwaggerAnnotations (#813) 2018-08-15 18:05:47 +02:00
Victor Orlovsky
7b8f51a465 [JAVA][Rest-assured] add more information about operations (#815)
Add swagger annotations to client and set default baseReqSpec and baseContextConsumer in ApiClient
2018-08-15 17:56:14 +02:00
Jérémie Bresson
79b993e6d5 Prepare version 3.2.2-SNAPSHOT (#810) 2018-08-14 13:38:18 +02:00
1242 changed files with 20839 additions and 18098 deletions

21
.gitignore vendored
View File

@@ -59,6 +59,12 @@ samples/client/petstore/qt5cpp/PetStore/PetStore
samples/client/petstore/qt5cpp/PetStore/Makefile
samples/client/petstore/qt5cpp/PetStore/PetStore.pro.user
# cpprestsdk
samples/client/petstore/cpp-restsdk/CMakeCache.txt
samples/client/petstore/cpp-restsdk/CMakeFiles/
samples/client/petstore/cpp-restsdk/Makefile
samples/client/petstore/cpp-restsdk/cmake_install.cmake
#Java/Android
**/.gradle
samples/client/petstore/java/hello.txt
@@ -87,21 +93,6 @@ samples/client/petstore/java/jersey2-java6/project/
samples/client/petstore/java/jersey2-java8/project/
samples/client/petstore/java/jersey2/project/
#PHP
samples/client/petstore/php/OpenAPIToolsClient-php/composer.lock
samples/client/petstore/php/OpenAPIToolsClient-php/vendor/
samples/client/petstore/silex/SwaggerServer/composer.lock
samples/client/petstore/silex/SwaggerServer/venodr/
**/vendor/
**/composer.lock
#PHP-Symfony
samples/server/petstore/php-symfony/SymfonyBundle-php/Tests/cache/
samples/server/petstore/php-symfony/SymfonyBundle-php/Tests/logs/
#PHP-laravel
samples/server/petstore/php-laravel/node_modules
# Perl
samples/client/petstore/perl/deep_module_test/

36
.hub.cli.dockerfile Normal file
View File

@@ -0,0 +1,36 @@
## The builder labeled image acts as a transient container which is meant to
## hold all non-artifact code.
##
## You can build _just_ this part with:
## docker --target builder -t container-name:builder -f .hub.cli.dockerfile .
FROM jimschubert/8-jdk-alpine-mvn:1.0 as builder
RUN set -x && \
apk add --no-cache bash
ENV GEN_DIR /opt/openapi-generator
WORKDIR ${GEN_DIR}
COPY . ${GEN_DIR}
# Pre-compile openapi-generator-cli
RUN mvn -am -pl "modules/openapi-generator-cli" package
## The final (release) image
## The resulting container here only needs the target jar
## and ca-certificates (to be able to query HTTPS hosted specs)
FROM openjdk:8-jre-alpine
ENV GEN_DIR /opt/openapi-generator
RUN apk --no-cache add ca-certificates bash
RUN mkdir -p ${GEN_DIR}/modules/openapi-generator-cli/target
WORKDIR ${GEN_DIR}/modules/openapi-generator-cli/target
COPY --from=builder ${GEN_DIR}/modules/openapi-generator-cli/target/openapi-generator-cli.jar ${GEN_DIR}/modules/openapi-generator-cli/target/openapi-generator-cli.jar
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["help"]

35
.hub.online.dockerfile Normal file
View File

@@ -0,0 +1,35 @@
## The builder labeled image acts as a transient container which is meant to
## hold all non-artifact code.
##
## You can build _just_ this part with:
## docker --target builder -t container-name:builder -f .hub.online.dockerfile .
FROM jimschubert/8-jdk-alpine-mvn:1.0 as builder
RUN set -x && \
apk add --no-cache bash
ENV GEN_DIR /opt/openapi-generator
WORKDIR ${GEN_DIR}
COPY . ${GEN_DIR}
# Pre-compile openapi-generator-online
RUN mvn -am -pl "modules/openapi-generator-online" package
## The final (release) image
## The resulting container here only needs the target jar
FROM openjdk:8-jre-alpine
ENV GEN_DIR /opt/openapi-generator
ENV TARGET_DIR /generator
RUN mkdir -p ${TARGET_DIR}
WORKDIR ${TARGET_DIR}
COPY --from=builder ${GEN_DIR}/modules/openapi-generator-online/target/openapi-generator-*.jar ${TARGET_DIR}/openapi-generator-online.jar
ENV GENERATOR_HOST=http://localhost
EXPOSE 8080
CMD ["java", "-jar", "/generator/openapi-generator-online.jar"]

View File

@@ -9,7 +9,7 @@
<artifactId>openapi-generator-project</artifactId>
<packaging>pom</packaging>
<name>openapi-generator-project</name>
<version>3.2.1</version>
<version>3.2.2</version>
<url>https://github.com/openapi-tools/openapi-generator</url>
<scm>
<connection>scm:git:git@github.com:openapi-tools/openapi-generator.git</connection>

View File

@@ -10,7 +10,7 @@
<artifactId>openapi-generator-project</artifactId>
<packaging>pom</packaging>
<name>openapi-generator-project</name>
<version>3.2.1</version>
<version>3.2.2</version>
<url>https://github.com/openapitools/openapi-generator</url>
<scm>
<connection>scm:git:git@github.com:openapitools/openapi-generator.git</connection>

View File

@@ -10,7 +10,7 @@
<artifactId>openapi-generator-project</artifactId>
<packaging>pom</packaging>
<name>openapi-generator-project</name>
<version>3.2.1</version>
<version>3.2.2</version>
<url>https://github.com/openapitools/openapi-generator</url>
<scm>
<connection>scm:git:git@github.com:openapitools/openapi-generator.git</connection>

View File

@@ -9,7 +9,7 @@
<artifactId>openapi-generator-project</artifactId>
<packaging>pom</packaging>
<name>openapi-generator-project</name>
<version>3.2.1</version>
<version>3.2.2</version>
<url>https://github.com/openapitools/openapi-generator</url>
<scm>
<connection>scm:git:git@github.com:openapitools/openapi-generator.git</connection>

View File

@@ -28,7 +28,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00";

View File

@@ -28,7 +28,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00";

View File

@@ -12,6 +12,7 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import okio.ByteString;
@@ -46,7 +47,7 @@ public class JSONTest {
assertEquals(json.deserialize("\"2015-11-07T03:49:09.356" + getCurrentTimezoneOffset() + "\"", java.sql.Date.class).toString(), date.toString());
// custom date format: without day
DateFormat format = new SimpleDateFormat("yyyy-MM");
DateFormat format = new SimpleDateFormat("yyyy-MM", Locale.ROOT);
apiClient.setSqlDateFormat(format);
String dateStr = "\"2015-11\"";
assertEquals(dateStr, json.serialize(json.deserialize("\"2015-11-07T03:49:09Z\"", java.sql.Date.class)));
@@ -79,7 +80,7 @@ public class JSONTest {
assertEquals(utcDate, json.serialize(date));
// custom datetime format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format);
@@ -190,10 +191,10 @@ public class JSONTest {
public static String getCurrentTimezoneOffset() {
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
Calendar cal = GregorianCalendar.getInstance(tz, Locale.ROOT);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis());
String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
String offset = String.format(Locale.ROOT,"%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
offset = (offsetInMillis >= 0 ? "+" : "-") + offset;
return offset;

View File

@@ -34,7 +34,7 @@ public class ApiClientTest {
assertEquals(dateStr, apiClient.formatDate(apiClient.parseDate("2015-11-07T02:49:09.356-01:00")));
// custom date format: without milli-seconds, custom time zone
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ROOT);
format.setTimeZone(TimeZone.getTimeZone("GMT+10"));
apiClient.setDateFormat(format);
dateStr = "2015-11-07T13:49:09+10:00";

View File

@@ -2,7 +2,7 @@
<div align="center">
[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`3.2.2`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/master.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator)
[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`3.2.3`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/master.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator)
[![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator)
[![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=master)](https://app.shippable.com/github/OpenAPITools/openapi-generator)
[![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=master&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu)
@@ -80,22 +80,18 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se
The OpenAPI Specification has undergone 3 revisions since initial creation in 2010. The openapi-generator project has the following compatibilities with the OpenAPI Specification:
OpenAPI Generator Version | Release Date | OpenAPI Spec compatibility | Notes
---------------------------- | ------------ | -------------------------- | -----
4.0.0 (upcoming major release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/4.0.0-SNAPSHOT/)| TBD | 1.0, 1.1, 1.2, 2.0, 3.0 | Major release with breaking changes (no fallback)
3.3.0 (upcoming minor release)| TBD | 1.0, 1.1, 1.2, 2.0, 3.0 | Minor release (breaking changes with fallbacks)
3.2.2 (current master, upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/3.2.2-SNAPSHOT/)| TBD | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.2.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.1) | 14.08.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.2.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.0) | 06.08.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.1.2](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.1.2) | 25.07.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.1.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.1.1) | 18.07.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.1.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.1.0) | 06.07.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Minor release (breaking changes with fallbacks)
[3.0.3](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.0.3) | 27.06.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.0.2](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.0.2) | 18.06.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.0.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.0.1) | 11.06.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | Bugfix release
[3.0.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.0.0) | 01.06.2018 | 1.0, 1.1, 1.2, 2.0, 3.0 | First release with breaking changes
OpenAPI Generator Version | Release Date | Notes
---------------------------- | ------------ | -----
4.0.0 (upcoming major release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/4.0.0-SNAPSHOT/)| TBD | Major release with breaking changes (no fallback)
3.3.0 (upcoming minor release)| TBD | Minor release (breaking changes with fallbacks)
3.2.3 (current master, upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/3.2.3-SNAPSHOT/)| TBD | Bugfix release
[3.2.2](https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.2) (latest stable release) | 22.08.2018 | Bugfix release
### [1.2 - Artifacts on Maven Central](#table-of-contents)
OpenAPI Spec compatibility: 1.0, 1.1, 1.2, 2.0, 3.0
For old releases, please refer to the [**Release**](https://github.com/OpenAPITools/openapi-generator/releases) page.
## [1.2 - Artifacts on Maven Central](#table-of-contents)
You can find our released artefacts on maven central:
@@ -145,16 +141,16 @@ See the different versions of the [openapi-generator-cli](https://mvnrepository.
If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 8 runtime at a minimum):
JAR location: `http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar`
JAR location: `http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar`
For **Mac/Linux** users:
```sh
wget http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar -O openapi-generator-cli.jar
wget http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar -O openapi-generator-cli.jar
```
For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g.
```
Invoke-WebRequest -OutFile openapi-generator-cli.jar http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.1/openapi-generator-cli-3.2.1.jar
Invoke-WebRequest -OutFile openapi-generator-cli.jar http://central.maven.org/maven2/org/openapitools/openapi-generator-cli/3.2.2/openapi-generator-cli-3.2.2.jar
```
After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage.
@@ -167,7 +163,7 @@ export PATH=${JAVA_HOME}/bin:$PATH
### Launcher Script
One downside to manual jar downloads is that you don't keep up-to-date with the latest released version. We have a Bash launcher script at [bin/utils/openapi-generator.cli.sh](./bin/utils/openapi-generator.cli.sh) which resolves this issue.
One downside to manual jar downloads is that you don't keep up-to-date with the latest released version. We have a Bash launcher script at [bin/utils/openapi-generator.cli.sh](./bin/utils/openapi-generator-cli.sh) which resolves this issue.
To install the launcher script, copy the contents of the script to a location on your path and make the script executable.
@@ -410,13 +406,14 @@ SYNOPSIS
[--invoker-package <invoker package>]
[(-l <language> | --lang <language>)]
[--language-specific-primitives <language specific primitives>...]
[--library <library>] [--model-name-prefix <model name prefix>]
[--library <library>] [--log-to-stderr]
[--model-name-prefix <model name prefix>]
[--model-name-suffix <model name suffix>]
[--model-package <model package>]
[(-o <output directory> | --output <output directory>)]
[--release-note <release note>] [--remove-operation-id-prefix]
[--reserved-words-mappings <reserved word mappings>...]
[(-s | --skip-overwrite)]
[(-s | --skip-overwrite)] [--skip-validate-spec]
[(-t <template directory> | --template-dir <template directory>)]
[--type-mappings <type mappings>...] [(-v | --verbose)]
@@ -476,6 +473,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in
- [Raiffeisen Schweiz Genossenschaft](https://www.raiffeisen.ch)
- [RepreZen API Studio](https://www.reprezen.com/swagger-openapi-code-generation-api-first-microservices-enterprise-development)
- [REST United](https://restunited.com)
- [Suva](https://www.suva.ch/)
- [Telstra](https://dev.telstra.com)
- [unblu inc.](https://www.unblu.com/)
@@ -486,7 +484,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in
- 2018/05/15 - [REST API仕様からAPIクライアントやスタブサーバを自動生成する「OpenAPI Generator」オープンソースで公開。Swagger Codegenからのフォーク](https://www.publickey1.jp/blog/18/rest_apiapiopenapi_generatorswagger_generator.html) by [Publickey](https://www.publickey1.jp)
- 2018/06/08 - [Swagger Codegen is now OpenAPI Generator](https://angular.schule/blog/2018-06-swagger-codegen-is-now-openapi-generator) by [JohannesHoppe](https://github.com/JohannesHoppe)
- 2018/06/21 - [Connect your JHipster apps to the world of APIs with OpenAPI and gRPC](https://fr.slideshare.net/chbornet/jhipster-conf-2018-connect-your-jhipster-apps-to-the-world-of-apis-with-openapi-and-grpc) by [Christophe Bornet](https://github.com/cbornet) at [JHipster Conf 2018](https://jhipster-conf.github.io/)
- 2018/06/27 - [Lessons Learned from Leading an Open-Source Project Supporting 30+ Programming Languages](https://speakerdeck.com/wing328/lessons-learned-from-leading-an-open-source-project-supporting-30-plus-programming-languages) - [William Cheng](https://github.com/wing328) at [LinuxCon + ContainerCon + CloudOpen China 2018](https://www.lfasiallc.com/events/lc3-2018/)
- 2018/06/27 - [Lessons Learned from Leading an Open-Source Project Supporting 30+ Programming Languages](https://speakerdeck.com/wing328/lessons-learned-from-leading-an-open-source-project-supporting-30-plus-programming-languages) - [William Cheng](https://github.com/wing328) at [LinuxCon + ContainerCon + CloudOpen China 2018](http://bit.ly/2waDKKX)
- 2018/07/19 - [OpenAPI Generator Contribution Quickstart - RingCentral Go SDK](https://medium.com/ringcentral-developers/openapi-generator-for-go-contribution-quickstart-8cc72bf37b53) by [John Wang](https://github.com/grokify)
## [6 - About Us](#table-of-contents)

View File

@@ -27,6 +27,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="generate -t modules/openapi-generator/src/main/resources/php-silex -i modules/openapi-generator/src/test/resources/2_0/petstore-security-test.yaml -g php-silex -o samples/server/petstore-security-test/silex $@"
ags="generate -t modules/openapi-generator/src/main/resources/php-silex -i modules/openapi-generator/src/test/resources/2_0/petstore-security-test.yaml -g php-silex -o samples/server/petstore-security-test/silex/SwaggerServer $@"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -10,7 +10,7 @@ echo "Please press CTRL+C to stop or the script will continue in 5 seconds."
sleep 5
# LIST OF SCRIPTS:
./bin/ruby-petstore.sh > /dev/null 2>&1
./bin/ruby-client-petstore.sh > /dev/null 2>&1
./bin/java-petstore-all.sh > /dev/null 2>&1
./bin/java-jaxrs-petstore-server-all.sh > /dev/null 2>&1
./bin/spring-all-pestore.sh > /dev/null 2>&1

View File

@@ -35,6 +35,8 @@ These names can be anything you like. If you are building a client for the white
**NOTE** Convention is to use kebab casing for names passed to `-n`. Example, `scala-finatra` would become `ScalaFinatraGenerator`.
#### Use your new generator with the CLI
To compile your library, enter the `out/generators/my-codegen` directory, run `mvn package` and execute the generator:
```sh
@@ -50,11 +52,59 @@ Note the `my-codegen` is an option for `-g` now, and you can use the usual argum
```sh
java -cp out/codegens/customCodegen/target/my-codegen-openapi-generator-1.0.0.jar:modules/openapi-generator-cli/target/openapi-generator-cli.jar \
io.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \
org.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \
-i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
-o ./out/myClient
```
For Windows users:
```
java -cp out/codegens/customCodegen/target/my-codegen-openapi-generator-1.0.0.jar;modules/openapi-generator-cli/target/openapi-generator-cli.jar \
org.openapitools.codegen.OpenAPIGenerator generate -g my-codegen \
-i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
-o ./out/myClient
```
#### Use your new generator with the maven plugin
Install your library to your local maven repository by running:
```
mvn clean install -f out/generators/my-codegen
```
This will install `org.openapitools:my-codegen-openapi-generator:1.0.0` to your local maven repository.
You can use this as additional dependency of the `openapi-generator-maven-plugin` plugin and use `my-codegen` as `generatorName` value:
```xml
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>${openapi-generator-version}</version>
<executions>
<execution>
<id>generate-client-code</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatorName>my-codegen</generatorName>
<!-- other configuration ... -->
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>my-codegen-openapi-generator</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>
```
If you publish your artifact to a distant maven repository, do not forget to add this repository as `pluginRepository` for your project.
### Selective generation
You may not want to generate *all* models in your project. Likewise you may want just one or two apis to be written. If that's the case, you can use system properties to control the output:
@@ -106,6 +156,14 @@ java -Dapis -DmodelTests=false {opts}
When using selective generation, _only_ the templates needed for the specific generation will be used.
To skip models defined as the form parameters in "requestBody", please use `skipFormModel` (default to false) (this option is introduced at v3.2.2)
```sh
java -DskipFormModel=true
```
This option will be helpful to skip model generation due to the form parameter, which is defined differently in OAS3 as there's no form parameter in OAS3
### Ignore file format
OpenAPI Generator supports a `.openapi-generator-ignore` file, similar to `.gitignore` or `.dockerignore` you're probably already familiar with.

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-project</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -24,6 +24,8 @@ import io.airlift.airline.ParseOptionMissingException;
import io.airlift.airline.ParseOptionMissingValueException;
import org.openapitools.codegen.cmd.*;
import java.util.Locale;
/**
* User: lanwen Date: 24.03.15 Time: 17:56
* <p>
@@ -40,6 +42,7 @@ public class OpenAPIGenerator {
Cli.<Runnable>builder("openapi-generator-cli")
.withDescription(
String.format(
Locale.ROOT,
"OpenAPI generator CLI (version %s).",
version))
.withDefaultCommand(ListGenerators.class)
@@ -69,10 +72,10 @@ public class OpenAPIGenerator {
System.exit(1);
}
} catch (ParseArgumentsUnexpectedException e) {
System.err.printf("[error] %s%n%nSee 'openapi-generator-cli help' for usage.%n", e.getMessage());
System.err.printf(Locale.ROOT,"[error] %s%n%nSee 'openapi-generator-cli help' for usage.%n", e.getMessage());
System.exit(1);
} catch (ParseOptionMissingException | ParseOptionMissingValueException e) {
System.err.printf("[error] %s%n", e.getMessage());
System.err.printf(Locale.ROOT,"[error] %s%n", e.getMessage());
System.exit(1);
}
}

View File

@@ -17,6 +17,8 @@
package org.openapitools.codegen.cmd;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.spi.FilterAttachable;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
import org.openapitools.codegen.ClientOptInput;
@@ -32,6 +34,7 @@ import static org.apache.commons.lang3.StringUtils.isNotEmpty;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
/**
* User: lanwen Date: 24.03.15 Time: 20:22
@@ -199,8 +202,23 @@ public class Generate implements Runnable {
description = "Skips the default behavior of validating an input specification.")
private Boolean skipValidateSpec;
@Option(name = {"--log-to-stderr"},
title = "Log to STDERR",
description = "write all log messages (not just errors) to STDOUT."
+ " Useful for piping the JSON output of debug options (e.g. `-DdebugOperations`) to an external parser directly while testing a generator.")
private Boolean logToStderr;
@Override
public void run() {
if (logToStderr != null) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Stream.of(Logger.ROOT_LOGGER_NAME, "io.swagger", "org.openapitools")
.map(lc::getLogger)
.peek(logger -> logger.detachAppender("STDOUT"))
.reduce((logger, next) -> logger.getName().equals(Logger.ROOT_LOGGER_NAME) ? logger : next)
.map(root -> root.getAppender("STDERR"))
.ifPresent(FilterAttachable::clearAllFilters);
}
// attempt to read from config file
CodegenConfigurator configurator = CodegenConfigurator.fromFile(configFile);

View File

@@ -21,6 +21,8 @@ import ch.lambdaj.collection.LambdaIterable;
import io.airlift.airline.Command;
import org.openapitools.codegen.CodegenConfig;
import java.util.Locale;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.collection.LambdaCollections.with;
import static java.util.ServiceLoader.load;
@@ -34,6 +36,6 @@ public class Langs implements Runnable {
public void run() {
LambdaIterable<String> langs =
with(load(CodegenConfig.class)).extract(on(CodegenConfig.class).getName());
System.out.printf("Available languages (generators): %s%n", langs);
System.out.printf(Locale.ROOT, "Available languages (generators): %s%n", langs);
}
}

View File

@@ -9,6 +9,7 @@ import org.openapitools.codegen.CodegenType;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
// NOTE: List can later have subcommands such as list languages, list types, list frameworks, etc.
@Command(name = "list", description = "Lists the available generators")
@@ -53,6 +54,6 @@ public class ListGenerators implements Runnable {
}
}
System.out.printf("%s%n", sb.toString());
System.out.printf(Locale.ROOT,"%s%n", sb.toString());
}
}

View File

@@ -2,6 +2,9 @@
This document describes the gradle plugin for OpenAPI Generator.
This gradle plugin offers a declarative DSL via _extensions_ (these are Gradle project extensions).
These map almost fully 1:1 with the options you'd pass to the CLI or Maven plugin. The plugin maps the extensions to a task of the same name to provide a clean API. If you're interested in the extension/task mapping concept from a high-level, you can https://docs.gradle.org/current/userguide/custom_plugins.html#sec:mapping_extension_properties_to_task_properties[check out Gradle's docs].
== Tasks
Tasks are listed under the "OpenAPI Tools" tasks heading.
@@ -24,6 +27,17 @@ Tasks are listed under the "OpenAPI Tools" tasks heading.
|Validates an Open API 2.0 or 3.x specification document.
|===
[NOTE]
====
The plugin implements the above tasks as project extensions of the same name. If you'd like to declare
these tasks as dependencies to other tasks (using `dependsOn`), you'll need a task reference. e.g.:
```
compileJava.dependsOn tasks.openApiGenerate
```
====
== Plugin Setup
[source,groovy]
@@ -34,7 +48,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath "org.openapitools:openapi-generator-gradle-plugin:3.2.1"
classpath "org.openapitools:openapi-generator-gradle-plugin:3.2.2"
}
}
@@ -455,3 +469,65 @@ Run with --stacktrace option to get the stack trace. Run with --info or --debug
----
$ ./gradlew openApiValidate --input=/Users/jim/projects/openapi-generator/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
----
=== Generate multiple sources
If you want to perform multiple generation tasks, you'd want to create a task that inherits from the `GenerateTask`.
Examples can be found in https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-gradle-plugin/samples/local-spec/build.gradle[samples/local-spec/build.gradle].
You can define any number of generator tasks; the generated code does _not_ need to be a JVM language.
```gradle
task buildGoClient(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
generatorName = "go"
inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
additionalProperties = [
packageName: "petstore"
]
outputDir = "$buildDir/go".toString()
configOptions = [
dateLibrary: "threetenp"
]
}
task buildKotlinClient(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
generatorName = "kotlin"
inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
outputDir = "$buildDir/kotlin".toString()
apiPackage = "org.openapitools.example.api"
invokerPackage = "org.openapitools.example.invoker"
modelPackage = "org.openapitools.example.model"
configOptions = [
dateLibrary: "java8"
]
systemProperties = [
modelDocs: "false"
]
}
```
To execute your specs, you'd then do:
```
./gradlew buildGoClient buildKotlinClient
```
If you want to simplify the execution, you could create a new task with `dependsOn`.
```gradle
task codegen(dependsOn: ['buildGoClient', 'buildKotlinClient'])
```
Or, if you're generating the code on compile, you can add these as a dependency to `compileJava` or any other existing task.
You can also mix the default task `openApiGenerate` with custom tasks:
```gradle
compileJava.dependsOn buildKotlinClient, tasks.openApiGenerate
```
[NOTE]
====
`openApiGenerate` is a project extension _and_ a task. If you want to use this in `dependsOn`,
you need a task reference or instance. One way to do this is to access it as `tasks.openApiGenerate`.
You can run `gradle tasks --debug` to see this registration.
====

View File

@@ -1,4 +1,4 @@
openApiGeneratorVersion=3.2.1
openApiGeneratorVersion=3.2.2
# BEGIN placeholders
# these are just placeholders to allow contributors to build directly

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-project</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -17,5 +17,5 @@ gradle generateGoWithInvalidSpec
The samples can be tested against other versions of the plugin using the `openApiGeneratorVersion` property. For example:
```bash
gradle -PopenApiGeneratorVersion=3.2.1 openApiValidate
gradle -PopenApiGeneratorVersion=3.2.2 openApiValidate
```

View File

@@ -1 +1 @@
openApiGeneratorVersion=3.2.1
openApiGeneratorVersion=3.2.2

View File

@@ -11,7 +11,7 @@ Add to your `build->plugins` section (default phase is `generate-sources` phase)
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<executions>
<execution>
<goals>

View File

@@ -12,7 +12,7 @@
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<executions>
<execution>
<goals>

View File

@@ -12,7 +12,7 @@
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<executions>
<execution>
<goals>

View File

@@ -12,7 +12,7 @@
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<executions>
<execution>
<goals>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-project</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<relativePath>../..</relativePath>
</parent>
<artifactId>openapi-generator-maven-plugin</artifactId>

View File

@@ -2,7 +2,7 @@ FROM openjdk:8-jre-alpine
WORKDIR /generator
COPY target/openapi-generator-online-3.2.1.jar /generator/openapi-generator-online.jar
COPY target/openapi-generator-online-3.2.2.jar /generator/openapi-generator-online.jar
ENV GENERATOR_HOST=http://localhost

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-project</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<relativePath>../..</relativePath>
</parent>
<artifactId>openapi-generator-online</artifactId>

View File

@@ -19,11 +19,16 @@ package org.openapitools.codegen.online.service;
import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.*;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.ClientOpts;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConfigLoader;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.online.model.GeneratorInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,6 +39,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class Generator {
@@ -44,7 +50,7 @@ public class Generator {
try {
config = CodegenConfigLoader.forName(language);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, String.format("Unsupported target %s supplied. %s",
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, String.format(Locale.ROOT,"Unsupported target %s supplied. %s",
language, e));
}
Map<String, CliOption> map = new LinkedHashMap<>();
@@ -77,7 +83,7 @@ public class Generator {
}
private static String generate(String language, GeneratorInput opts, Type type) {
LOGGER.debug(String.format("generate %s for %s", type.getTypeName(), language));
LOGGER.debug(String.format(Locale.ROOT,"generate %s for %s", type.getTypeName(), language));
if (opts == null) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No options were supplied");
}

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-project</artifactId>
<version>3.2.1</version>
<version>3.2.2</version>
<relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -23,6 +23,8 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.servers.ServerVariable;
import java.util.List;
import java.util.Map;
@@ -113,6 +115,10 @@ public interface CodegenConfig {
List<CodegenSecurity> fromSecurity(Map<String, SecurityScheme> schemas);
List<CodegenServer> fromServers(List<Server> servers);
List<CodegenServerVariable> fromServerVariables(Map<String, ServerVariable> variables);
Set<String> defaultIncludes();
Map<String, String> typeMapping();

View File

@@ -31,6 +31,7 @@ public class CodegenConstants {
public static final String API_TESTS = "apiTests";
public static final String API_DOCS = "apiDocs";
public static final String WITH_XML = "withXml";
public static final String SKIP_FORM_MODEL = "skipFormModel";
/* /end System Properties */
public static final String API_PACKAGE = "apiPackage";

View File

@@ -22,6 +22,7 @@ import io.swagger.v3.oas.models.ExternalDocumentation;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -76,7 +77,7 @@ public class CodegenModel {
@Override
public String toString() {
return String.format("%s(%s)", name, classname);
return String.format(Locale.ROOT, "%s(%s)", name, classname);
}
@Override

View File

@@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -196,7 +197,7 @@ public class CodegenOperation {
* @return true if act as Restful update method, false otherwise
*/
public boolean isRestfulUpdate() {
return Arrays.asList("PUT", "PATCH").contains(httpMethod.toUpperCase()) && isMemberPath();
return Arrays.asList("PUT", "PATCH").contains(httpMethod.toUpperCase(Locale.ROOT)) && isMemberPath();
}
/**
@@ -205,7 +206,7 @@ public class CodegenOperation {
* @return true request method is PUT, PATCH or POST; false otherwise
*/
public boolean isBodyAllowed() {
return Arrays.asList("PUT", "PATCH", "POST").contains(httpMethod.toUpperCase());
return Arrays.asList("PUT", "PATCH", "POST").contains(httpMethod.toUpperCase(Locale.ROOT));
}
/**
@@ -232,7 +233,7 @@ public class CodegenOperation {
* @return the substring
*/
private String pathWithoutBaseName() {
return baseName != null ? path.replace("/" + baseName.toLowerCase(), "") : path;
return baseName != null ? path.replace("/" + baseName.toLowerCase(Locale.ROOT), "") : path;
}
/**
@@ -248,7 +249,7 @@ public class CodegenOperation {
@Override
public String toString() {
return String.format("%s(%s)", baseName, path);
return String.format(Locale.ROOT, "%s(%s)", baseName, path);
}
@Override

View File

@@ -20,6 +20,7 @@ package org.openapitools.codegen;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class CodegenResponse {
@@ -47,7 +48,7 @@ public class CodegenResponse {
@Override
public String toString() {
return String.format("%s(%s)", code, containerType);
return String.format(Locale.ROOT, "%s(%s)", code, containerType);
}
@Override

View File

@@ -21,6 +21,7 @@ import io.swagger.v3.oas.models.security.Scopes;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class CodegenSecurity {
@@ -38,7 +39,7 @@ public class CodegenSecurity {
@Override
public String toString() {
return String.format("%s(%s)", name, type);
return String.format(Locale.ROOT, "%s(%s)", name, type);
}
@Override

View File

@@ -0,0 +1,9 @@
package org.openapitools.codegen;
import java.util.List;
public class CodegenServer {
public String url;
public String description;
public List<CodegenServerVariable> variables;
}

View File

@@ -0,0 +1,10 @@
package org.openapitools.codegen;
import java.util.List;
public class CodegenServerVariable {
public String name;
public String defaultValue;
public String description;
public List<String> enumValues;
}

View File

@@ -21,6 +21,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public enum CodegenType {
@@ -30,7 +31,7 @@ public enum CodegenType {
@JsonCreator
public static CodegenType forValue(String value) {
return names.get(value.toLowerCase());
return names.get(value.toLowerCase(Locale.ROOT));
}
@JsonValue
@@ -50,4 +51,4 @@ public enum CodegenType {
names.put("documentation", DOCUMENTATION);
names.put("other", OTHER);
}
}
}

View File

@@ -43,6 +43,8 @@ import io.swagger.v3.oas.models.responses.ApiResponses;
import io.swagger.v3.oas.models.security.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.servers.ServerVariable;
import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.ObjectUtils;
@@ -64,7 +66,9 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -72,7 +76,6 @@ import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
@@ -355,7 +358,7 @@ public class DefaultCodegen implements CodegenConfig {
return "EMPTY";
}
String var = value.replaceAll("\\W+", "_").toUpperCase();
String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) {
return "_" + var;
} else {
@@ -1091,7 +1094,7 @@ public class DefaultCodegen implements CodegenConfig {
*/
public String toInstantiationType(Schema schema) {
if (ModelUtils.isMapSchema(schema)) {
Schema additionalProperties = (Schema) schema.getAdditionalProperties();
Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
String type = additionalProperties.getType();
if (null == type) {
LOGGER.error("No Type defined for Additional Property " + additionalProperties + "\n" //
@@ -1995,7 +1998,7 @@ public class DefaultCodegen implements CodegenConfig {
property.maxItems = p.getMaxProperties();
// handle inner property
CodegenProperty cp = fromProperty("inner", (Schema) p.getAdditionalProperties());
CodegenProperty cp = fromProperty("inner", ModelUtils.getAdditionalProperties(p));
updatePropertyForMap(property, cp);
} else { // model
// TODO revise the logic below
@@ -2257,7 +2260,7 @@ public class DefaultCodegen implements CodegenConfig {
for (String key : operation.getResponses().keySet()) {
ApiResponse response = operation.getResponses().get(key);
addProducesInfo(openAPI, response, op);
CodegenResponse r = fromResponse(key, response);
CodegenResponse r = fromResponse(openAPI, key, response);
r.hasMore = true;
if (r.baseType != null &&
!defaultIncludes.contains(r.baseType) &&
@@ -2285,7 +2288,7 @@ public class DefaultCodegen implements CodegenConfig {
CodegenProperty innerProperty = fromProperty("response", as.getItems());
op.returnBaseType = innerProperty.baseType;
} else if (ModelUtils.isMapSchema(responseSchema)) {
CodegenProperty innerProperty = fromProperty("response", (Schema) responseSchema.getAdditionalProperties());
CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema));
op.returnBaseType = innerProperty.baseType;
} else {
if (cm.complexType != null) {
@@ -2326,7 +2329,7 @@ public class DefaultCodegen implements CodegenConfig {
op.returnTypeIsPrimitive = true;
}
}
addHeaders(methodResponse, op.responseHeaders);
addHeaders(openAPI, methodResponse, op.responseHeaders);
}
}
@@ -2366,7 +2369,7 @@ public class DefaultCodegen implements CodegenConfig {
bodyParameterName = (String) op.vendorExtensions.get("x-codegen-request-body-name");
}
bodyParam = fromRequestBody(requestBody, schemas, imports, bodyParameterName);
bodyParam.description = requestBody.getDescription();
bodyParam.description = escapeText(requestBody.getDescription());
postProcessParameter(bodyParam);
bodyParams.add(bodyParam);
@@ -2443,7 +2446,7 @@ public class DefaultCodegen implements CodegenConfig {
}
op.bodyParam = bodyParam;
op.httpMethod = httpMethod.toUpperCase();
op.httpMethod = httpMethod.toUpperCase(Locale.ROOT);
// move "required" parameters in front of "optional" parameters
if (sortParamsByRequiredFlag) {
@@ -2503,11 +2506,12 @@ public class DefaultCodegen implements CodegenConfig {
/**
* Convert OAS Response object to Codegen Response object
*
* @param openAPI a OAS object representing the spec
* @param responseCode HTTP response code
* @param response OAS Response object
* @return Codegen Response object
*/
public CodegenResponse fromResponse(String responseCode, ApiResponse response) {
public CodegenResponse fromResponse(OpenAPI openAPI, String responseCode, ApiResponse response) {
CodegenResponse r = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
if ("default".equals(responseCode)) {
r.code = "0";
@@ -2524,7 +2528,7 @@ public class DefaultCodegen implements CodegenConfig {
if (response.getExtensions() != null && !response.getExtensions().isEmpty()) {
r.vendorExtensions.putAll(response.getExtensions());
}
addHeaders(response, r.headers);
addHeaders(openAPI, response, r.headers);
r.hasHeaders = !r.headers.isEmpty();
if (r.schema != null) {
@@ -2671,7 +2675,7 @@ public class DefaultCodegen implements CodegenConfig {
}
} else if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter
CodegenProperty codegenProperty = fromProperty("inner", (Schema) parameterSchema.getAdditionalProperties());
CodegenProperty codegenProperty = fromProperty("inner", ModelUtils.getAdditionalProperties(parameterSchema));
codegenParameter.items = codegenProperty;
codegenParameter.mostInnerItems = codegenProperty.mostInnerItems;
codegenParameter.baseType = codegenProperty.dataType;
@@ -2896,7 +2900,7 @@ public class DefaultCodegen implements CodegenConfig {
// TODO revise below as it should be replaced by ModelUtils.isByteArraySchema(parameterSchema)
public boolean isDataTypeBinary(String dataType) {
if (dataType != null) {
return dataType.toLowerCase().startsWith("byte");
return dataType.toLowerCase(Locale.ROOT).startsWith("byte");
} else {
return false;
}
@@ -2905,7 +2909,7 @@ public class DefaultCodegen implements CodegenConfig {
// TODO revise below as it should be replaced by ModelUtils.isFileSchema(parameterSchema)
public boolean isDataTypeFile(String dataType) {
if (dataType != null) {
return dataType.toLowerCase().equals("file");
return dataType.toLowerCase(Locale.ROOT).equals("file");
} else {
return false;
}
@@ -2993,12 +2997,12 @@ public class DefaultCodegen implements CodegenConfig {
protected void setReservedWordsLowerCase(List<String> words) {
reservedWords = new HashSet<String>();
for (String word : words) {
reservedWords.add(word.toLowerCase());
reservedWords.add(word.toLowerCase(Locale.ROOT));
}
}
protected boolean isReservedWord(String word) {
return word != null && reservedWords.contains(word.toLowerCase());
return word != null && reservedWords.contains(word.toLowerCase(Locale.ROOT));
}
/**
@@ -3070,12 +3074,15 @@ public class DefaultCodegen implements CodegenConfig {
* @param response API response
* @param properties list of codegen property
*/
private void addHeaders(ApiResponse response, List<CodegenProperty> properties) {
private void addHeaders(OpenAPI openAPI, ApiResponse response, List<CodegenProperty> properties) {
if (response.getHeaders() != null) {
for (Map.Entry<String, Header> headers : response.getHeaders().entrySet()) {
CodegenProperty cp = fromProperty(headers.getKey(), headers.getValue().getSchema());
cp.setDescription(escapeText(headers.getValue().getDescription()));
cp.setUnescapedDescription(headers.getValue().getDescription());
String description = headers.getValue().getDescription();
// follow the $ref
Header header = ModelUtils.getReferencedHeader(openAPI, headers.getValue());
CodegenProperty cp = fromProperty(headers.getKey(), header.getSchema());
cp.setDescription(escapeText(description));
cp.setUnescapedDescription(description);
properties.add(cp);
}
}
@@ -3124,7 +3131,7 @@ public class DefaultCodegen implements CodegenConfig {
LOGGER.warn("generated unique operationId `" + uniqueName + "`");
}
co.operationId = uniqueName;
co.operationIdLowerCase = uniqueName.toLowerCase();
co.operationIdLowerCase = uniqueName.toLowerCase(Locale.ROOT);
co.operationIdCamelCase = DefaultCodegen.camelize(uniqueName);
co.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName);
opList.add(co);
@@ -3170,7 +3177,7 @@ public class DefaultCodegen implements CodegenConfig {
word = word.replace('-', '_');
// replace space with underscore
word = word.replace(' ', '_');
word = word.toLowerCase();
word = word.toLowerCase(Locale.ROOT);
return word;
}
@@ -3334,7 +3341,7 @@ public class DefaultCodegen implements CodegenConfig {
* @param schemas The complete set of model definitions (schemas).
* @return A mapping from model name to type alias
*/
private static Map<String, String> getAllAliases(Map<String, Schema> schemas) {
static Map<String, String> getAllAliases(Map<String, Schema> schemas) {
if (schemas == null || schemas.isEmpty()) {
return new HashMap<>();
}
@@ -3377,7 +3384,7 @@ public class DefaultCodegen implements CodegenConfig {
.map(StringUtils::capitalize)
.collect(Collectors.joining(""));
if (result.length() > 0) {
result = result.substring(0, 1).toLowerCase() + result.substring(1);
result = result.substring(0, 1).toLowerCase(Locale.ROOT) + result.substring(1);
}
return result;
}
@@ -3406,7 +3413,7 @@ public class DefaultCodegen implements CodegenConfig {
Pattern p = Pattern.compile("\\/(.?)");
Matcher m = p.matcher(word);
while (m.find()) {
word = m.replaceFirst("." + m.group(1)/*.toUpperCase()*/); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
word = m.replaceFirst("." + m.group(1)/*.toUpperCase(Locale.ROOT)*/); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
m = p.matcher(word);
}
@@ -3422,7 +3429,7 @@ public class DefaultCodegen implements CodegenConfig {
m = p.matcher(word);
while (m.find()) {
word = m.replaceFirst("" + Character.toUpperCase(m.group(1).charAt(0)) + m.group(1).substring(1)/*.toUpperCase()*/);
word = m.replaceFirst("" + Character.toUpperCase(m.group(1).charAt(0)) + m.group(1).substring(1)/*.toUpperCase(Locale.ROOT)*/);
m = p.matcher(word);
}
@@ -3430,7 +3437,7 @@ public class DefaultCodegen implements CodegenConfig {
p = Pattern.compile("(\\.?)(\\w)([^\\.]*)$");
m = p.matcher(word);
if (m.find()) {
String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3);
String rep = m.group(1) + m.group(2).toUpperCase(Locale.ROOT) + m.group(3);
rep = rep.replaceAll("\\$", "\\\\\\$");
word = m.replaceAll(rep);
}
@@ -3440,7 +3447,7 @@ public class DefaultCodegen implements CodegenConfig {
m = p.matcher(word);
while (m.find()) {
String original = m.group(2);
String upperCase = original.toUpperCase();
String upperCase = original.toUpperCase(Locale.ROOT);
if (original.equals(upperCase)) {
word = word.replaceFirst("_", "");
} else {
@@ -3453,7 +3460,7 @@ public class DefaultCodegen implements CodegenConfig {
p = Pattern.compile("(-)(.)");
m = p.matcher(word);
while (m.find()) {
word = m.replaceFirst(m.group(2).toUpperCase());
word = m.replaceFirst(m.group(2).toUpperCase(Locale.ROOT));
m = p.matcher(word);
}
@@ -3465,7 +3472,7 @@ public class DefaultCodegen implements CodegenConfig {
charAt = word.charAt(i);
}
i = i + 1;
word = word.substring(0, i).toLowerCase() + word.substring(i);
word = word.substring(0, i).toLowerCase(Locale.ROOT) + word.substring(i);
}
// remove all underscore
@@ -4239,7 +4246,7 @@ public class DefaultCodegen implements CodegenConfig {
codegenParameter.isPrimitiveType = false;
codegenParameter.isContainer = true;
codegenParameter.isListContainer = true;
codegenParameter.description = s.getDescription();
codegenParameter.description = escapeText(s.getDescription());
codegenParameter.dataType = getTypeDeclaration(s);
if (codegenParameter.baseType != null && codegenParameter.enumName != null) {
codegenParameter.datatypeWithEnum = codegenParameter.dataType.replace(codegenParameter.baseType, codegenParameter.enumName);
@@ -4365,7 +4372,7 @@ public class DefaultCodegen implements CodegenConfig {
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegenParameter.baseName = "UNKNOWN_BASE_NAME";
codegenParameter.paramName = "UNKNOWN_PARAM_NAME";
codegenParameter.description = body.getDescription();
codegenParameter.description = escapeText(body.getDescription());
codegenParameter.required = body.getRequired() != null ? body.getRequired() : Boolean.FALSE;
codegenParameter.isBodyParam = Boolean.TRUE;
@@ -4378,7 +4385,7 @@ public class DefaultCodegen implements CodegenConfig {
}
if (ModelUtils.isMapSchema(schema)) {
Schema inner = (Schema) schema.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(schema);
if (inner == null) {
inner = new StringSchema().description("//TODO automatically added by openapi-generator");
schema.setAdditionalProperties(inner);
@@ -4466,7 +4473,7 @@ public class DefaultCodegen implements CodegenConfig {
imports.add(codegenParameter.baseType);
} else {
CodegenProperty codegenProperty = fromProperty("property", schema);
if (schema.getAdditionalProperties() != null) {// http body is map
if (ModelUtils.getAdditionalProperties(schema) != null) {// http body is map
LOGGER.error("Map should be supported. Please report to openapi-generator github repo about the issue.");
} else if (codegenProperty != null) {
String codegenModelName, codegenModelDescription;
@@ -4588,4 +4595,38 @@ public class DefaultCodegen implements CodegenConfig {
public boolean isDataTypeString(String dataType) {
return "String".equals(dataType);
}
@Override
public List<CodegenServer> fromServers(List<Server> servers) {
if (servers == null) {
return Collections.emptyList();
}
List<CodegenServer> codegenServers = new LinkedList<>();
for (Server server: servers) {
CodegenServer cs = new CodegenServer();
cs.description = escapeText(server.getDescription());
cs.url = server.getUrl();
cs.variables = this.fromServerVariables(server.getVariables());
codegenServers.add(cs);
}
return codegenServers;
}
@Override
public List<CodegenServerVariable> fromServerVariables(Map<String, ServerVariable> variables) {
if (variables == null) {
return Collections.emptyList();
}
List<CodegenServerVariable> codegenServerVariables = new LinkedList<>();
for (Entry<String, ServerVariable> variableEntry: variables.entrySet()) {
CodegenServerVariable codegenServerVariable = new CodegenServerVariable();
ServerVariable variable = variableEntry.getValue();
codegenServerVariable.defaultValue = variable.getDefault();
codegenServerVariable.description = escapeText(variable.getDescription());
codegenServerVariable.enumValues = variable.getEnum();
codegenServerVariable.name = variableEntry.getKey();
codegenServerVariables.add(codegenServerVariable);
}
return codegenServerVariables;
}
}

View File

@@ -286,7 +286,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
private void generateModelDocumentation(List<File> files, Map<String, Object> models, String modelName) throws IOException {
for (String templateName : config.modelDocTemplateFiles().keySet()) {
String docExtension = config.getDocExtension();
String suffix = docExtension!=null ? docExtension : config.modelDocTemplateFiles().get(templateName);
String suffix = docExtension != null ? docExtension : config.modelDocTemplateFiles().get(templateName);
String filename = config.modelDocFileFolder() + File.separator + config.toModelDocFilename(modelName) + suffix;
if (!config.shouldOverwrite(filename)) {
LOGGER.info("Skipped overwriting " + filename);
@@ -382,6 +382,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
} */
});
Boolean skipFormModel = System.getProperty(CodegenConstants.SKIP_FORM_MODEL) != null ?
Boolean.valueOf(System.getProperty(CodegenConstants.SKIP_FORM_MODEL)) :
getGeneratorPropertyDefaultSwitch(CodegenConstants.SKIP_FORM_MODEL, false);
// process models only
for (String name : modelKeys) {
try {
@@ -393,8 +397,13 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
// don't generate models that are not used as object (e.g. form parameters)
if (unusedModels.contains(name)) {
LOGGER.debug("Model " + name + " not generated since it's marked as unused (due to form parameters)");
continue;
if (Boolean.FALSE.equals(skipFormModel)) {
// if skipFormModel sets to true, still generate the model and log the result
LOGGER.info("Model " + name + " (marked as unused due to form parameters) is generated due to skipFormModel=false (default)");
} else {
LOGGER.info("Model " + name + " not generated since it's marked as unused (due to form parameters) and skipFormModel set to true");
continue;
}
}
Schema schema = schemas.get(name);
@@ -753,6 +762,12 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
bundle.put("authMethods", authMethods);
bundle.put("hasAuthMethods", true);
}
List<CodegenServer> servers = config.fromServers(openAPI.getServers());
if (servers != null && !servers.isEmpty()) {
bundle.put("servers", servers);
bundle.put("hasServers", true);
}
if (openAPI.getExternalDocs() != null) {
bundle.put("externalDocs", openAPI.getExternalDocs());

View File

@@ -1,3 +1,20 @@
/*
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
* Copyright 2018 SmartBear Software
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openapitools.codegen;
import io.swagger.v3.oas.models.OpenAPI;
@@ -18,11 +35,10 @@ import org.slf4j.LoggerFactory;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
import java.util.ArrayList;
import java.util.*;
import io.swagger.v3.oas.models.media.XML;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class InlineModelResolver {
private OpenAPI openapi;
@@ -68,9 +84,23 @@ public class InlineModelResolver {
Schema schema = new Schema();
schema.set$ref(modelName);
mt.setSchema(schema);
// TODO assume JSON, need to support other payload later
content.addMediaType("application/json", mt);
// get "consumes", e.g. application/xml, application/json
Set<String> consumes;
if (requestBody == null || requestBody.getContent() == null || requestBody.getContent().isEmpty()) {
consumes = new HashSet<>();
consumes.add("application/json"); // default to application/json
LOGGER.info("Default to application/json for inline body schema");
} else {
consumes = requestBody.getContent().keySet();
}
for (String consume : consumes) {
content.addMediaType(consume, mt);
}
rb.setContent(content);
// add to openapi "components"
if (openapi.getComponents().getRequestBodies() == null) {
Map<String, RequestBody> requestBodies = new HashMap<String, RequestBody>();
@@ -208,7 +238,7 @@ public class InlineModelResolver {
}
} else if (property instanceof MapSchema) {
MapSchema mp = (MapSchema) property;
Schema innerProperty = (Schema) mp.getAdditionalProperties();
Schema innerProperty = ModelUtils.getAdditionalProperties(mp);
if (innerProperty instanceof ObjectSchema) {
ObjectSchema op = (ObjectSchema) innerProperty;
if (op.getProperties() != null && op.getProperties().size() > 0) {
@@ -291,7 +321,7 @@ public class InlineModelResolver {
/**
* This function fix models that are string (mostly enum). Before this fix, the
* example would look something like that in the doc: "\"example from def\""
*
*
* @param m Schema implementation
*/
private void fixStringModel(Schema m) {
@@ -334,10 +364,7 @@ public class InlineModelResolver {
int count = 0;
boolean done = false;
key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", ""); // FIXME: a parameter
// should not be
// assigned. Also declare
// the methods parameters
// as 'final'.
// should not be assigned. Also declare the methods parameters as 'final'.
while (!done) {
String name = key;
if (count > 0) {
@@ -404,7 +431,7 @@ public class InlineModelResolver {
}
}
if (ModelUtils.isMapSchema(property)) {
Schema inner = (Schema) property.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(property);
if (inner instanceof ObjectSchema) {
ObjectSchema op = (ObjectSchema) inner;
if (op.getProperties() != null && op.getProperties().size() > 0) {
@@ -492,7 +519,7 @@ public class InlineModelResolver {
model.setDescription(description);
model.setName(object.getName());
model.setExample(example);
model.setItems((Schema) object.getAdditionalProperties());
model.setItems(ModelUtils.getAdditionalProperties(object));
return model;
}

View File

@@ -21,6 +21,7 @@ import io.swagger.v3.parser.core.models.AuthorizationValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
@@ -39,8 +40,11 @@ public class AuthParser {
for (String part : parts) {
String[] kvPair = part.split(":");
if (kvPair.length == 2) {
// FIXME replace the deprecated method by decode(string, encoding). Which encoding is used ? Default UTF-8 ?
auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0]), URLDecoder.decode(kvPair[1]), "header"));
try {
auths.add(new AuthorizationValue(URLDecoder.decode(kvPair[0], "UTF-8"), URLDecoder.decode(kvPair[1], "UTF-8"), "header"));
} catch (UnsupportedEncodingException e) {
LOGGER.warn(e.getMessage());
}
}
}
}

View File

@@ -19,16 +19,33 @@ package org.openapitools.codegen.config;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.*;
import org.openapitools.codegen.auth.AuthParser;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.parser.core.models.ParseOptions;
import io.swagger.v3.parser.core.models.SwaggerParseResult;
import org.apache.commons.lang3.Validate;
import org.openapitools.codegen.languages.*;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.ClientOpts;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConfigLoader;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.SpecValidationException;
import org.openapitools.codegen.auth.AuthParser;
import org.openapitools.codegen.languages.CSharpNancyFXServerCodegen;
import org.openapitools.codegen.languages.CppQt5ClientCodegen;
import org.openapitools.codegen.languages.CppRestSdkClientCodegen;
import org.openapitools.codegen.languages.CppTizenClientCodegen;
import org.openapitools.codegen.languages.JavaJerseyServerCodegen;
import org.openapitools.codegen.languages.PhpLumenServerCodegen;
import org.openapitools.codegen.languages.PhpSlimServerCodegen;
import org.openapitools.codegen.languages.PhpZendExpressivePathHandlerServerCodegen;
import org.openapitools.codegen.languages.RubySinatraServerCodegen;
import org.openapitools.codegen.languages.ScalaAkkaClientCodegen;
import org.openapitools.codegen.languages.ScalaHttpClientCodegen;
import org.openapitools.codegen.languages.SwiftClientCodegen;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +57,7 @@ import java.nio.file.Paths;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -139,7 +157,7 @@ public class CodegenConfigurator implements Serializable {
public CodegenConfigurator setGeneratorName(final String generatorName) {
if (nameMigrationMap.containsKey(generatorName)) {
String newValue = nameMigrationMap.get(generatorName);
LOGGER.warn(String.format("The name '%s' is a deprecated. Please update to the new name of '%s'.", generatorName, newValue));
LOGGER.warn(String.format(Locale.ROOT, "The name '%s' is a deprecated. Please update to the new name of '%s'.", generatorName, newValue));
this.generatorName = newValue;
} else {
this.generatorName = generatorName;

View File

@@ -236,10 +236,10 @@ public class ExampleGenerator {
Map<String, Object> mp = new HashMap<String, Object>();
if (property.getName() != null) {
mp.put(property.getName(),
resolvePropertyToExample(propertyName, mediaType, (Schema) property.getAdditionalProperties(), processedModels));
resolvePropertyToExample(propertyName, mediaType, ModelUtils.getAdditionalProperties(property), processedModels));
} else {
mp.put("key",
resolvePropertyToExample(propertyName, mediaType, (Schema) property.getAdditionalProperties(), processedModels));
resolvePropertyToExample(propertyName, mediaType, ModelUtils.getAdditionalProperties(property), processedModels));
}
return mp;
} else if (ModelUtils.isUUIDSchema(property)) {

View File

@@ -25,9 +25,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
/**
* Presents a processing utility for parsing and evaluating files containing common ignore patterns. (.openapi-generator-ignore)
@@ -82,30 +84,30 @@ public class CodegenIgnoreProcessor {
loadCodegenRules(targetIgnoreFile);
this.ignoreFile = targetIgnoreFile;
} catch (IOException e) {
LOGGER.error(String.format("Could not process %s.", targetIgnoreFile.getName()), e.getMessage());
LOGGER.error(String.format(Locale.ROOT, "Could not process %s.", targetIgnoreFile.getName()), e.getMessage());
}
} else if (!".swagger-codegen-ignore".equals(targetIgnoreFile.getName())) {
final File legacyIgnoreFile = new File(targetIgnoreFile.getParentFile(), ".swagger-codegen-ignore");
if (legacyIgnoreFile.exists() && legacyIgnoreFile.isFile()) {
LOGGER.info(String.format("Legacy support: '%s' file renamed to '%s'.", legacyIgnoreFile.getName(), targetIgnoreFile.getName()));
LOGGER.info(String.format(Locale.ROOT, "Legacy support: '%s' file renamed to '%s'.", legacyIgnoreFile.getName(), targetIgnoreFile.getName()));
try {
Files.move(legacyIgnoreFile, targetIgnoreFile);
loadFromFile(targetIgnoreFile);
} catch (IOException e) {
LOGGER.error(String.format("Could not rename file: %s", e.getMessage()));
LOGGER.error(String.format(Locale.ROOT, "Could not rename file: %s", e.getMessage()));
}
} else {
// log info message
LOGGER.info(String.format("No %s file found.", targetIgnoreFile.getName()));
LOGGER.info(String.format(Locale.ROOT, "No %s file found.", targetIgnoreFile.getName()));
}
} else {
// log info message
LOGGER.info(String.format("No %s file found.", targetIgnoreFile.getName()));
LOGGER.info(String.format(Locale.ROOT, "No %s file found.", targetIgnoreFile.getName()));
}
}
void loadCodegenRules(final File codegenIgnore) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(codegenIgnore))) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(codegenIgnore), Charset.forName("UTF-8")))) {
String line;
// NOTE: Comments that start with a : (e.g. //:) are pulled from git documentation for .gitignore

View File

@@ -183,7 +183,6 @@ public abstract class Rule {
}
} catch (ParserException e) {
e.printStackTrace();
return new InvalidRule(null, definition, e.getMessage());
}

View File

@@ -19,13 +19,11 @@ package org.openapitools.codegen.languages;
import com.samskivert.mustache.Escapers;
import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
@@ -43,6 +41,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
abstract public class AbstractAdaCodegen extends DefaultCodegen implements CodegenConfig {
@@ -180,7 +179,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
}
public String toFilename(String name) {
return name.replace(".", "-").toLowerCase();
return name.replace(".", "-").toLowerCase(Locale.ROOT);
}
/**
@@ -329,7 +328,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
return getTypeDeclaration(inner) + "_Vectors.Vector";
}
if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
String name = getTypeDeclaration(inner) + "_Map";
if (name.startsWith("Swagger.")) {
return name;
@@ -391,7 +390,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
String mt = media.get("mediaType");
if (mt != null) {
mt = mt.replace('/', '_');
media.put("adaMediaType", mt.toUpperCase());
media.put("adaMediaType", mt.toUpperCase(Locale.ROOT));
count++;
}
}

View File

@@ -18,12 +18,12 @@
package org.openapitools.codegen.languages;
import java.util.*;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Strings;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
@@ -90,7 +90,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
// sanitize name
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if (name.toLowerCase().matches("^_*class$")) {
if (name.toLowerCase(Locale.ROOT).matches("^_*class$")) {
return "propertyClass";
}
@@ -107,7 +107,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
}
if (startsWithTwoUppercaseLetters(name)) {
name = name.substring(0, 2).toLowerCase() + name.substring(2);
name = name.substring(0, 2).toLowerCase(Locale.ROOT) + name.substring(2);
}
// camelize (lower first character) the variable name
@@ -125,7 +125,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
private boolean startsWithTwoUppercaseLetters(String name) {
boolean startsWithTwoUppercaseLetters = false;
if (name.length() > 1) {
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase());
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase(Locale.ROOT));
}
return startsWithTwoUppercaseLetters;
}
@@ -196,7 +196,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
}
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
if (inner == null) {
LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined");
@@ -225,15 +225,15 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
return null;
}
return String.format(pattern, getTypeDeclaration(ap.getItems()));
return String.format(Locale.ROOT, pattern, getTypeDeclaration(ap.getItems()));
} else if (ModelUtils.isMapSchema(p)) {
final MapSchema ap = (MapSchema) p;
final String pattern = "new HashMap<%s>()";
if (ap.getAdditionalProperties() == null) {
if (ModelUtils.getAdditionalProperties(ap) == null) {
return null;
}
return String.format(pattern, String.format("String, %s", getTypeDeclaration((Schema) ap.getAdditionalProperties())));
return String.format(Locale.ROOT, pattern, String.format(Locale.ROOT, "String, %s", getTypeDeclaration(ModelUtils.getAdditionalProperties(ap))));
} else if (ModelUtils.isLongSchema(p)) {
if (p.getDefault() != null) {
return p.getDefault().toString() + "l";
@@ -297,7 +297,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
p.example = "'" + p.example + "'";
} else if ("".equals(p.example) || p.example == null && p.dataType != "Object") {
// Get an example object from the generated model
if (!isReservedWord(p.dataType.toLowerCase())) {
if (!isReservedWord(p.dataType.toLowerCase(Locale.ROOT))) {
p.example = p.dataType + ".getExample()";
}
} else {
@@ -332,7 +332,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (example.isEmpty()) {
example = "2000, 1, 23";
} else {
LOGGER.warn(String.format("The example provided for property '%s' is not a valid RFC3339 date. Defaulting to '2000-01-23'. [%s]", p
LOGGER.warn(String.format(Locale.ROOT, "The example provided for property '%s' is not a valid RFC3339 date. Defaulting to '2000-01-23'. [%s]", p
.getName(), example));
example = "2000, 1, 23";
}
@@ -343,7 +343,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (example.isEmpty()) {
example = "2000, 1, 23, 4, 56, 7";
} else {
LOGGER.warn(String.format("The example provided for property '%s' is not a valid RFC3339 datetime. Defaulting to '2000-01-23T04-56-07Z'. [%s]", p
LOGGER.warn(String.format(Locale.ROOT, "The example provided for property '%s' is not a valid RFC3339 datetime. Defaulting to '2000-01-23T04-56-07Z'. [%s]", p
.getName(), example));
example = "2000, 1, 23, 4, 56, 7";
}
@@ -366,7 +366,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
} else if (ModelUtils.isLongSchema(p)) {
example = example.isEmpty() ? "123456789L" : example + "L";
} else if (ModelUtils.isMapSchema(p)) {
example = "new " + getTypeDeclaration(p) + "{'key'=>" + toExampleValue((Schema) p.getAdditionalProperties()) + "}";
example = "new " + getTypeDeclaration(p) + "{'key'=>" + toExampleValue(ModelUtils.getAdditionalProperties(p)) + "}";
} else if (ModelUtils.isPasswordSchema(p)) {
example = example.isEmpty() ? "password123" : escapeText(example);
@@ -526,7 +526,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
// for symbol, e.g. $, #
if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase();
return getSymbolName(value).toUpperCase(Locale.ROOT);
}
// number
@@ -540,7 +540,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
}
// string
String var = value.replaceAll("\\W+", "_").toUpperCase();
String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) {
return "_" + var;
} else {

View File

@@ -234,7 +234,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
}
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
LOGGER.warn(String.format("%s is not used by C# generators. Please use %s",
LOGGER.warn(String.format(Locale.ROOT, "%s is not used by C# generators. Please use %s",
CodegenConstants.INVOKER_PACKAGE, CodegenConstants.PACKAGE_NAME));
}
@@ -313,9 +313,9 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
if (additionalProperties.containsKey(CodegenConstants.INTERFACE_PREFIX)) {
String useInterfacePrefix = additionalProperties.get(CodegenConstants.INTERFACE_PREFIX).toString();
if ("false".equals(useInterfacePrefix.toLowerCase())) {
if ("false".equals(useInterfacePrefix.toLowerCase(Locale.ROOT))) {
setInterfacePrefix("");
} else if (!"true".equals(useInterfacePrefix.toLowerCase())) {
} else if (!"true".equals(useInterfacePrefix.toLowerCase(Locale.ROOT))) {
// NOTE: if user passes "true" explicitly, we use the default I- prefix. The other supported case here is a custom prefix.
setInterfacePrefix(sanitizeName(useInterfacePrefix));
}
@@ -768,8 +768,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
// NOTE: typeMapping here supports things like string/String, long/Long, datetime/DateTime as lowercase keys.
// Should we require explicit casing here (values are not insensitive).
// TODO avoid using toLowerCase as typeMapping should be case-sensitive
if (typeMapping.containsKey(openAPIType.toLowerCase())) {
type = typeMapping.get(openAPIType.toLowerCase());
if (typeMapping.containsKey(openAPIType.toLowerCase(Locale.ROOT))) {
type = typeMapping.get(openAPIType.toLowerCase(Locale.ROOT));
if (languageSpecificPrimitives.contains(type)) {
return type;
}
@@ -811,7 +811,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
return getArrayTypeDeclaration((ArraySchema) p);
} else if (ModelUtils.isMapSchema(p)) {
// Should we also support maps of maps?
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<string, " + getTypeDeclaration(inner) + ">";
}
return super.getTypeDeclaration(p);

View File

@@ -17,15 +17,11 @@
package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
@@ -46,9 +42,12 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import static com.google.common.base.Strings.isNullOrEmpty;
public abstract class AbstractEiffelCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractEiffelCodegen.class);
@@ -169,13 +168,13 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override
public String toParamName(String name) {
// params should be lowercase. E.g. "person: PERSON"
return toVarName(name).toLowerCase();
return toVarName(name).toLowerCase(Locale.ROOT);
}
@Override
public String toModelName(String name) {
// phone_number => PHONE_NUMBER
return toModelFilename(name).toUpperCase();
return toModelFilename(name).toUpperCase(Locale.ROOT);
}
@Override
@@ -221,7 +220,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override
public String toApiTestFilename(String name) {
return toApiName(name).toLowerCase() + "_test";
return toApiName(name).toLowerCase(Locale.ROOT) + "_test";
}
@Override
@@ -229,7 +228,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
if (name.length() == 0) {
return "DEFAULT_API";
}
return name.toUpperCase() + "_API";
return name.toUpperCase(Locale.ROOT) + "_API";
}
/**
@@ -269,7 +268,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
}
}
if (!isNullOrEmpty(model.parentSchema)) {
model.parentSchema = model.parentSchema.toLowerCase();
model.parentSchema = model.parentSchema.toLowerCase(Locale.ROOT);
}
}
@@ -290,7 +289,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
Schema inner = ap.getItems();
return "LIST [" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
}
@@ -352,7 +351,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
for (CodegenOperation operation : operations) {
// http method verb conversion (e.g. PUT => Put)
operation.httpMethod = camelize(operation.httpMethod.toLowerCase());
operation.httpMethod = camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
}
// remove model imports to avoid error
@@ -557,7 +556,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override
public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties();
Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType();
if (null == type) {
LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" //
@@ -575,7 +574,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
}
public String unCamelize(String name) {
return name.replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase();
return name.replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
}
public String toEiffelFeatureStyle(String operationId) {

View File

@@ -17,22 +17,16 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.core.util.Yaml;
import java.util.*;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
public abstract class AbstractGoCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGoCodegen.class);
@@ -258,7 +252,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
Schema inner = ap.getItems();
return "[]" + getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string]" + getTypeDeclaration(inner);
}
//return super.getTypeDeclaration(p);
@@ -335,7 +329,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation operation : operations) {
// http method verb conversion (e.g. PUT => Put)
operation.httpMethod = camelize(operation.httpMethod.toLowerCase());
operation.httpMethod = camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
}
// remove model imports to avoid error
@@ -389,7 +383,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
} else {
// Map optional type to dataType
param.vendorExtensions.put("x-optionalDataType",
param.dataType.substring(0, 1).toUpperCase() + param.dataType.substring(1));
param.dataType.substring(0, 1).toUpperCase(Locale.ROOT) + param.dataType.substring(1));
}
}
@@ -562,11 +556,11 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
// for symbol, e.g. $, #
if (getSymbolName(name) != null) {
return getSymbolName(name).toUpperCase();
return getSymbolName(name).toUpperCase(Locale.ROOT);
}
// string
String enumName = sanitizeName(underscore(name).toUpperCase());
String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", "");
@@ -581,7 +575,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
@Override
public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase();
String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum
enumName = enumName.replace("[]", "");

View File

@@ -49,6 +49,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
@@ -564,7 +565,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
// sanitize name
name = sanitizeName(name, "\\W-[\\$]"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if (name.toLowerCase().matches("^_*class$")) {
if (name.toLowerCase(Locale.ROOT).matches("^_*class$")) {
return "propertyClass";
}
@@ -578,7 +579,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
if (startsWithTwoUppercaseLetters(name)) {
name = name.substring(0, 2).toLowerCase() + name.substring(2);
name = name.substring(0, 2).toLowerCase(Locale.ROOT) + name.substring(2);
}
// If name contains special chars -> replace them.
@@ -604,7 +605,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
private boolean startsWithTwoUppercaseLetters(String name) {
boolean startsWithTwoUppercaseLetters = false;
if (name.length() > 1) {
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase());
startsWithTwoUppercaseLetters = name.substring(0, 2).equals(name.substring(0, 2).toUpperCase(Locale.ROOT));
}
return startsWithTwoUppercaseLetters;
}
@@ -679,7 +680,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
if (inner == null) {
LOGGER.warn(p.getName() + "(map property) does not have a proper inner type defined. Default to string");
inner = new StringSchema().description("TODO default missing array inner type to string");
@@ -720,7 +721,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
}
return String.format(pattern, typeDeclaration);
return String.format(Locale.ROOT, pattern, typeDeclaration);
} else if (ModelUtils.isMapSchema(p)) {
final String pattern;
if (fullJavaUtil) {
@@ -728,11 +729,11 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} else {
pattern = "new HashMap<%s>()";
}
if (p.getAdditionalProperties() == null) {
if (ModelUtils.getAdditionalProperties(p) == null) {
return null;
}
String typeDeclaration = String.format("String, %s", getTypeDeclaration((Schema) p.getAdditionalProperties()));
String typeDeclaration = String.format(Locale.ROOT, "String, %s", getTypeDeclaration(ModelUtils.getAdditionalProperties(p)));
Object java8obj = additionalProperties.get("java8");
if (java8obj != null) {
Boolean java8 = Boolean.valueOf(java8obj.toString());
@@ -741,7 +742,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
}
return String.format(pattern, typeDeclaration);
return String.format(Locale.ROOT, pattern, typeDeclaration);
} else if (ModelUtils.isIntegerSchema(p)) {
if (p.getDefault() != null) {
if (SchemaTypeUtil.INTEGER64_FORMAT.equals(p.getFormat())) {
@@ -1049,7 +1050,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
// for symbol, e.g. $, #
if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase();
return getSymbolName(value).toUpperCase(Locale.ROOT);
}
// number
@@ -1063,7 +1064,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
// string
String var = value.replaceAll("\\W+", "_").toUpperCase();
String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) {
return "_" + var;
} else {

View File

@@ -17,16 +17,13 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,6 +31,7 @@ import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
public abstract class AbstractKotlinCodegen extends DefaultCodegen implements CodegenConfig {
@@ -220,7 +218,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
@Override
public String escapeReservedWord(String name) {
// TODO: Allow enum escaping as an option (e.g. backticks vs append/prepend underscore vs match model property escaping).
return String.format("`%s`", name);
return String.format(Locale.ROOT, "`%s`", name);
}
@Override
@@ -282,7 +280,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p);
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
// Maps will be keyed only by primitive Kotlin string
return getSchemaType(p) + "<kotlin.String, " + getTypeDeclaration(inner) + ">";
@@ -414,7 +412,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
modified = underscore(modified);
break;
case UPPERCASE:
modified = modified.toUpperCase();
modified = modified.toUpperCase(Locale.ROOT);
break;
}
@@ -536,7 +534,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
}
private String titleCase(final String input) {
return input.substring(0, 1).toUpperCase() + input.substring(1);
return input.substring(0, 1).toUpperCase(Locale.ROOT) + input.substring(1);
}
@Override

View File

@@ -1,5 +1,4 @@
/*
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
/*ap Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
* Copyright 2018 SmartBear Software
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,6 +16,9 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
@@ -24,23 +26,20 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractPhpCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPhpCodegen.class);
@@ -238,6 +237,9 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
// apache v2 license
// supportingFiles.add(new SupportingFile("LICENSE", "", "LICENSE"));
// all PHP codegens requires Composer, it means that we need to exclude from SVN at least vendor folder
supportingFiles.add(new SupportingFile(".gitignore", "", ".gitignore"));
}
public String getPackageName() {
@@ -328,7 +330,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
Schema inner = ap.getItems();
return getTypeDeclaration(inner) + "[]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
} else if (StringUtils.isNotBlank(p.get$ref())) { // model
String type = super.getTypeDeclaration(p);
@@ -623,7 +625,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
// for symbol, e.g. $, #
if (getSymbolName(name) != null) {
return (getSymbolName(name)).toUpperCase();
return (getSymbolName(name)).toUpperCase(Locale.ROOT);
}
// number
@@ -636,7 +638,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
}
// string
String enumName = sanitizeName(underscore(name).toUpperCase());
String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", "");
@@ -649,7 +651,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
@Override
public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase();
String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum
enumName = enumName.replace("[]", "");

View File

@@ -19,12 +19,14 @@ package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.*;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.Locale;
abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRubyCodegen.class);
@@ -88,7 +90,7 @@ abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ((ArraySchema) schema).getItems();
return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(schema)) {
Schema inner = (Schema) schema.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(schema);
return getSchemaType(schema) + "<String, " + getTypeDeclaration(inner) + ">";
}
@@ -116,7 +118,7 @@ abstract class AbstractRubyCodegen extends DefaultCodegen implements CodegenConf
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase();
name = name.toLowerCase(Locale.ROOT);
}
// camelize (lower first character) the variable name

View File

@@ -181,7 +181,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
@@ -206,7 +206,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
@Override
public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties());
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return instantiationTypes.get("map") + "[String, " + inner + "]";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;
@@ -235,7 +235,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
} else if (ModelUtils.isIntegerSchema(p)) {
return null;
} else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties());
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "new HashMap[String, " + inner + "]() ";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;

View File

@@ -227,7 +227,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + getTypeDeclaration(inner) + "; }";
} else if (ModelUtils.isFileSchema(p)) {
return "any";
@@ -246,7 +246,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
inner = mp1.getItems();
return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
inner = (Schema) p.getAdditionalProperties();
inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + this.getParameterDataType(parameter, inner) + "; }";
} else if (ModelUtils.isStringSchema(p)) {
// Handle string enums

View File

@@ -17,14 +17,18 @@
package org.openapitools.codegen.languages;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import org.apache.commons.lang3.StringUtils;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.openapitools.codegen.*;
import java.util.Locale;
public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
@@ -71,7 +75,7 @@ public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
// e.g. petstore.api (package name) => petstore_api (project name)
projectName = packageName.replaceAll("\\.", "_");
}
String configBaseName = modelPackage.toLowerCase();
String configBaseName = modelPackage.toLowerCase(Locale.ROOT);
supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr"));
// supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr"));

View File

@@ -19,7 +19,6 @@ package org.openapitools.codegen.languages;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
@@ -28,6 +27,7 @@ import org.openapitools.codegen.SupportingFile;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.Locale;
public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfig {
@@ -76,7 +76,7 @@ public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfi
// e.g. petstore.api (package name) => petstore_api (project name)
projectName = packageName.replaceAll("\\.", "_");
}
String configBaseName = modelPackage.toLowerCase();
String configBaseName = modelPackage.toLowerCase(Locale.ROOT);
supportingFiles.add(new SupportingFile("gnat-project.mustache", "", toFilename(projectName) + ".gpr"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("config.gpr", "", "config.gpr"));

View File

@@ -189,7 +189,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">";
}

View File

@@ -217,6 +217,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
if (ModelUtils.isArraySchema(p)) {
Schema inner = ((ArraySchema) p).getItems();
out = String.format(
Locale.ROOT,
"new List<%s>()",
inner == null ? "Object" : getTypeDeclaration(inner)
);
@@ -227,14 +228,14 @@ public class ApexClientCodegen extends AbstractApexCodegen {
Long def = (Long) p.getDefault();
out = def == null ? out : def.toString() + "L";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
String s = inner == null ? "Object" : getTypeDeclaration(inner);
out = String.format("new Map<String, %s>()", s);
out = String.format(Locale.ROOT, "new Map<String, %s>()", s);
} else if (ModelUtils.isStringSchema(p)) {
if (p.getDefault() != null) {
String def = p.getDefault().toString();
if (def != null) {
out = p.getEnum() == null ? String.format("'%s'", escapeText(def)) : def;
out = p.getEnum() == null ? String.format(Locale.ROOT, "'%s'", escapeText(def)) : def;
}
}
} else {
@@ -270,7 +271,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
if (apiVersion.matches("^\\d{2}(\\.0)?$")) {
return apiVersion.substring(0, 2) + ".0";
} else {
LOGGER.warn(String.format("specified API version is invalid: %s - defaulting to %s", apiVersion, this.apiVersion));
LOGGER.warn(String.format(Locale.ROOT, "specified API version is invalid: %s - defaulting to %s", apiVersion, this.apiVersion));
return this.apiVersion;
}
}

View File

@@ -17,21 +17,21 @@
package org.openapitools.codegen.languages;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.net.URL;
import java.util.*;
import java.util.Arrays;
import java.util.Locale;
import java.util.Map;
import static java.util.UUID.randomUUID;
@@ -39,7 +39,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
public static final String USE_SWASHBUCKLE = "useSwashbuckle";
private String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}";
private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
@SuppressWarnings("hiding")
protected Logger LOGGER = LoggerFactory.getLogger(AspNetCoreServerCodegen.class);
@@ -141,7 +141,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
additionalProperties.put(USE_SWASHBUCKLE, useSwashbuckle);
}
additionalProperties.put("dockerTag", packageName.toLowerCase());
additionalProperties.put("dockerTag", packageName.toLowerCase(Locale.ROOT));
apiPackage = packageName + ".Controllers";
modelPackage = packageName + ".Models";
@@ -211,7 +211,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
}
// Converts, for example, PUT to HttpPut for controller attributes
operation.httpMethod = "Http" + operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase();
operation.httpMethod = "Http" + operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase(Locale.ROOT);
}
@Override

View File

@@ -388,7 +388,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
@@ -637,7 +637,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(
definitions.get(p.dataType).getExample()));
} catch (JsonProcessingException e) {
e.printStackTrace();
LOGGER.warn(e.getMessage(), e);
}
} else {
/**

View File

@@ -17,13 +17,9 @@
package org.openapitools.codegen.languages;
import static org.apache.commons.lang3.StringUtils.isEmpty;
import com.google.common.collect.ImmutableMap;
import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
@@ -40,8 +36,11 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import static org.apache.commons.lang3.StringUtils.isEmpty;
public class CSharpClientCodegen extends AbstractCSharpCodegen {
@SuppressWarnings({"hiding"})
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class);
@@ -57,7 +56,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
// Defines the sdk option for targeted frameworks, which differs from targetFramework and targetFrameworkNuget
private static final String MCS_NET_VERSION_KEY = "x-mcs-sdk";
protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}";
protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
protected String clientPackage = "Org.OpenAPITools.Client";
protected String localVariablePrefix = "";
protected String apiDocPath = "docs/";

View File

@@ -17,17 +17,24 @@
package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty;
import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.openapitools.codegen.CodegenConstants.*;
import static org.openapitools.codegen.CodegenType.SERVER;
import static java.util.Arrays.asList;
import static java.util.UUID.randomUUID;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.*;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.net.URL;
@@ -36,20 +43,34 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import static com.google.common.base.Strings.isNullOrEmpty;
import static java.util.Arrays.asList;
import static java.util.UUID.randomUUID;
import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.openapitools.codegen.CodegenConstants.INTERFACE_PREFIX;
import static org.openapitools.codegen.CodegenConstants.INTERFACE_PREFIX_DESC;
import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE;
import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE_DESC;
import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_GUID;
import static org.openapitools.codegen.CodegenConstants.OPTIONAL_PROJECT_GUID_DESC;
import static org.openapitools.codegen.CodegenConstants.PACKAGE_NAME;
import static org.openapitools.codegen.CodegenConstants.PACKAGE_VERSION;
import static org.openapitools.codegen.CodegenConstants.RETURN_ICOLLECTION;
import static org.openapitools.codegen.CodegenConstants.RETURN_ICOLLECTION_DESC;
import static org.openapitools.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG;
import static org.openapitools.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC;
import static org.openapitools.codegen.CodegenConstants.SOURCE_FOLDER;
import static org.openapitools.codegen.CodegenConstants.SOURCE_FOLDER_DESC;
import static org.openapitools.codegen.CodegenConstants.USE_COLLECTION;
import static org.openapitools.codegen.CodegenConstants.USE_COLLECTION_DESC;
import static org.openapitools.codegen.CodegenConstants.USE_DATETIME_OFFSET;
import static org.openapitools.codegen.CodegenConstants.USE_DATETIME_OFFSET_DESC;
import static org.openapitools.codegen.CodegenType.SERVER;
public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpNancyFXServerCodegen.class);
@@ -64,7 +85,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
private static final Map<String, Predicate<Schema>> propertyToOpenAPITypeMapping =
createPropertyToOpenAPITypeMapping();
private String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}";
private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
private final Map<String, DependencyInfo> dependencies = new HashMap<>();
private final Set<String> parentModels = new HashSet<>();
@@ -185,18 +206,18 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
final String assemblyFramework = namespaceInfo.length > 3 ? namespaceInfo[3].trim() : "net45";
if (isNullOrEmpty(model) || isNullOrEmpty(namespaceName)) {
LOGGER.warn(String.format("Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue()));
LOGGER.warn(String.format(Locale.ROOT, "Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue()));
importMapping.remove(model);
} else {
LOGGER.info(String.format("Importing: '%s' from '%s' namespace.", model, namespaceName));
LOGGER.info(String.format(Locale.ROOT, "Importing: '%s' from '%s' namespace.", model, namespaceName));
importMapping.put(model, namespaceName);
}
if (!isNullOrEmpty(modelClass)) {
LOGGER.info(String.format("Mapping: '%s' class to '%s'", model, modelClass));
LOGGER.info(String.format(Locale.ROOT, "Mapping: '%s' class to '%s'", model, modelClass));
modelNameMapping.put(model, modelClass);
}
if (assembly != null && assemblyVersion != null) {
LOGGER.info(String.format("Adding dependency: '%s', version: '%s', framework: '%s'",
LOGGER.info(String.format(Locale.ROOT, "Adding dependency: '%s', version: '%s', framework: '%s'",
assembly, assemblyVersion, assemblyVersion));
dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework));
}
@@ -248,7 +269,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
operation.path = operation.path.replace("?", "/");
}
if (!isNullOrEmpty(operation.httpMethod)) {
operation.httpMethod = capitalize(operation.httpMethod.toLowerCase());
operation.httpMethod = capitalize(operation.httpMethod.toLowerCase(Locale.ROOT));
}
}
@@ -280,7 +301,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
for (final CodegenProperty property : parent.vars) {
final CodegenProperty duplicatedByParent = childPropertiesByName.get(property.name);
if (duplicatedByParent != null) {
LOGGER.info(String.format("Property: '%s' in '%s' model is inherited from '%s'",
LOGGER.info(String.format(Locale.ROOT, "Property: '%s' in '%s' model is inherited from '%s'",
property.name, child.classname, parent.classname));
duplicatedByParent.isInherited = true;
final CodegenProperty parentVar = duplicatedByParent.clone();
@@ -322,7 +343,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else {
result = enumName;
}
LOGGER.debug(String.format("toEnumVarName('%s', %s) = '%s'", name, datatype, enumName));
LOGGER.debug(String.format(Locale.ROOT, "toEnumVarName('%s', %s) = '%s'", name, datatype, enumName));
return result;
}
@@ -334,7 +355,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else {
apiName = capitalize(name);
}
LOGGER.debug(String.format("toApiName('%s') = '%s'", name, apiName));
LOGGER.debug(String.format(Locale.ROOT, "toApiName('%s') = '%s'", name, apiName));
return apiName;
}
@@ -355,7 +376,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen {
} else {
result = null;
}
LOGGER.debug(String.format("toModelImport('%s') = '%s'", name, result));
LOGGER.debug(String.format(Locale.ROOT, "toModelImport('%s') = '%s'", name, result));
return result;
}

View File

@@ -17,6 +17,11 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
@@ -24,16 +29,11 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.info.*;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.Map;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final String PROJECT_NAME = "projectName";
@@ -221,7 +221,7 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi
List<CodegenOperation> ops = (List<CodegenOperation>) objs.get("operation");
for (CodegenOperation op : ops) {
// Convert httpMethod to lower case, e.g. "get", "post"
op.httpMethod = op.httpMethod.toLowerCase();
op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
}
return operations;
}

View File

@@ -19,7 +19,6 @@ package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
@@ -32,6 +31,7 @@ import org.openapitools.codegen.utils.ModelUtils;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConfig {
@@ -99,7 +99,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);
@@ -110,7 +110,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation op : operationList) {
op.httpMethod = op.httpMethod.toLowerCase();
op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
}
return objs;
}

View File

@@ -22,7 +22,6 @@ import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
@@ -38,6 +37,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -198,8 +198,8 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
String classname = (String) operations.get("classname");
operations.put("classnameSnakeUpperCase", DefaultCodegen.underscore(classname).toUpperCase());
operations.put("classnameSnakeLowerCase", DefaultCodegen.underscore(classname).toLowerCase());
operations.put("classnameSnakeUpperCase", DefaultCodegen.underscore(classname).toUpperCase(Locale.ROOT));
operations.put("classnameSnakeLowerCase", DefaultCodegen.underscore(classname).toLowerCase(Locale.ROOT));
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation op : operationList) {
@@ -220,7 +220,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
}
}
op.httpMethod = op.httpMethod.substring(0, 1).toUpperCase() + op.httpMethod.substring(1).toLowerCase();
op.httpMethod = op.httpMethod.substring(0, 1).toUpperCase(Locale.ROOT) + op.httpMethod.substring(1).toLowerCase(Locale.ROOT);
for (CodegenParameter param : op.allParams) {
if (param.isFormParam) isParsingSupported = false;
@@ -305,7 +305,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
}
if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">";
}
else if (ModelUtils.isByteArraySchema(p)) {
@@ -343,7 +343,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
else if (ModelUtils.isByteArraySchema(p)) {
return "\"\"";
} else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties());
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;

View File

@@ -17,12 +17,15 @@
package org.openapitools.codegen.languages;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,6 +33,7 @@ import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -294,7 +298,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">*";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">*";
}
if (foundationClasses.contains(openAPIType)) {
@@ -325,7 +329,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
}
return "0";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "new QMap<QString, " + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;
@@ -371,7 +375,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
// if it's all uppper case, convert to lower case
if (varName.matches("^[A-Z_]*$")) {
varName = varName.toLowerCase();
varName = varName.toLowerCase(Locale.ROOT);
}
// camelize (lower first character) the variable name

View File

@@ -17,12 +17,14 @@
package org.openapitools.codegen.languages;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.parser.util.SchemaTypeUtil;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,6 +32,7 @@ import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -323,7 +326,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<QString, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isBinarySchema(p)) {
return getSchemaType(p) + "*";
@@ -359,7 +362,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
}
return "0";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "QMap<QString, " + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;
@@ -407,7 +410,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement
// if it's all uppper case, convert to lower case
if (varName.matches("^[A-Z_]*$")) {
varName = varName.toLowerCase();
varName = varName.toLowerCase(Locale.ROOT);
}
// camelize (lower first character) the variable name

View File

@@ -17,17 +17,13 @@
package org.openapitools.codegen.languages;
import static com.google.common.base.Strings.isNullOrEmpty;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
@@ -42,9 +38,12 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import static com.google.common.base.Strings.isNullOrEmpty;
public class CppRestSdkClientCodegen extends AbstractCppCodegen {
public static final String DECLSPEC = "declspec";
@@ -139,6 +138,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore"));
supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh"));
supportingFiles.add(new SupportingFile("cmake-lists.mustache", "", "CMakeLists.txt"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList("int", "char", "bool", "long", "float", "double", "int32_t", "int64_t"));
@@ -188,10 +188,10 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\."));
additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::"));
additionalProperties.put("modelHeaderGuardPrefix", modelPackage.replaceAll("\\.", "_").toUpperCase());
additionalProperties.put("modelHeaderGuardPrefix", modelPackage.replaceAll("\\.", "_").toUpperCase(Locale.ROOT));
additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\."));
additionalProperties.put("apiNamespace", apiPackage.replaceAll("\\.", "::"));
additionalProperties.put("apiHeaderGuardPrefix", apiPackage.replaceAll("\\.", "_").toUpperCase());
additionalProperties.put("apiHeaderGuardPrefix", apiPackage.replaceAll("\\.", "_").toUpperCase(Locale.ROOT));
additionalProperties.put("declspec", declspec);
additionalProperties.put("defaultInclude", defaultInclude);
}
@@ -307,7 +307,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<utility::string_t, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isStringSchema(p)
|| ModelUtils.isDateSchema(p) || ModelUtils.isDateTimeSchema(p)
@@ -338,7 +338,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
}
return "0";
} else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties());
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<utility::string_t, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;

View File

@@ -270,7 +270,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<std::string, " + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isByteArraySchema(p)) {
return "std::string";
@@ -307,7 +307,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
} else if (ModelUtils.isByteArraySchema(p)) {
return "\"\"";
} else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType((Schema) p.getAdditionalProperties());
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;

View File

@@ -307,7 +307,7 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "<String, " + getTypeDeclaration(inner) + ">";
}

View File

@@ -17,13 +17,16 @@
package org.openapitools.codegen.languages;
import java.io.File;
import java.util.UUID;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.openapitools.codegen.*;
import java.io.File;
import java.util.Locale;
import java.util.UUID;
public class EiffelClientCodegen extends AbstractEiffelCodegen {
private static final Logger LOGGER = LoggerFactory.getLogger(EiffelClientCodegen.class);
@@ -168,7 +171,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
@Override
public String toEnumName(CodegenProperty property) {
return sanitizeName(property.name).toUpperCase() + "_ENUM";
return sanitizeName(property.name).toUpperCase(Locale.ROOT) + "_ENUM";
}
@Override
@@ -179,7 +182,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
// for symbol, e.g. $, #
if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase();
return getSymbolName(value).toUpperCase(Locale.ROOT);
}
// number
@@ -193,7 +196,7 @@ public class EiffelClientCodegen extends AbstractEiffelCodegen {
}
// string
String var = value.replaceAll("\\W+", "_").toLowerCase();
String var = value.replaceAll("\\W+", "_").toLowerCase(Locale.ROOT);
if (var.matches("\\d.*")) {
return "val_" + var;
} else if (var.startsWith("_")) {

View File

@@ -447,7 +447,7 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "%{optional(String.t) => " + getTypeDeclaration(inner) + "}";
} else if (ModelUtils.isPasswordSchema(p)) {
return "String.t";

View File

@@ -17,15 +17,21 @@
package org.openapitools.codegen.languages;
import org.openapitools.codegen.*;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.NumberSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenResponse;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
import org.openapitools.codegen.languages.features.JbossFeature;
import org.openapitools.codegen.languages.features.SwaggerFeatures;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.parameters.*;
import io.swagger.v3.oas.models.responses.*;
import java.io.File;
import java.text.Collator;
@@ -36,6 +42,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
@@ -259,7 +266,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
Collections.sort(parent.children, new Comparator<CodegenModel>() {
@Override
public int compare(CodegenModel cm1, CodegenModel cm2) {
return Collator.getInstance().compare(cm1.classname, cm2.classname);
return Collator.getInstance(Locale.ROOT).compare(cm1.classname, cm2.classname);
}
});
}
@@ -486,7 +493,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems();
return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner);
}
return super.getTypeDeclaration(p);
@@ -506,8 +513,8 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
}
@Override
public CodegenResponse fromResponse(String responseCode, ApiResponse resp) {
final CodegenResponse response = super.fromResponse(responseCode, resp);
public CodegenResponse fromResponse(OpenAPI openAPI, String responseCode, ApiResponse resp) {
final CodegenResponse response = super.fromResponse(openAPI, responseCode, resp);
if (response.dataType != null) {
addEncoderAndDecoder(response.vendorExtensions, response.dataType, response.isMapContainer, response.primitiveType);
}

View File

@@ -21,6 +21,7 @@ import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.openapitools.codegen.*;
import org.openapitools.codegen.mustache.JoinWithCommaLambda;
import io.swagger.v3.oas.models.media.*;
import java.io.File;
@@ -133,6 +134,8 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
public void processOpts() {
super.processOpts();
additionalProperties.put("joinWithComma", new JoinWithCommaLambda());
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
} else {
@@ -287,7 +290,7 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig
Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}");
for (CodegenOperation o : os) {
// force http method to lower case
o.httpMethod = o.httpMethod.toLowerCase();
o.httpMethod = o.httpMethod.toLowerCase(Locale.ROOT);
if (o.isListContainer) {
o.returnType = "[" + o.returnBaseType + "]";

View File

@@ -239,7 +239,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
@@ -341,7 +341,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
}
private void generateScalaPath(CodegenOperation op) {
op.httpMethod = op.httpMethod.toLowerCase();
op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT);
String path = op.path;
@@ -366,7 +366,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
final CodegenParameter cp = op.pathParams.get(pathParamIndex);
// TODO: Handle non-primitives…
scalaPath = colConcat(scalaPath, cp.dataType.toLowerCase());
scalaPath = colConcat(scalaPath, cp.dataType.toLowerCase(Locale.ROOT));
pathParamIndex++;
} else {
@@ -425,7 +425,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
p.vendorExtensions.put("x-codegen-normalized-path-type", toPathParameter(p, "param", true));
} else {
// If parameter is primitive and required, we can rely on data types like "string" or "long"
p.vendorExtensions.put("x-codegen-normalized-path-type", p.dataType.toLowerCase());
p.vendorExtensions.put("x-codegen-normalized-path-type", p.dataType.toLowerCase(Locale.ROOT));
}
p.vendorExtensions.put("x-codegen-normalized-input-type", toInputParameter(p));
} else {

View File

@@ -17,25 +17,17 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.*;
import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.mustache.*;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.parameters.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import org.apache.commons.lang3.StringUtils;
import java.util.Locale;
public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(FlashClientCodegen.class);
@@ -267,7 +259,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig
// if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) {
name = name.toLowerCase();
name = name.toLowerCase(Locale.ROOT);
}
// underscore the variable name

View File

@@ -465,7 +465,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
} else {
baseTitle = baseTitle.trim();
// Drop any API suffix
if (baseTitle.toUpperCase().endsWith("API")) {
if (baseTitle.toUpperCase(Locale.ROOT).endsWith("API")) {
baseTitle = baseTitle.substring(0, baseTitle.length() - 3);
}
}
@@ -473,7 +473,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (!additionalProperties.containsKey(PROP_CABAL_PACKAGE)) {
List<String> words = new ArrayList<>();
for (String word : baseTitle.split(" ")) {
words.add(word.toLowerCase());
words.add(word.toLowerCase(Locale.ROOT));
}
setCabalPackage(StringUtils.join(words, "-"));
}
@@ -548,7 +548,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "(Map.Map String " + getTypeDeclaration(inner) + ")";
}
return super.getTypeDeclaration(p);
@@ -570,7 +570,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
@Override
public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties();
Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType();
if (null == type) {
LOGGER.error("No Type defined for Additional Schema " + additionalProperties2 + "\n" //
@@ -615,7 +615,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
LOGGER.warn("generated unique operationId `" + uniqueName + "`");
}
op.operationId = uniqueName;
op.operationIdLowerCase = uniqueName.toLowerCase();
op.operationIdLowerCase = uniqueName.toLowerCase(Locale.ROOT);
op.operationIdCamelCase = DefaultCodegen.camelize(uniqueName);
op.operationIdSnakeCase = DefaultCodegen.underscore(uniqueName);
opList.add(op);
@@ -628,7 +628,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
op.vendorExtensions.put(X_OPERATION_TYPE, operationType);
typeNames.add(operationType);
op.vendorExtensions.put(X_HADDOCK_PATH, String.format("%s %s", op.httpMethod, op.path.replace("/", "\\/")));
op.vendorExtensions.put(X_HADDOCK_PATH, String.format(Locale.ROOT, "%s %s", op.httpMethod, op.path.replace("/", "\\/")));
op.vendorExtensions.put(X_HAS_BODY_OR_FORM_PARAM, op.getHasBodyParam() || op.getHasFormParams());
for (CodegenParameter param : op.allParams) {
@@ -1003,9 +1003,9 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (word.length() == 0) {
return word;
} else if (word.length() == 1) {
return word.substring(0, 1).toUpperCase();
return word.substring(0, 1).toUpperCase(Locale.ROOT);
} else {
return word.substring(0, 1).toUpperCase() + word.substring(1);
return word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1);
}
}
@@ -1013,9 +1013,9 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (word.length() == 0) {
return word;
} else if (word.length() == 1) {
return word.substring(0, 1).toLowerCase();
return word.substring(0, 1).toLowerCase(Locale.ROOT);
} else {
return word.substring(0, 1).toLowerCase() + word.substring(1);
return word.substring(0, 1).toLowerCase(Locale.ROOT) + word.substring(1);
}
}
@@ -1303,7 +1303,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
}
// number
if (num.contains(datatype.toLowerCase())) {
if (num.contains(datatype.toLowerCase(Locale.ROOT))) {
String varName = "Num" + value;
varName = varName.replaceAll("-", "Minus_");
varName = varName.replaceAll("\\+", "Plus_");
@@ -1317,7 +1317,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
@Override
public String toEnumValue(String value, String datatype) {
List<String> num = new ArrayList<>(Arrays.asList("integer", "int", "double", "long", "float"));
if (num.contains(datatype.toLowerCase())) {
if (num.contains(datatype.toLowerCase(Locale.ROOT))) {
return value;
} else {
return "\"" + escapeText(value) + "\"";

View File

@@ -17,6 +17,10 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
@@ -29,15 +33,16 @@ import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.media.*;
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
public class HaskellServantCodegen extends DefaultCodegen implements CodegenConfig {
@@ -204,9 +209,9 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (word.length() == 0) {
return word;
} else if (word.length() == 1) {
return word.substring(0, 1).toUpperCase();
return word.substring(0, 1).toUpperCase(Locale.ROOT);
} else {
return word.substring(0, 1).toUpperCase() + word.substring(1);
return word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1);
}
}
@@ -214,9 +219,9 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (word.length() == 0) {
return word;
} else if (word.length() == 1) {
return word.substring(0, 1).toLowerCase();
return word.substring(0, 1).toLowerCase(Locale.ROOT);
} else {
return word.substring(0, 1).toLowerCase() + word.substring(1);
return word.substring(0, 1).toLowerCase(Locale.ROOT) + word.substring(1);
}
}
@@ -230,7 +235,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
title = "OpenAPI";
} else {
title = title.trim();
if (title.toUpperCase().endsWith("API")) {
if (title.toUpperCase(Locale.ROOT).endsWith("API")) {
title = title.substring(0, title.length() - 3);
}
}
@@ -240,7 +245,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
// The package name is made by appending the lowercased words of the title interspersed with dashes
List<String> wordsLower = new ArrayList<String>();
for (String word : words) {
wordsLower.add(word.toLowerCase());
wordsLower.add(word.toLowerCase(Locale.ROOT));
}
String cabalName = joinStrings("-", wordsLower);
@@ -293,7 +298,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "Map.Map String " + getTypeDeclaration(inner);
}
return fixModelChars(super.getTypeDeclaration(p));
@@ -328,7 +333,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
@Override
public String toInstantiationType(Schema p) {
if (ModelUtils.isMapSchema(p)) {
Schema additionalProperties2 = (Schema) p.getAdditionalProperties();
Schema additionalProperties2 = ModelUtils.getAdditionalProperties(p);
String type = additionalProperties2.getType();
if (null == type) {
LOGGER.error("No Type defined for Additional Property " + additionalProperties2 + "\n" //
@@ -484,7 +489,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
if (returnType.indexOf(" ") >= 0) {
returnType = "(" + returnType + ")";
}
path.add("Verb '" + op.httpMethod.toUpperCase() + " 200 '[JSON] " + returnType);
path.add("Verb '" + op.httpMethod.toUpperCase(Locale.ROOT) + " 200 '[JSON] " + returnType);
type.add("m " + returnType);
op.vendorExtensions.put("x-routeType", joinStrings(" :> ", path));

View File

@@ -174,7 +174,7 @@ public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[String, " + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);

View File

@@ -18,7 +18,6 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.Operation;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenModel;
@@ -32,6 +31,7 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class JavaInflectorServerCodegen extends AbstractJavaCodegen {
@@ -198,7 +198,7 @@ public class JavaInflectorServerCodegen extends AbstractJavaCodegen {
@Override
protected String getOrGenerateOperationId(Operation operation, String path, String httpMethod) {
return super.getOrGenerateOperationId(operation, path, httpMethod.toUpperCase());
return super.getOrGenerateOperationId(operation, path, httpMethod.toUpperCase(Locale.ROOT));
}
public String apiFilename(String templateName, String tag) {

View File

@@ -18,12 +18,12 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.SupportingFile;
import java.io.File;
@@ -37,13 +37,17 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
public static final String INTERFACE_ONLY = "interfaceOnly";
public static final String RETURN_RESPONSE = "returnResponse";
public static final String GENERATE_POM = "generatePom";
public static final String USE_SWAGGER_ANNOTATIONS = "useSwaggerAnnotations";
public static final String JACKSON = "jackson";
private boolean interfaceOnly = false;
private boolean returnResponse = false;
private boolean generatePom = true;
private boolean useSwaggerAnnotations = true;
private boolean useJackson = false;
private String primaryResourceName;
public JavaJAXRSSpecServerCodegen() {
super();
invokerPackage = "org.openapitools.api";
@@ -91,6 +95,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
cliOptions.add(CliOption.newBoolean(GENERATE_POM, "Whether to generate pom.xml if the file does not already exist.").defaultValue(String.valueOf(generatePom)));
cliOptions.add(CliOption.newBoolean(INTERFACE_ONLY, "Whether to generate only API interface stubs without the server files.").defaultValue(String.valueOf(interfaceOnly)));
cliOptions.add(CliOption.newBoolean(RETURN_RESPONSE, "Whether generate API interface should return javax.ws.rs.core.Response instead of a deserialized entity. Only useful if interfaceOnly is true.").defaultValue(String.valueOf(returnResponse)));
cliOptions.add(CliOption.newBoolean(USE_SWAGGER_ANNOTATIONS, "Whether to generate Swagger annotations.", useSwaggerAnnotations));
}
@Override
@@ -110,6 +115,13 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
additionalProperties.remove(RETURN_RESPONSE);
}
}
if (additionalProperties.containsKey(USE_SWAGGER_ANNOTATIONS)) {
useSwaggerAnnotations = Boolean.valueOf(additionalProperties.get(USE_SWAGGER_ANNOTATIONS).toString());
}
writePropertyBack(USE_SWAGGER_ANNOTATIONS, useSwaggerAnnotations);
useJackson = convertPropertyToBoolean(JACKSON);
if (interfaceOnly) {
// Change default artifactId if genereating interfaces only, before command line options are applied in base class.
artifactId = "openapi-jaxrs-client";
@@ -148,7 +160,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
if (pos > 0) {
basePath = basePath.substring(0, pos);
}
String operationKey = basePath;
if (StringUtils.isEmpty(basePath)) {
basePath = tag;
@@ -174,14 +186,19 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
}
@Override
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
super.postProcessModelProperty(model, property);
model.imports.remove("ApiModelProperty");
model.imports.remove("ApiModel");
model.imports.remove("JsonSerialize");
model.imports.remove("ToStringSerializer");
model.imports.remove("JsonValue");
model.imports.remove("JsonProperty");
public CodegenModel fromModel(String name, Schema model, Map<String, Schema> allDefinitions) {
CodegenModel codegenModel = super.fromModel(name, model, allDefinitions);
if (!useSwaggerAnnotations) {
codegenModel.imports.remove("ApiModelProperty");
codegenModel.imports.remove("ApiModel");
}
if (!useJackson) {
codegenModel.imports.remove("JsonSerialize");
codegenModel.imports.remove("ToStringSerializer");
codegenModel.imports.remove("JsonValue");
codegenModel.imports.remove("JsonProperty");
}
return codegenModel;
}
@Override
@@ -194,7 +211,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
public String getHelp() {
return "Generates a Java JAXRS Server according to JAXRS 2.0 specification.";
}
@Override
public String toApiName(final String name) {
String computed = name;

View File

@@ -17,13 +17,12 @@
package org.openapitools.codegen.languages;
import org.openapitools.codegen.*;
import io.swagger.v3.oas.models.*;
import java.util.*;
import io.swagger.v3.oas.models.Operation;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import java.util.*;
public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
@@ -159,7 +158,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
@Override
public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) {
if (useTags) {
String basePath = tag.toLowerCase();
String basePath = tag.toLowerCase(Locale.ROOT);
if (basePath.startsWith("/")) {
basePath = basePath.substring(1);
}

View File

@@ -21,7 +21,6 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.tags.Tag;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
@@ -39,6 +38,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
@@ -541,7 +541,7 @@ public class JavaPKMSTServerCodegen extends AbstractJavaCodegen {
// Drop any API suffix
if (title != null) {
title = title.trim().replace(" ", "-");
if (title.toUpperCase().endsWith("API")) {
if (title.toUpperCase(Locale.ROOT).endsWith("API")) {
title = title.substring(0, title.length() - 3);
}

View File

@@ -30,6 +30,7 @@ import org.openapitools.codegen.languages.features.BeanValidationFeatures;
import java.io.File;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -191,7 +192,7 @@ public class JavaPlayFrameworkCodegen extends AbstractJavaCodegen implements Bea
if (this.useSwaggerUI) {
//App/Controllers
supportingFiles.add(new SupportingFile("openapi.mustache", "public", "openapi.json"));
supportingFiles.add(new SupportingFile("apiDocController.mustache", String.format("app/%s", apiPackage.replace(".", File.separator)), "ApiDocController.java"));
supportingFiles.add(new SupportingFile("apiDocController.mustache", String.format(Locale.ROOT, "app/%s", apiPackage.replace(".", File.separator)), "ApiDocController.java"));
}
//We remove the default api.mustache that is used

View File

@@ -22,7 +22,6 @@ import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
@@ -34,6 +33,7 @@ import org.openapitools.codegen.utils.URLPathUtils;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
@@ -175,7 +175,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
if (operations != null) {
List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation operation : ops) {
operation.httpMethod = operation.httpMethod.toLowerCase();
operation.httpMethod = operation.httpMethod.toLowerCase(Locale.ROOT);
if ("Void".equalsIgnoreCase(operation.returnType)) {
operation.returnType = null;
@@ -251,7 +251,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
serviceIdTemp = computeServiceId(pathname, entry);
entry.getValue().addExtension("x-serviceid", serviceIdTemp);
entry.getValue().addExtension("x-serviceid-varname",
serviceIdTemp.toUpperCase() + "_SERVICE_ID");
serviceIdTemp.toUpperCase(Locale.ROOT) + "_SERVICE_ID");
}
}
}
@@ -284,7 +284,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen {
pattern = Pattern.compile("(_)(.)");
matcher = pattern.matcher(word);
while (matcher.find()) {
word = matcher.replaceFirst(matcher.group(2).toUpperCase());
word = matcher.replaceFirst(matcher.group(2).toUpperCase(Locale.ROOT));
matcher = pattern.matcher(word);
}
return word;

View File

@@ -18,7 +18,12 @@
package org.openapitools.codegen.languages;
import com.google.common.base.Strings;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
@@ -27,18 +32,9 @@ import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.parameters.*;
import io.swagger.v3.oas.models.info.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,6 +44,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig {
@@ -601,7 +598,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "{String: " + getTypeDeclaration(inner) + "}";
}
return super.getTypeDeclaration(p);
@@ -863,9 +860,9 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
codegenModel.getVendorExtensions().put("x-itemType", getSchemaType(am.getItems()));
}
} else if (ModelUtils.isMapSchema(model)) {
if (model.getAdditionalProperties() != null) {
if (ModelUtils.getAdditionalProperties(model) != null) {
codegenModel.getVendorExtensions().put("x-isMap", true);
codegenModel.getVendorExtensions().put("x-itemType", getSchemaType((Schema) model.getAdditionalProperties()));
codegenModel.getVendorExtensions().put("x-itemType", getSchemaType(ModelUtils.getAdditionalProperties(model)));
} else {
String type = model.getType();
if (isPrimitiveType(type)){
@@ -1132,7 +1129,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
// for symbol, e.g. $, #
if (getSymbolName(value) != null) {
return (getSymbolName(value)).toUpperCase();
return (getSymbolName(value)).toUpperCase(Locale.ROOT);
}
return value;

View File

@@ -236,7 +236,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem
Schema inner = ap.getItems();
return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return "Object<!string, "+ getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isFileSchema(p)) {
return "Object";

View File

@@ -30,7 +30,7 @@ import java.text.SimpleDateFormat;
import java.util.*;
public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCodegen {
private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm");
private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm", Locale.ROOT);
public static final String NPM_NAME = "npmName";
public static final String NPM_VERSION = "npmVersion";
@@ -119,7 +119,7 @@ public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCo
@Override
protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) {
codegenModel.additionalPropertiesType = getTypeDeclaration((Schema) schema.getAdditionalProperties());
codegenModel.additionalPropertiesType = getTypeDeclaration(ModelUtils.getAdditionalProperties(schema));
addImport(codegenModel, codegenModel.additionalPropertiesType);
}
@@ -141,7 +141,7 @@ public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCo
inner = ((ArraySchema) p).getItems();
return this.getSchemaType(p) + "<" + this.getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) {
inner = (Schema) p.getAdditionalProperties();
inner = ModelUtils.getAdditionalProperties(p);
return "{ [key: string]: " + this.getTypeDeclaration(inner) + "; }";
} else if (ModelUtils.isFileSchema(p)) {
return "any";

View File

@@ -17,21 +17,32 @@
package org.openapitools.codegen.languages;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.responses.ApiResponse;
import java.io.File;
import java.util.*;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(LuaClientCodegen.class);
@@ -337,7 +348,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems();
return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getTypeDeclaration(inner);
}
@@ -403,7 +414,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
// find the datatype of the parameter
//final CodegenParameter cp = op.pathParams.get(pathParamIndex);
// TODO: Handle non-primitives…
//luaPath = luaPath + cp.dataType.toLowerCase();
//luaPath = luaPath + cp.dataType.toLowerCase(Locale.ROOT);
luaPath = luaPath + "/%s";
pathParamIndex++;
} else if (items[i].length() != 0) {
@@ -514,11 +525,11 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
// for symbol, e.g. $, #
if (getSymbolName(name) != null) {
return getSymbolName(name).toUpperCase();
return getSymbolName(name).toUpperCase(Locale.ROOT);
}
// string
String enumName = sanitizeName(underscore(name).toUpperCase());
String enumName = sanitizeName(underscore(name).toUpperCase(Locale.ROOT));
enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", "");
@@ -531,7 +542,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override
public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase();
String enumName = underscore(toModelName(property.name)).toUpperCase(Locale.ROOT);
// remove [] for array or map of enum
enumName = enumName.replace("[]", "");

View File

@@ -20,25 +20,37 @@ package org.openapitools.codegen.languages;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.*;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.info.*;
import io.swagger.v3.oas.models.PathItem.*;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.Paths;
import io.swagger.v3.oas.models.info.Info;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenResponse;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.net.URL;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(NodeJSServerCodegen.class);
@@ -232,7 +244,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
@SuppressWarnings("unchecked")
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation operation : operations) {
operation.httpMethod = operation.httpMethod.toLowerCase();
operation.httpMethod = operation.httpMethod.toLowerCase(Locale.ROOT);
List<CodegenParameter> params = operation.allParams;
if (params != null && params.size() == 0) {
@@ -368,7 +380,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
.replaceAll("^[-]*", "")
.replaceAll("[-]*$", "")
.replaceAll("[-]{2,}", "-")
.toLowerCase();
.toLowerCase(Locale.ROOT);
this.additionalProperties.put("projectName", projectName);
}
}

View File

@@ -17,6 +17,9 @@
package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
@@ -28,10 +31,6 @@ import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,11 +39,10 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ObjcClientCodegen.class);
@@ -341,8 +339,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
}
// TODO avoid using toLowerCase as typeMapping should be case-sensitive
if (typeMapping.containsKey(openAPIType.toLowerCase())) {
type = typeMapping.get(openAPIType.toLowerCase());
if (typeMapping.containsKey(openAPIType.toLowerCase(Locale.ROOT))) {
type = typeMapping.get(openAPIType.toLowerCase(Locale.ROOT));
if (languageSpecificPrimitives.contains(type) && !foundationClasses.contains(type)) {
return toModelNameWithoutReservedWordCheck(type);
}
@@ -377,7 +375,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
return getSchemaType(p) + "<" + innerTypeDeclaration + ">*";
}
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
String innerTypeDeclaration = getTypeDeclaration(inner);
@@ -417,7 +415,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override
public boolean isDataTypeBinary(String dataType) {
return dataType.toLowerCase().startsWith("nsdata");
return dataType.toLowerCase(Locale.ROOT).startsWith("nsdata");
}
@Override

View File

@@ -220,7 +220,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
Schema inner = ModelUtils.getAdditionalProperties(p);
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
}
return super.getTypeDeclaration(p);

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