diff --git a/bin/kotlin-client-all.sh b/bin/kotlin-client-all.sh
index 9fa9ee7de08..8663752ab52 100755
--- a/bin/kotlin-client-all.sh
+++ b/bin/kotlin-client-all.sh
@@ -10,4 +10,4 @@
./bin/kotlin-client-threetenbp.sh
./bin/kotlin-client-nullable.sh
./bin/kotlin-client-retrofit2.sh
-./bin/kotlin-client-json-request-date.sh
+./bin/kotlin-client-json-request-string.sh
diff --git a/bin/kotlin-client-json-request-date.sh b/bin/kotlin-client-json-request-string.sh
similarity index 86%
rename from bin/kotlin-client-json-request-date.sh
rename to bin/kotlin-client-json-request-string.sh
index 84ee2b74852..2e32eed675a 100755
--- a/bin/kotlin-client-json-request-date.sh
+++ b/bin/kotlin-client-json-request-string.sh
@@ -27,6 +27,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
-ags="generate -t modules/openapi-generator/src/main/resources/kotlin-client -i modules/openapi-generator/src/test/resources/2_0/petstore-with-date-field.yaml -g kotlin --artifact-id kotlin-petstore-json-request-date --additional-properties requestDateConverter=toJson -o samples/client/petstore/kotlin-json-request-date $@"
+ags="generate -t modules/openapi-generator/src/main/resources/kotlin-client -i modules/openapi-generator/src/test/resources/2_0/petstore-with-date-field.yaml -g kotlin --artifact-id kotlin-petstore-json-request-string --additional-properties requestDateConverter=toString -o samples/client/petstore/kotlin-json-request-string $@"
java ${JAVA_OPTS} -jar ${executable} ${ags}
diff --git a/bin/windows/kotlin-client-all.bat b/bin/windows/kotlin-client-all.bat
index 3833a95c7d1..d4dd27a9f64 100644
--- a/bin/windows/kotlin-client-all.bat
+++ b/bin/windows/kotlin-client-all.bat
@@ -7,5 +7,5 @@ call powershell -command "& '%~dp0\kotlin-client-petstore.bat'"
call powershell -command "& '%~dp0\kotlin-client-string.bat'"
call powershell -command "& '%~dp0\kotlin-client-threetenbp.bat'"
call powershell -command "& '%~dp0\kotlin-client-nullable.bat'"
-call powershell -command "& '%~dp0\kotlin-client-json-request-date.bat'"
+call powershell -command "& '%~dp0\kotlin-client-json-request-string.bat'"
call powershell -command "& '%~dp0\kotlin-client-retrofit2.bat'"
\ No newline at end of file
diff --git a/bin/windows/kotlin-client-json-request-date.bat b/bin/windows/kotlin-client-json-request-date.bat
deleted file mode 100644
index 47fd16af7a0..00000000000
--- a/bin/windows/kotlin-client-json-request-date.bat
+++ /dev/null
@@ -1,10 +0,0 @@
-set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
-
-If Not Exist %executable% (
- mvn clean package
-)
-
-REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
-set ags=generate --artifact-id "kotlin-petstore-json-request-date" -i modules\openapi-generator\src\test\resources\2_0\petstore-with-date-field.yaml -g kotlin --additional-properties requestDateConverter=toJson -o samples\client\petstore\kotlin-json-request-date
-
-java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/bin/windows/kotlin-client-json-request-string.bat b/bin/windows/kotlin-client-json-request-string.bat
new file mode 100644
index 00000000000..1b257af0202
--- /dev/null
+++ b/bin/windows/kotlin-client-json-request-string.bat
@@ -0,0 +1,10 @@
+set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
+
+If Not Exist %executable% (
+ mvn clean package
+)
+
+REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
+set ags=generate --artifact-id "kotlin-petstore-json-request-string" -i modules\openapi-generator\src\test\resources\2_0\petstore-with-date-field.yaml -g kotlin --additional-properties requestDateConverter=toString -o samples\client\petstore\kotlin-json-request-string
+
+java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md
index 2ef38896fd3..cdd75b89277 100644
--- a/docs/generators/kotlin.md
+++ b/docs/generators/kotlin.md
@@ -16,7 +16,7 @@ sidebar_label: kotlin
|modelMutable|Create mutable models| |false|
|packageName|Generated artifact package name.| |org.openapitools.client|
|parcelizeModels|toggle "@Parcelize" for generated models| |null|
-|requestDateConverter|JVM-Option. Defines in how to handle date-time objects that are used for a request (as query or parameter)|
- **toJson**
- Date formater option using a json converter.
- **toString**
- [DEFAULT] Use the 'toString'-method of the date-time object to retrieve the related string representation.
|toString|
+|requestDateConverter|JVM-Option. Defines in how to handle date-time objects that are used for a request (as query or parameter)|- **toJson**
- [DEFAULT] Date formater option using a json converter.
- **toString**
- Use the 'toString'-method of the date-time object to retrieve the related string representation.
|toJson|
|serializableModel|boolean - toggle "implements Serializable" for generated models| |null|
|serializationLibrary|What serialization library to use: 'moshi' (default), or 'gson'| |moshi|
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null|
diff --git a/modules/openapi-generator-cli/pom.xml b/modules/openapi-generator-cli/pom.xml
index 4ff3511f8d0..e1bd36543a9 100644
--- a/modules/openapi-generator-cli/pom.xml
+++ b/modules/openapi-generator-cli/pom.xml
@@ -4,7 +4,7 @@
org.openapitools
openapi-generator-project
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator-core/pom.xml b/modules/openapi-generator-core/pom.xml
index 54e87c5e0e3..b25059a21a9 100644
--- a/modules/openapi-generator-core/pom.xml
+++ b/modules/openapi-generator-core/pom.xml
@@ -6,7 +6,7 @@
openapi-generator-project
org.openapitools
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator-gradle-plugin/gradle.properties b/modules/openapi-generator-gradle-plugin/gradle.properties
index 122afc6aa9c..fecc63a8bb5 100644
--- a/modules/openapi-generator-gradle-plugin/gradle.properties
+++ b/modules/openapi-generator-gradle-plugin/gradle.properties
@@ -1,5 +1,5 @@
# RELEASE_VERSION
-openApiGeneratorVersion=4.2.3
+openApiGeneratorVersion=4.3.0-SNAPSHOT
# /RELEASE_VERSION
# BEGIN placeholders
diff --git a/modules/openapi-generator-gradle-plugin/pom.xml b/modules/openapi-generator-gradle-plugin/pom.xml
index 7fd73323e15..6346e2c05d2 100644
--- a/modules/openapi-generator-gradle-plugin/pom.xml
+++ b/modules/openapi-generator-gradle-plugin/pom.xml
@@ -4,7 +4,7 @@
org.openapitools
openapi-generator-project
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator-maven-plugin/pom.xml b/modules/openapi-generator-maven-plugin/pom.xml
index a2d8c2e5140..47b84250665 100644
--- a/modules/openapi-generator-maven-plugin/pom.xml
+++ b/modules/openapi-generator-maven-plugin/pom.xml
@@ -5,7 +5,7 @@
org.openapitools
openapi-generator-project
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator-online/pom.xml b/modules/openapi-generator-online/pom.xml
index 3db077364e4..971771ab474 100644
--- a/modules/openapi-generator-online/pom.xml
+++ b/modules/openapi-generator-online/pom.xml
@@ -4,7 +4,7 @@
org.openapitools
openapi-generator-project
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator/pom.xml b/modules/openapi-generator/pom.xml
index d46aa9a7ec5..7aa03139553 100644
--- a/modules/openapi-generator/pom.xml
+++ b/modules/openapi-generator/pom.xml
@@ -4,7 +4,7 @@
org.openapitools
openapi-generator-project
- 4.2.3
+ 4.3.0-SNAPSHOT
../..
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java
index 9b548e8b549..73d85052e70 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java
@@ -10,6 +10,8 @@ import java.util.Set;
public class CodegenDiscriminator {
private String propertyName;
private String propertyBaseName;
+ private String propertyGetter;
+ private String propertyType;
private Map mapping;
private Set mappedModels = new LinkedHashSet<>();
@@ -21,6 +23,14 @@ public class CodegenDiscriminator {
this.propertyName = propertyName;
}
+ public String getPropertyGetter() {
+ return propertyGetter;
+ }
+
+ public void setPropertyGetter(String propertyGetter) {
+ this.propertyGetter = propertyGetter;
+ }
+
public String getPropertyBaseName() {
return propertyBaseName;
}
@@ -29,6 +39,14 @@ public class CodegenDiscriminator {
this.propertyBaseName = propertyBaseName;
}
+ public String getPropertyType() {
+ return propertyType;
+ }
+
+ public void setPropertyType(String propertyType) {
+ this.propertyType = propertyType;
+ }
+
public Map getMapping() {
return mapping;
}
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
index ac72e581154..4ebed00b41b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
@@ -1663,6 +1663,10 @@ public class DefaultCodegen implements CodegenConfig {
*/
@SuppressWarnings("static-method")
public String toOneOfName(List names, ComposedSchema composedSchema) {
+ Map exts = composedSchema.getExtensions();
+ if (exts != null && exts.containsKey("x-oneOf-name")) {
+ return (String) exts.get("x-oneOf-name");
+ }
return "oneOf<" + String.join(",", names) + ">";
}
@@ -2126,13 +2130,16 @@ public class DefaultCodegen implements CodegenConfig {
return m;
}
- private CodegenDiscriminator createDiscriminator(String schemaName, Schema schema) {
+ protected CodegenDiscriminator createDiscriminator(String schemaName, Schema schema) {
if (schema.getDiscriminator() == null) {
return null;
}
CodegenDiscriminator discriminator = new CodegenDiscriminator();
discriminator.setPropertyName(toVarName(schema.getDiscriminator().getPropertyName()));
discriminator.setPropertyBaseName(schema.getDiscriminator().getPropertyName());
+ discriminator.setPropertyGetter(toGetter(discriminator.getPropertyName()));
+ // FIXME: for now, we assume that the discriminator property is String
+ discriminator.setPropertyType(typeMapping.get("string"));
discriminator.setMapping(schema.getDiscriminator().getMapping());
if (schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) {
for (Entry e : schema.getDiscriminator().getMapping().entrySet()) {
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java
index 4fbba05d820..571717ceb27 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java
@@ -25,12 +25,19 @@ import org.openapitools.codegen.languages.features.GzipFeatures;
import org.openapitools.codegen.languages.features.PerformBeanValidationFeatures;
import org.openapitools.codegen.meta.features.DocumentationFeature;
import org.openapitools.codegen.templating.mustache.CaseFormatLambda;
+import org.openapitools.codegen.utils.ModelUtils;
import org.openapitools.codegen.utils.ProcessUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.swagger.v3.oas.models.Operation;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.PathItem;
+import io.swagger.v3.oas.models.media.ArraySchema;
+import io.swagger.v3.oas.models.media.ComposedSchema;
import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.parameters.RequestBody;
+import io.swagger.v3.oas.models.responses.ApiResponse;
import java.io.File;
import java.util.*;
@@ -103,6 +110,9 @@ public class JavaClientCodegen extends AbstractJavaCodegen
protected String authFolder;
protected String serializationLibrary = null;
+ protected boolean useOneOfInterfaces = false;
+ protected List addOneOfInterfaces = new ArrayList();
+
public JavaClientCodegen() {
super();
@@ -488,6 +498,10 @@ public class JavaClientCodegen extends AbstractJavaCodegen
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
}
+ if (additionalProperties.containsKey(SERIALIZATION_LIBRARY_JACKSON)) {
+ useOneOfInterfaces = true;
+ }
+
}
private boolean usesAnyRetrofitLibrary() {
@@ -712,9 +726,10 @@ public class JavaClientCodegen extends AbstractJavaCodegen
@Override
public Map postProcessModels(Map objs) {
objs = super.postProcessModels(objs);
+ List