Skip to content

fix: [BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't generate lists of annotations correctly#23750

Open
johnyherangi wants to merge 2 commits intoOpenAPITools:masterfrom
johnyherangi:java-x-extra-class-annotation-lists
Open

fix: [BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't generate lists of annotations correctly#23750
johnyherangi wants to merge 2 commits intoOpenAPITools:masterfrom
johnyherangi:java-x-extra-class-annotation-lists

Conversation

@johnyherangi
Copy link
Copy Markdown

@johnyherangi johnyherangi commented May 10, 2026

Fixes #23749

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    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/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.x.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR solves a reported issue, reference it using GitHub's linking syntax (e.g., having "fixes #123" present in the PR description)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10) @martin-mfg (2023/08)


Summary by cubic

Fixes Java/Spring codegen so x-class-extra-annotation supports single strings and YAML lists and emits all annotations. Also defaults this extension to an empty list when missing, and applies to allOf models and oneOf interfaces.

  • Bug Fixes
    • Normalized x-class-extra-annotation to List<String> in AbstractJavaCodegen using the existing single/multi-value pattern; default to empty list when absent.
    • Updated POJO and oneof_interface templates to iterate and emit each annotation using {{{.}}}.
    • Added RESTClient and Spring Boot tests for single and multiple annotations on allOf models (Cat, Dog), plus the allOf-with-annotations.yaml schema.

Written for commit 00388d6. Summary will update on new commits.

@johnyherangi johnyherangi marked this pull request as ready for review May 10, 2026 03:48
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 31 files

@johnyherangi johnyherangi changed the title fix: [BUG][JAVA][SPRING] vendorExtension.x-class-extra-annotation doesn't support lists fix: [BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't support lists May 10, 2026
@johnyherangi johnyherangi changed the title fix: [BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't support lists fix: [BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't generate lists of annotations correctly May 10, 2026
}

@Test
public void testAllOfClassWithMultipleAnnotations() throws IOException {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merge the 2 tests

}

@Test
public void testAllOfClassWithSingleAnnotation() {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the supportedLibraries @DataProvider to test all libraries

}

@Test
public void testAllOfClassWithMultipleAnnotations() {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merge the 2 tests

}
}

// make sure the x-class-extra-annotation is always a List and always at least empty
Copy link
Copy Markdown
Contributor

@jpfinne jpfinne May 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Create a reusable method, also available for other annotations and other generators (kotlin)

Maybe some static method: fixExtraAnnotation(Map<String, Object> vendorExtensions , String annotationName)

@jpfinne
Copy link
Copy Markdown
Contributor

jpfinne commented May 10, 2026

@johnyherangi Nice feature.

How can the user know that a list is now allowed for that specific annotation?
The description was misleading: List of custom annotations to be added to model
Can you update it to reflect that both string and list are allowed?

Why only x-class-extra-annotation? There a at least 3 variants of x-xxx-extra-annotation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][JAVA] vendorExtension.x-class-extra-annotation doesn't generate lists of annotations correctly

2 participants