Open roostapour opened 4 years ago
Please try the option generateAliasAsModel
, which will generate array, map as models
Thanks for your answer @wing328 . I tried both
<configuration>
<generateAliasAsModel>true</generateAliasAsModel>
</configuration>
and
<configuration>
<configOptions>
<generateAliasAsModel>true</generateAliasAsModel>
</configOptions>
</configuration>
But none of them worked. How should I set the generateAliasAsModel
option?
Doc: https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator-maven-plugin
I think the first one should work ...
@wing328 I realized if I define a Map of string to string in the yaml file like the following then generateAliasAsModel
works.
Messages:
type: object
additionalProperties:
type: string
But if the value is an object or ref (which I need) like the the following then generateAliasAsModel
does not work and doesn't generate Messages
Messages:
type: object
additionalProperties:
type: object
or
Messages:
type: object
additionalProperties:
$ref: '#/components/schemas/Message'
Just to add, I do have the same issue on javascript side. Having the following version in my package.json
"devDependencies": {
"@openapitools/openapi-generator-cli": "^1.0.13-4.3.1"
}
and running with --generate-alias-as-model
flag, with the same yaml file behaves exactly the same as Java side. For Map of string to string it works but for Map of string to object/ref it does not generate the model.
It is slightly different issue in JAX-RS. I am working on v4.3.1 and OpenAPI v2
It generates Message.java but the pojo where messages are included does not have type information. This generates a compile error.
private Message messages = new HashMap<>();
I traced it to below code on pojo.mustache
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
I am not sure how HashMap<> is getting substituted here. Please let me know if you want me to create a separate issue for this
Can someone please answer this?
@roostapour based on what you provided, looks like it's a bug. A good starting point is https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java and search for isGenerateAliasAsModel
Hello, We have a similar issue trying to generate a Map from our YAML file (v3). Is there a document/example on how to generate maps/dictionaries properly?
Confirmed that as of 4.3.1 classes are generated, but:
CollectionType<Object>
instead of whatever they're a collection of.Object
.additionalProperties
.Any update on the issue? Is this fixed? Facing same issue
It is slightly different issue in JAX-RS. I am working on v4.3.1 and OpenAPI v2
It generates Message.java but the pojo where messages are included does not have type information. This generates a compile error.
private Message messages = new HashMap<>();
I traced it to below code on pojo.mustache
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
I am not sure how HashMap<> is getting substituted here. Please let me know if you want me to create a separate issue for this
Hi, Did you solve this issue how to remove that hashMap how it is substituting.i am also stuck at this problem and I am using open api 5.1.0 version
Any updates? I tried it with openapi-generator-maven-plugin 5.4.0. and get an compile time error. When adding an item to the hashmap it tries to initialize the Map. Here's a snippet of the generated code:
Any updates? I tried it with openapi-generator-maven-plugin 5.4.0. and get an compile time error. When adding an item to the hashmap it tries to initialize the Map. Here's a snippet of the generated code:
I've got the same problem...
@wing328 I am encountering the same issue. Do you recommend any workaround/solution here? I see we have something like this in .NET - any similar thing for Java?
@MarcelHoell @arvindkrishnakumar-okta For each of you, does the non-working Java class that OpenAPI Generator produces contain extends HashMap<K, V>
in the class definition? K
and V
can by any valid types, of course.
I've got the same problem. Used Gradle Plugin version 6.2.1. Any comments. Thank you.
Update to Gradle Plugin version 6.4.0 resolved problem
Still exists with maven plugin >6.3.0
Tested with 6.4, 6.5 and 6.6
api-spec.yaml:
description:
type: object
nullable: true
description: description of the object
additionalProperties:
type: string
example:
de: Wurst
en: sausage
generated java code (tested with 6.4, 6.5, 6.6):
/**
* description of the object
**/
@JsonbProperty("description")
private Map<String, String> description = ;
generated code with 6.3.0:
/**
* description of the object
**/
@JsonbProperty("description")
private Map<String, String> description = null;
pom.xml (working config):
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>6.3.0</version>
<executions>
<execution>
<id>generate-api</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatorName>java</generatorName>
<generateAliasAsModel>true</generateAliasAsModel> <-- has no effect though, can be omitted
</configuration>
</execution>
</executions>
</plugin>
generated java code (tested with 6.4, 6.5, 6.6):
can you please test with the latest master? I did a test but couldn't repeat the issue. The output compiles fine.
HashMap generation (https://swagger.io/docs/specification/data-models/dictionaries/) in java works in 5.0.0-beta2 version, but is broken in 6.6.0 version.
If my understanding is correct, currently it's not possible to have additionalProperties of type object to work in the current java client generator. I do not see any intention to move this forward in the past years — is it a rarely required functionality? Because we sure need it.
My workaround: string-replace
<plugin>
<groupId>io.github.floverfelt</groupId>
<artifactId>find-and-replace-maven-plugin</artifactId>
<executions>
<execution>
<id>exec-1</id>
<phase>process-resources</phase>
<goals>
<goal>find-and-replace</goal>
</goals>
<configuration>
<!-- Possible replacementType values: file-contents, filenames, directory-names. To run for multiple types, pass the values as a CSV list. -->
<replacementType>file-contents</replacementType>
<baseDir>target/generated-sources/openapi</baseDir>
<findRegex>private DeviceAcl acl = new HashMap<>\(\);</findRegex>
<replaceValue>private DeviceAcl acl = new DeviceAcl();</replaceValue>
<recursive>true</recursive>
<fileMask>.java</fileMask>
</configuration>
</execution>
</executions>
</plugin>
For each line that needs replacement, add an execution
Still having this issue in 2024. Sad to see it not picked up at all.
I tried with 7.0.0 and 7.3.0 versions and bug seems solved (with 6.6.0 I had the problem).
Description
I am using "additionalProperties" in my yaml file as below.
But when running
mvn clean package
, no class is being created for Messages. I was expecting to see a class like :in
org.openapitools.client.model.Messages
the same as other classes generated based on the yaml file. I triedadditionalProperties: true
andadditionalProperties: {}
but none of them worked. It seems like a bugmy pom.xml for openapi-generator and swagger versions
Command line used for generation
mvn clean package