swagger-codegen for openapi 3.0 doesnt support spring and spring boot

Created on 27 Mar 2018  路  20Comments  路  Source: swagger-api/swagger-codegen

Description
Swagger-codegen version

Swagger declaration file content or url
Command line used for generation
Steps to reproduce
Related issues/PRs
Suggest a fix/enhancement

Most helpful comment

@HugoMario Any update

All 20 comments

@HugoMario ,
Hi is there any update when swagger code gen for spring and spring boot will be ready ?

Hello @anand188

We don't have an ETA for this, right now we're waiting for community help. If you would like to know how to implement them, please let me know.

Hello @HugoMario ,
I am trying links in openapi 3.0 codegen jar with language as jaxrs-jersey.
Does it automatically create code for links as specified in specification ?
Else do i need to write the controller and other classes?

Hello @HugoMario,
Also i am trying to work with spring implementation by following Swagger Codegen migration document.
But its very hard for me to understand

@anand188 i understand, we'll be working on making things easier.

Hello @HugoMario, when will be springboot codegen available ?

Hello @anand188 i just added spring language with oas 3 support. Please check it when you have a chance and file any found issue, i'll work on address them. Going to close this for now.

Thanks!

Hi @HugoMario Could you please share the commit id

sure, here is the PR https://github.com/swagger-api/swagger-codegen-generators/pull/82, keep in mind that languages classes and templates for codegen 3.0.0 are placed on swagger-codegen-generators repo

Here are contents of my pom file
=== Pom.xml ===

       `<plugin>
           <groupId>io.swagger</groupId>
           <artifactId>swagger-codegen-maven-plugin</artifactId>
           <version>3.0.0-rc0</version>
           <executions>
              <execution>
                 <goals>
                    <goal>generate</goal>
                 </goals>
                 <configuration>
                    <environmentVariables>
                       <models />
                    </environmentVariables>
                    <inputSpec>${project.basedir}/src/main/resources/user-service.yaml</inputSpec>
                    <language>spring</language>
                    <output>${project.build.directory}/generated-sources/openapi</output>
                    <modelPackage>com.example.userservice.generated.openapi.model</modelPackage>
                    <apiPackage>com.example.userservice.generated.openapi.api</apiPackage>
                    <configOptions>
                       <interfaceOnly>true</interfaceOnly>
                       <skipOverwrite>true</skipOverwrite>
                    </configOptions>
                 </configuration>
              </execution>
           </executions>
           <dependencies>
                <dependency>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-codegen-generators</artifactId>
                    <version>1.0.0-rc1</version>
                </dependency>
            </dependencies>
        </plugin>`

  Yaml file used - https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml

=== mvn clean install ===

