-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Correct allOf with only one child schema (no discriminator) #6901
Conversation
How to do enable inheritance without discriminator? |
Don't think you can do that according to the spec
|
// TOOD to be removed in 6.x release | ||
LOGGER.warn("[deprecated] inheritance without use of 'discriminator.propertyName' has been deprecated" + | ||
" in the 5.x release. Composed schema name: {}. Title: {}", | ||
composedSchema.getName(), composedSchema.getTitle()); | ||
} | ||
} else { | ||
// not a ref, doing nothing, except counting the number of times the 'null' type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This block is no longer needed at all right? It only increments an unused variable nullSchemaChildrenCount
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good
@@ -1239,8 +1237,10 @@ public static String getParentName(ComposedSchema composedSchema, Map<String, Sc | |||
return parentName; | |||
} else { | |||
// not a parent since discriminator.propertyName is not set | |||
hasAmbiguousParents = true; | |||
refedWithoutDiscriminator.add(parentName); | |||
// TOOD to be removed in 6.x release |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:-) Misspelling: TOOD
--> TODO
This case indicates composition, not inheritance right? Especially in the edge case of an allOf
reference to a model with no properties
nor additionalProperties
So why is it being deprecated? This seems like a valid use case for composition.
The log warning message seems to indicate that I will not be able to do composition in this way. Is that what is intended?
@jeff9finger I've pushed some update to minimize the change and only fix the incorrect behavior. Please have another look when you've time. |
Hi @wing328,
base_schemas.yaml baseSchema:
title: BaseSchema
type: object
description: Base schema description
properties:
property1:
type: string
property2:
type: string extension_schemas.yaml: extensionSchema
title: ExtensionSchema
type: object
description: Extension schema description
allOf:
- $ref: 'base_schemas.yaml#/baseSchema'
example:
property1: 'value1'
property2: 'value2' With this definition (we have only one child schema here) we are still getting inheritance instead of composition and generation log contains a lot of WARN (previously)/INFO (with this update) messages. So, behavior is not fixed for us... best regards, |
I've investigated this a bit firther and it seems that some generators are using own logic for allOf cases. In our case we are using typescript-axios and plantuml generators and both are generating it as inheritance (for example, typescript-axios generator is using special allOf template). But what worries me is that we are getting many many "inheritance without use of 'discriminator.propertyName' has been deprecated in the 5.x release" messages in generator log. Do we need to produce this spam now? Otherwise looks good for me. best regards, |
Hi @wing328 , what are the plans for this change? Can we get it in master sometime soon? ty P.S. It would be great to get rid of "inheritance without use of 'discriminator.propertyName' has been deprecated in the 5.x release" spamming message as well before merging this PR. |
@typhoon2k I don't think we can add a breaking change and deprecation without informing the user. @wing328 can you wrap the above message in
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@jimschubert , I just tried to play locally with once logger. I've made the following change to logging code: once(LOGGER).info("[deprecated] inheritance without use of 'discriminator.propertyName' has been deprecated" +
" in the 5.x release. Composed schema name: " + composedSchema.getName() + ". Title: " + composedSchema.getTitle()); With this change I still get spam in logs. Do I need to configure once logger somehow additionally? Update: So it would be nice to include message without composed schema name and title to reduce spam in logs. |
Excellent suggestion. I'll go ahead and merge this, then change the info log to be generic and add a debug log with the name and title. |
@wing328 I'd merged this, but had to revert via #7323 as it caused all CI checks to fail in master. If you have a chance, could you merge master and take a look? It failed on |
* master: (89 commits) add structPrefix support to go-experimental (#7327) Add a link to SmartHR Tech Blog (#7324) Revert "Correct allOf with only one child schema (no discriminator)" (#7323) Correct allOf with only one child schema (no discriminator) (#6901) [Go]: Interface definitions for api functions (#5914) Update bug_report.md (#7320) update samples [Java][Client] Use java8 OffsetDateTime for clients (#7190) [java] Intro openApiNullable property to enable/disable OpenAPI Jackson Nullable library (#6154) [Spring Boot] update dependencies, mark java8 option as deprecated (#7306) Remove dot in golang type (#7307) [doc] Document usage of post-process file feature (#7315) fix http bear auth documentation for go clinets (#7312) [Extensions][Go][Java] Test x-auth-id-alias (#6642) [php-slim4] Move config to a separate file (#6971) [C][Client][Clang Static Analyzer] Remove the useless free operation for (#7309) Fix typescript-node generation when only models are generated (#7127) update spring config to use java8 (#7308) [C][Client][Clang Static Analyzer] Fix uninitialized argument value (#7305) [Java] remove deprecated jackson classes (#7304) ...
* master: (984 commits) add structPrefix support to go-experimental (OpenAPITools#7327) Add a link to SmartHR Tech Blog (OpenAPITools#7324) Revert "Correct allOf with only one child schema (no discriminator)" (OpenAPITools#7323) Correct allOf with only one child schema (no discriminator) (OpenAPITools#6901) [Go]: Interface definitions for api functions (OpenAPITools#5914) Update bug_report.md (OpenAPITools#7320) update samples [Java][Client] Use java8 OffsetDateTime for clients (OpenAPITools#7190) [java] Intro openApiNullable property to enable/disable OpenAPI Jackson Nullable library (OpenAPITools#6154) [Spring Boot] update dependencies, mark java8 option as deprecated (OpenAPITools#7306) Remove dot in golang type (OpenAPITools#7307) [doc] Document usage of post-process file feature (OpenAPITools#7315) fix http bear auth documentation for go clinets (OpenAPITools#7312) [Extensions][Go][Java] Test x-auth-id-alias (OpenAPITools#6642) [php-slim4] Move config to a separate file (OpenAPITools#6971) [C][Client][Clang Static Analyzer] Remove the useless free operation for (OpenAPITools#7309) Fix typescript-node generation when only models are generated (OpenAPITools#7127) update spring config to use java8 (OpenAPITools#7308) [C][Client][Clang Static Analyzer] Fix uninitialized argument value (OpenAPITools#7305) [Java] remove deprecated jackson classes (OpenAPITools#7304) ...
hi @wing328 , @jimschubert , is there any chance this update will get into master sometime soon? |
Correct allOf with only one child schema (no discriminator) by removing the old (incorrect) behavior.
Now it works correctly as model composition.
cc @OpenAPITools/generator-core-team
PR checklist
./bin/generate-samples.sh
to update all Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master. These must match the expectations made by your contribution. You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example./bin/generate-samples.sh bin/config/java*
. For Windows users, please run the script in Git BASH.master