swagger-api / swagger-api/swagger-codegen

[JavaJaxRS] Vendor Extensions Not Accessed in model.mustache

Open
#12,486 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Description

When I update the licenseInfo.mustache template to reference vendor extensions and nest it in other templates, it works fine in files such as api.mustache, api_test.mustache, and apiServiceImpl.mustache. It does not output the value in model.mustache or pojo.mustache. Referencing included template variables (such as infoName) works fine.

Swagger-codegen version

swagger-codegen-cli-3.0.24 (cannot use latest at the moment due to Java version)

Swagger declaration file content or url

Unfortunately I cannot paste all of the code in here, but I can at least show how things are referenced/declared:
Folder structure:

swagger
    /gen
        /codegen
            swagger-codegen-cli-3.0.24.jar
        /templates
            /jaxrs-cxf
            <contents of JavaJaxRS folder from JAR file>
    /output
        /api
openapi: 3.0.1
x-year: 2025
info:
    name: Your Name
paths:

Declaration in licenseInfo.mustache:

{{vendorExtensions.x-year}}

Use of licenseInfo.mustache in model.mustache and api.mustache

{{>licenseInfo}}

config-api.json

{
    "hideGenerationTimestamp": true,
    "java8": true,
    "dateLibrary": "java8",
    "useSwaggerFeature": true,
    "modelPackage": "some.package.name",
    "apiPackage": "some.package.name",
    "invokerPackage": "some.package.name",
    "useOas2": false,
    "ignoreImportMappings": false,
    "importMappings": {
        "Set": "java.util.Set"
    },
    "addConsumesProducesJson": true
}
Command line used for generation
java -jar ./gen/codegen/swagger-codegen-cli-3.0.24.jar generate -D useGenericResponse=true -i swagger.yaml -t gen/templates/jaxrs-cxf -l jaxrs-cxf -o output/api -c config-api.json
Steps to reproduce
  1. Setup directory as shown above.
  2. Using any yaml file with a defined model, add the x-year property at the root level. Also, to show that included variables work fine, ensure to include info -> name in the yaml.
  3. Update the licenseInfo template directly under jaxrs-cxf folder to the above reference, using the template variable (name) and the vendor extension (x-year).
  4. Import licenseInfo to model.mustache and api.mustache per the above reference.
  5. cd into the swagger folder and run the JAR from there.
  6. When you open the API file(s), you will see that the licenseInfo text is there, with the year and name.
  7. When you open the model file, you will notice that the licenseInfo text is there, with the name, but minus the year. So, I think the import is working, but perhaps there's a vendor extension scoping issue somewhere?
Related issues/PRs

I didn't find anything similar.

Suggest a fix/enhancement

Fix the issue.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the jaxrs-cxf templates, especially licenseInfo.mustache, model.mustache, and pojo.mustache, and compare their rendering context with api.mustache and apiServiceImpl.mustache. Reproduce the issue using the supplied OpenAPI YAML and swagger-codegen-cli-3.0.24. Done means x-year renders from the included licenseInfo template in generated model and POJO files as it does in API files.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.