[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.example:user-service:jar:0.0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.springframework.boot:spring-boot-starter-web:jar -> duplicate declaration of version (?) @ line 54, column 23
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] -----------------------< com.example:user-service >-----------------------
[INFO] Building user-service 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for org.apache.httpcomponents:httpcore:jar:4.4.9 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ user-service ---
[INFO] Deleting /home/test/project/example/user-service/target
[INFO]
[INFO] --- swagger-codegen-maven-plugin:3.0.0-rc1:generate (default) @ user-service ---
Downloading from central: https://repo.maven.apache.org/maven2/io/swagger/swagger-models/1.5.19/swagger-models-1.5.19.jar
Downloading from central: https://repo.maven.apache.org/maven2/io/swagger/swagger-annotations/1.5.19/swagger-annotations-1.5.19.jar
Downloaded from central: https://repo.maven.apache.org/maven2/io/swagger/swagger-annotations/1.5.19/swagger-annotations-1.5.19.jar (22 kB at 70 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/io/swagger/swagger-models/1.5.19/swagger-models-1.5.19.jar (151 kB at 327 kB/s)
[WARNING] Output directory does not exist, or is inaccessible. No file (.swagger-codegen-ignore) will be evaluated.
[INFO] Invoker Package Name, originally not set, is now dervied from api package name: com.example.userservice.generated.openapi
[WARNING] String to be sanitized is null. Default to Object
[WARNING] String to be sanitized is null. Default to Object
[INFO] writing file /home/test/project/example/user-service/target/generated-sources/openapi/src/main/java/com/example/userservice/generated/openapi/model/Error.java
[INFO] writing file /home/test/project/example/user-service/target/generated-sources/openapi/src/main/java/com/example/userservice/generated/openapi/model/Pet.java
[INFO] writing file /home/test/project/example/user-service/target/generated-sources/openapi/src/main/java/com/example/userservice/generated/openapi/model/Pets.java
[ERROR]
java.lang.RuntimeException: Could not generate api file for 'pets'
at io.swagger.codegen.DefaultGenerator.generateApis (DefaultGenerator.java:527)
at io.swagger.codegen.DefaultGenerator.generate (DefaultGenerator.java:731)
at io.swagger.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:534)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: com.github.jknack.handlebars.HandlebarsException: /v2/JavaSpring/api.mustache:100:54: java.lang.ClassCastException: java.util.HashMap cannot be cast to io.swagger.codegen.VendorExtendable
/v2/JavaSpring/api.mustache:100:54
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:11)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.helper.EachHelper.apply (EachHelper.java:72)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:433)
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:29)
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:11)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:433)
at com.github.jknack.handlebars.helper.UnlessHelper.apply (UnlessHelper.java:50)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.helper.EachHelper.apply (EachHelper.java:72)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:445)
at com.github.jknack.handlebars.helper.WithHelper.apply (WithHelper.java:58)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.internal.ForwardingTemplate.apply (ForwardingTemplate.java:72)
at io.swagger.codegen.DefaultGenerator.processTemplateToFile (DefaultGenerator.java:745)
at io.swagger.codegen.DefaultGenerator.generateApis (DefaultGenerator.java:486)
at io.swagger.codegen.DefaultGenerator.generate (DefaultGenerator.java:731)
at io.swagger.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:534)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to io.swagger.codegen.VendorExtendable
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:11)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.helper.EachHelper.apply (EachHelper.java:72)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:433)
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:29)
at io.swagger.codegen.handlebars.helpers.ExtensionHelper.apply (ExtensionHelper.java:11)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:433)
at com.github.jknack.handlebars.helper.UnlessHelper.apply (UnlessHelper.java:50)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.helper.EachHelper.apply (EachHelper.java:72)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.Options.apply (Options.java:538)
at com.github.jknack.handlebars.Options.fn (Options.java:445)
at com.github.jknack.handlebars.helper.WithHelper.apply (WithHelper.java:58)
at com.github.jknack.handlebars.internal.Block.merge (Block.java:211)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.TemplateList.merge (TemplateList.java:95)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:130)
at com.github.jknack.handlebars.internal.BaseTemplate.apply (BaseTemplate.java:118)
at com.github.jknack.handlebars.internal.ForwardingTemplate.apply (ForwardingTemplate.java:72)
at io.swagger.codegen.DefaultGenerator.processTemplateToFile (DefaultGenerator.java:745)
at io.swagger.codegen.DefaultGenerator.generateApis (DefaultGenerator.java:486)
at io.swagger.codegen.DefaultGenerator.generate (DefaultGenerator.java:731)
at io.swagger.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:534)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.145 s
[INFO] Finished at: 2018-05-29T13:55:15-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.swagger:swagger-codegen-maven-plugin:3.0.0-rc1:generate (default) on project user-service: Code generation failed. See above for the full exception. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

@bigbang4u2 can you please try this again with 3.0.0-rc1 and check if you still get the same output?

@HugoMario I tried with 3.0.0-rc1 but still getting above error

@bigbang4u2 , is it possible to you share the api definition used to get this error?

@HugoMario Any update

I am getting the same error with Spring. When I switch to java it works fine.

Using language=spring and a YAML file with:

  post:
    ...
    requestBody:
      content:
        ...

triggers the error.

Fixed by using the latest snapshot version of swagger-codegen-generators:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>3.0.0-rc1</version>
    ....
    <dependencies>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-codegen-generators</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>

Yes its working with latest snapshot version of swagger-codegen-generators

Hi Guys,
Any release date planned for springboot support and OAS 3?
Thank you

hey @azraino
check one of the latest release https://github.com/swagger-api/swagger-codegen/releases which supports springboot for OAS 3.

Was this page helpful?
0 / 5 - 0 ratings