From 8fe0a515cfc87107f11118d665abc91bba1c1e59 Mon Sep 17 00:00:00 2001 From: Maxim Malygin Date: Tue, 24 Mar 2020 18:27:55 +0300 Subject: [PATCH] Add support of useOneOfInterfaces for Spring and all JaxRS based generators Add support of useOneOfInterfaces for Spring and all JaxRS based generators --- .../codegen/languages/AbstractJavaCodegen.java | 7 +++++++ .../src/main/resources/JavaJaxRS/cxf-cdi/model.mustache | 3 +-- .../resources/JavaJaxRS/cxf-cdi/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/cxf-cdi/pojo.mustache | 2 +- .../JavaJaxRS/cxf-cdi/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaJaxRS/cxf-ext/model.mustache | 7 +------ .../resources/JavaJaxRS/cxf-ext/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/cxf-ext/pojo.mustache | 2 +- .../JavaJaxRS/cxf-ext/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaJaxRS/cxf/model.mustache | 7 +------ .../main/resources/JavaJaxRS/cxf/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/cxf/pojo.mustache | 2 +- .../resources/JavaJaxRS/cxf/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaJaxRS/model.mustache | 2 +- .../src/main/resources/JavaJaxRS/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/pojo.mustache | 2 +- .../main/resources/JavaJaxRS/resteasy/eap/model.mustache | 7 +------ .../JavaJaxRS/resteasy/eap/oneof_interface.mustache | 6 ++++++ .../main/resources/JavaJaxRS/resteasy/eap/pojo.mustache | 2 +- .../JavaJaxRS/resteasy/eap/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaJaxRS/resteasy/model.mustache | 7 +------ .../resources/JavaJaxRS/resteasy/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/resteasy/pojo.mustache | 2 +- .../JavaJaxRS/resteasy/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaJaxRS/spec/model.mustache | 5 +---- .../main/resources/JavaJaxRS/spec/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaJaxRS/spec/pojo.mustache | 2 +- .../resources/JavaJaxRS/spec/typeInfoAnnotation.mustache | 2 +- .../main/resources/JavaJaxRS/typeInfoAnnotation.mustache | 2 +- .../src/main/resources/JavaSpring/model.mustache | 7 +------ .../src/main/resources/JavaSpring/oneof_interface.mustache | 6 ++++++ .../src/main/resources/JavaSpring/pojo.mustache | 2 +- .../openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java | 4 ++-- 33 files changed, 80 insertions(+), 54 deletions(-) create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/oneof_interface.mustache create mode 100755 modules/openapi-generator/src/main/resources/JavaJaxRS/spec/oneof_interface.mustache create mode 100644 modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 0afb3603c57d..ad8ca71fe737 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -59,6 +59,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code public static final String BOOLEAN_GETTER_PREFIX = "booleanGetterPrefix"; public static final String ADDITIONAL_MODEL_TYPE_ANNOTATIONS = "additionalModelTypeAnnotations"; public static final String DISCRIMINATOR_CASE_SENSITIVE = "discriminatorCaseSensitive"; + public static final String USE_ONEOF_INTERFACES = "useOneOfInterfaces"; protected String dateLibrary = "threetenbp"; protected boolean supportAsync = false; @@ -195,6 +196,7 @@ public AbstractJavaCodegen() { cliOptions.add(CliOption.newBoolean(DISCRIMINATOR_CASE_SENSITIVE, "Whether the discriminator value lookup should be case-sensitive or not. This option only works for Java API client", discriminatorCaseSensitive)); cliOptions.add(CliOption.newBoolean(CodegenConstants.HIDE_GENERATION_TIMESTAMP, CodegenConstants.HIDE_GENERATION_TIMESTAMP_DESC, this.isHideGenerationTimestamp())); cliOptions.add(CliOption.newBoolean(WITH_XML, "whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)")); + cliOptions.add(CliOption.newBoolean(USE_ONEOF_INTERFACES, "Generate interfaces for OneOf types", useOneOfInterfaces)); CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use").defaultValue(this.getDateLibrary()); Map dateOptions = new HashMap<>(); @@ -538,6 +540,11 @@ public void processOpts() { } else if (dateLibrary.equals("legacy")) { additionalProperties.put("legacyDates", "true"); } + + if(additionalProperties.containsKey(USE_ONEOF_INTERFACES)) { + useOneOfInterfaces = Boolean.valueOf(additionalProperties.get(USE_ONEOF_INTERFACES).toString()); + addOneOfInterfaceImports = useOneOfInterfaces; + } } @Override diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/model.mustache index df7d1df8d210..24a9fa4885cb 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/model.mustache @@ -13,7 +13,6 @@ import javax.validation.constraints.*; /** * {{description}} **/{{/description}} -{{#isEnum}}{{>enumOuterClass}}{{/isEnum}} -{{^isEnum}}{{>pojo}}{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/pojo.mustache index 5e6eff4dafa0..de6691aee1da 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/pojo.mustache @@ -4,7 +4,7 @@ import java.util.Objects; import javax.xml.bind.annotation.*; {{#description}}@ApiModel(description = "{{{description}}}"){{/description}}{{>additionalModelTypeAnnotations}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#vars}}{{#isEnum}}{{^isContainer}} {{>enumClass}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/model.mustache index ee1912f51ff0..713f58e6f79f 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/model.mustache @@ -12,11 +12,6 @@ import javax.validation.Valid; {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/pojo.mustache index 5f267073c286..e9fe03ffac40 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/pojo.mustache @@ -23,7 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @ApiModel(description="{{{description}}}") {{/description}}{{>additionalModelTypeAnnotations}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}}{{#serializableModel}} implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#vars}}{{#isEnum}}{{^isContainer}} {{>enumClass}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}} {{>enumClass}}{{/mostInnerItems}}{{/isContainer}}{{/isEnum}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-ext/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/model.mustache index ee1912f51ff0..713f58e6f79f 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/model.mustache @@ -12,11 +12,6 @@ import javax.validation.Valid; {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pojo.mustache index f47cb49677c7..14fd04e6c7d7 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pojo.mustache @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; **/ @ApiModel(description="{{{description}}}") {{/description}} -{{>additionalModelTypeAnnotations}}{{>xmlPojoAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}}{{#serializableModel}} implements Serializable{{/serializableModel}} { +{{>additionalModelTypeAnnotations}}{{>xmlPojoAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#vars}}{{#isEnum}}{{^isContainer}} {{>enumClass}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}} {{>enumClass}}{{/mostInnerItems}}{{/isContainer}}{{/isEnum}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/model.mustache index 9e3aebc0a780..124198679841 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/model.mustache @@ -23,6 +23,6 @@ import javax.validation.Valid; {{#models}} {{#model}} -{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>pojo}}{{/isEnum}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache index 8b54fd32d57b..e561c0227eef 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache @@ -10,7 +10,7 @@ }) {{/jackson}} {{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#vars}} {{#isEnum}} {{^isContainer}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/model.mustache index 2ff294581f55..13ac45013d3c 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/model.mustache @@ -12,11 +12,6 @@ import javax.validation.constraints.*; {{/useBeanValidation}} {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/pojo.mustache index f151da5cdb4e..e0f2336f204b 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/pojo.mustache @@ -1,7 +1,7 @@ import io.swagger.annotations.*; {{#description}}@ApiModel(description="{{{description}}}"){{/description}}{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#serializableModel}} private static final long serialVersionUID = 1L; {{/serializableModel}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/eap/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/model.mustache index 2ff294581f55..13ac45013d3c 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/model.mustache @@ -12,11 +12,6 @@ import javax.validation.constraints.*; {{/useBeanValidation}} {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/pojo.mustache index b18e2582d86d..d3af2b1759e8 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/pojo.mustache @@ -1,7 +1,7 @@ import io.swagger.annotations.*; {{#description}}@ApiModel(description="{{{description}}}"){{/description}}{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#serializableModel}} private static final long serialVersionUID = 1L; {{/serializableModel}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/model.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/model.mustache index 7fad7858e999..713f58e6f79f 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/model.mustache @@ -12,9 +12,6 @@ import javax.validation.Valid; {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}}{{>pojo}}{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/oneof_interface.mustache new file mode 100755 index 000000000000..a5d1724a27f6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache index 1c48e051d7d2..6f04685bb21c 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonValue; * {{description}} **/{{/description}} {{#useSwaggerAnnotations}}{{#description}}{{>additionalModelTypeAnnotations}}@ApiModel(description = "{{{description}}}"){{/description}}{{/useSwaggerAnnotations}} -{{>generatedAnnotation}}public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +{{>generatedAnnotation}}public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#vars}}{{#isEnum}}{{^isContainer}} {{>enumClass}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}} diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/typeInfoAnnotation.mustache index 5b7bb5cd3294..41b65ea034f0 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache index 793e10bdc6cf..6ae5b8d7dcf1 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/typeInfoAnnotation.mustache @@ -1,5 +1,5 @@ {{#jackson}} -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "{{{discriminator.propertyBaseName}}}", visible = true) @JsonSubTypes({ {{#discriminator.mappedModels}} @JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"), diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/model.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/model.mustache index fbe3a9f1445d..4f703e2d12d9 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/model.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/model.mustache @@ -31,11 +31,6 @@ import org.springframework.hateoas.RepresentationModel; {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache new file mode 100644 index 000000000000..02deb483d5fd --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache @@ -0,0 +1,6 @@ +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}}{{>xmlAnnotation}} +public interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { + {{#discriminator}} + public {{propertyType}} {{propertyGetter}}(); + {{/discriminator}} +} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache index 0601e70f6902..c8c90e35a807 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache @@ -3,7 +3,7 @@ */{{#description}} @ApiModel(description = "{{{description}}}"){{/description}} {{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}{{>additionalModelTypeAnnotations}} -public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}}{{^parent}}{{#hateoas}}extends RepresentationModel<{{classname}}> {{/hateoas}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{^parent}}{{#hateoas}} extends RepresentationModel<{{classname}}>{{/hateoas}}{{/parent}}{{#vendorExtensions.implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.implements}}{{^vendorExtensions.implements}}{{#serializableModel}} implements Serializable{{/serializableModel}}{{/vendorExtensions.implements}} { {{#serializableModel}} private static final long serialVersionUID = 1L; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java index 7345f302040f..3c9377f83fcc 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java @@ -42,7 +42,7 @@ public void generateJsonAnnotationForPolymorphism() throws IOException { DefaultGenerator generator = new DefaultGenerator(); generator.opts(input).generate(); - String jsonTypeInfo = "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \"className\", visible = true)"; + String jsonTypeInfo = "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = \"className\", visible = true)"; String jsonSubType = "@JsonSubTypes({\n" + " @JsonSubTypes.Type(value = Dog.class, name = \"Dog\"),\n" + " @JsonSubTypes.Type(value = Cat.class, name = \"Cat\"),\n" + @@ -73,7 +73,7 @@ public void doNotGenerateJsonAnnotationForPolymorphismIfJsonExclude() throws IOE generator.opts(input).generate(); - String jsonTypeInfo = "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \"className\", visible = true)"; + String jsonTypeInfo = "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = \"className\", visible = true)"; String jsonSubType = "@JsonSubTypes({\n" + " @JsonSubTypes.Type(value = Dog.class, name = \"Dog\"),\n" + " @JsonSubTypes.Type(value = Cat.class, name = \"Cat\"),\n" +