Open vinodchitrali opened 5 years ago
👍 Thanks for opening this issue! 🏷 I have applied any labels matching special text in your issue.
The team will review the labels and make any necessary changes.
Wouldn't be better just to change those names to avoid duplication ?
@cvgaviao , thanks for look into the issue
Well, I can, but i have 1000+ such instances. Its tedious job.
Also, I get these schema from different sources. I combined in my custom schema by adding external ref($ref: http://
Any change in the external schema is nightmare.
I was debugging the issue, i figured out that the issue is https://github.com/swagger-api/swagger-parser
The schema duplication is limited to 2
.
@vinodchitrali, just note that openapi-generator is using its own branch/fork and not the one from swagger-api account. they are not always in sync. Seems to already exist some opened issues related to schema collision there. I've faced a similar problem of yours. And as I was without time I've used speccy to merge external models into one model.
Thanks @cvgaviao, Any possible fix available ?
I see some issue in the following code.
//We add a number at the end of the definition name
int i = 2;
for (String name : schemas.keySet()) {
if (name.equals(possiblyConflictingDefinitionName)) {
tryName = possiblyConflictingDefinitionName + "_" + i;
existingModel = schemas.get(tryName);
i++;
}
In above code, possiblyConflictingDefinitionName
remains same through out the loop. If possiblyConflictingDefinitionName = "model"
then the outcome of the loop is always tryName = "model_2"
.
I am hitting same issue.
So above code should be
//We add a number at the end of the definition name
int i = 2;
tryName = possiblyConflictingDefinitionName;
for (String name : schemas.keySet()) {
if (name.equals(tryName)) {
tryName = possiblyConflictingDefinitionName+ "_" + i;
existingModel = schemas.get(tryName);
i++;
}
Can some one help me to validate this code ? Also help to build org.openapitools.swagger.parser(2.0.11-OpenAPITools.org-1)
@jmini , I see that u have done recent pom update for 2.0.11. Can check above code and help to build swagger parser for OpenAPI tools
team@openapitools.org help me build swagger parser
@wing328 @jimschubert @cbornet @ackintosh , can some one help to build swagger parser for generator ?
@ackintosh , Thanks for adding test case.
Can you help me to build locally swagger-parser for Openapi generator
@vinodchitrali , do you know how Git and Maven works ? without that knowledge it will be a kind complicated for you...
Btw, you just need to clone the swagger-parser repository and do a mvn clean install
.
Then clone the openapi-generator repository and change its main pom properties to work with the version that you wanted to use:
<swagger-parser-groupid>io.swagger.parser.v3</swagger-parser-groupid>
<swagger-parser-version>2.0.12</swagger-parser-version>
In order to build openapi-generator with a snapshot version you need to use this:
mvn clean install -Denforcer.skip=true -Dmaven.test.skip=true
@vinodchitrali: can you please file an issue in the upstream project: https://github.com/swagger-api/swagger-parser/issues
If you produce a patch for Swagger-Parser (including the test case proposed by @ackintosh (if he agree) -- maybe you can adapt it), please file a PR to fix it.
@jmini , I have already filed issue. https://github.com/swagger-api/swagger-parser/issues/1089
@cvgaviao , i am able to build from upstream clone. only thing it is breaking lots of test cases, also getting some exception while building
@vinodchitrali, this is because the upstream team has not applied the PR provided by openapi-generator's team branch and vice-versa. What I did was to create my own local branch and I'm trying to keep the commits from upstream and openapi-generator in synch... at least I was able to workaround my problems for now.
@cvgaviao in the swagger-parser fork we maintain on branch 2.0-OpenAPITools
in https://github.com/OpenAPITools/swagger-parser/, we are almost in sync with the master
branch of https://github.com/swagger-api/swagger-parser
We have one addition to convert a Swagger-v2 Operation name to an OpenAPI-v3 vendor extensionx-codegen-request-body-name
.
@jmini , I know and you are doing a great job!.
But the specific fix for this issue related to $ref was only released on version 2.0.12.
I could see that the latest released version of your branch is based on version 2.0.11, though...
I have prepared PR https://github.com/OpenAPITools/openapi-generator/pull/2775 to update Swagger-Parser
I have updated Swagger-Parser.
Can you check the latest 4.0.0-SNAPSHOT
version of OpenAPI Generator?
@jmini is it up streamed ?
@vinodchitrali: sorry I do not get your question.
If you now use a recent 4.0.0-SNAPSHOT
version of "OpenAPI-Generator", this version now rely on org.openapitools.swagger.parser:swagger-parser:2.0.13-OpenAPITools.org-1
instead of org.openapitools.swagger.parser:swagger-parser:2.0.11-OpenAPITools.org-1
as it was previously the case.
This custom 2.0.13-OpenAPITools.org-1
release of Swagger-Parser is: io.swagger.parser.v3:swagger-parser:2.0.12
+ 3 additional fixes (see the release notes).
@jmini is it up streamed ?
swagger-api/swagger-parser#1089 seems still to be open, you need to provide a patch there. For the moment the PR in the issue there only references a test case and no fix.
Bug Report Checklist
Description
My schema definition are spread across multiple files and they are cross reference(using $ref). In these files there is one schema with same name. I have 5 such instances
When i run code generator, Only 2 models are produced. Rest are ignored. Some of the $ref are pointing to wrong model.
Here is example given below
openapi-generator version
4.0.0-beta
OpenAPI declaration file content or url
https://gist.github.com/vinodchitrali/c5cd3be1c8d6fb0d2fb6bcf6a530ad94
Command line used for generation
Steps to reproduce
1) Copy the Yaml files from https://gist.github.com/vinodchitrali/c5cd3be1c8d6fb0d2fb6bcf6a530ad94 2) java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate -i ./api/openapi.yaml -g python -o /tmp/python/ --api-package api --model-package model --additional-properties projectName=python 3) Check files generated in /tmp/python/openapi_client/model/
Related issues/PRs
Suggest a fix