SlideShare a Scribd company logo
How to Generate a REST
CXF3 Application from a
Swagger-Contract
Johannes Fiala, Developer
Agenda
• Generate based on contract
• Extend using code first
• Freeze the contract
• Use the REST API
• Generate client code (Java/Javascript)
• Access with a browser using a UI
• View/Share as HTML/PDF
• Customize the code generator
Toolchain
• Apache CXF 3
• + SwaggerFeature
• + Spring configuration
• + Spring Boot integration (start/tests)
• Swagger-Tools
• Swagger-Editor
• Swagger-Codegen
• Swagger-UI
• Swagger2Markup
Contract first, then code, then contract
Complete process flow
About me…
• Spring REST / Swagger-Springfox
• Added BeanValidation support
• Swagger-Codegen
• Created Javascript client
• Add BeanValidation support for Java
• Improved CXF server (generate complete server)
• Created CXF client
• Swagger2Markup
• Added BeanValidation support
Contract
• WADL (XML-based)
• By w3c, Last update 2009
• Swagger (Json/Yaml-based)
• By Linux foundation
• Version 1.0 – 2011 (Wordnik)
• Version 1.2 - 2014
• Version 2.0 – 2015 / transferred to Linux foundation / Open-API
initiative
• Next version 3.0
• Others: Blueprint, RAML, …
Open API / Swagger
• A language-agnostic interface to REST APIs
• allows to discover and understand the capabilities of a service
• Supported Formats: JSON/YAML
https://github.com/OAI/OpenAPI-Specification
Contract editors
• Swagger Editor
• by SmartBear
• Eclipse SwagEdit
• By RepreZen API Studio
• Commercial Tools:
• Restlet Studio
• RepreZen API Studio
Swagger-Editor (Json)
Swagger-Editor
• By SmartBear
• Javascript application
• Run locally using npm
• Edit Json / Yaml format
• Generate server
• Generate client
• Import using URL / copy/paste
https://github.com/swagger-api/swagger-editor
Generate the server stub
Swagger-Codegen
• by SmartBear (Apache License)
• Version 2.2.0
• Java program
• Mustache templating
• Generates server + client code
• 32 Supported languages: Java, C#, Javascript, Dart, Groovy,
JaxRS, NodeJS, Objective-C, Perl, PHP, Python, Ruby, Scala,
…
https://github.com/swagger-api/swagger-codegen
Generate the server stub
Swagger-Codegen
• Supported server stubs for Java:
• Java JAX RS
• 2.0 spec
• Jersey
• CXF
• Resteasy
• Spring MVC
• Spring Boot
CXF server stub
Features
• Scheduled for version 2.2.2
• Generates Interface/Implementation/Models
• Generate a complete web application
• Context.xml / ApplicationContext.xml
• Web.xml
• Jboss: jboss-web.xml
• Spring Boot support
• Run as Spring-Boot Application
• Tests
• Run using Spring Integrationtests using random ports
• Currently no update/merge for new methods …
Swagger-Codegen CLI
• io.swagger.codegen.Codegen
-i hello_world.json
-l jaxrs-cxf
-o c:hello_world_project
-c hello_world_config.json
Swagger-Codegen CLI
Configuration file
Demo
• Create hello world service
• Generate CXF server stub (with Spring support enabled)
• Run using Spring Boot
• Run Junit-Tests
• Deploy to application server (Jboss EAP 7)
CXF server stub
Supported Features
• Spring application
• Swagger generator
• WADL generator
• BeanValidation annotations
• Activate automatic BeanValidation (1.1)
• Compression (gzip)
• Logging
• Integration-Tests (Spring Boot)
Swagger-Codegen CLI
Display all language options
• io.swagger.codegen.SwaggerCodegen
config-help -l jaxrs-cxf
or
• java -jar modules/swagger-codegen-cli/target/swagger-
codegen-cli.jar config-help –l jaxrs-cxf
Swagger-Codegen CLI
language options for cxf
Demo
• Re-Generate with more options
• BeanValidation
• Gzip
• Logging
Further development
life cycle
• Extend the API
• code first
• Use the API
• Frontend development
• Finalize: Freeze the contract
Further development life cycle
Contract
Generate
Code
Add/Modify
Code
Extend the application
• Modify your API:
• Add new services (use JAXRS-annotations)
• Use Swagger annotations
• Use BeanValidation annotations
• Generated Swagger spec gets updated automatically
Extend the application
Swagger annotations
• Service:
• @Api – activate Swagger for api
• Operations:
• @ApiOperation - description
• @ApiResponse – error codes + return types
• Model:
• @ApiModel - description
• @ApiModelProperty - description
Freeze your API: contract
• Use the updated contract
• Generate interfaces/models
• Prevent accidential changes of the API
• Integrate in build job (Maven / Gradle)
• Will generate to target/generated-sources/swagger by default
• Use .swagger-codegen-ignore file to protect files from updates
• Tests are always protected
• https://github.com/swagger-api/swagger-
codegen/tree/master/modules/swagger-codegen-maven-plugin
Freeze your API: contract
Demo
• Extend hello world service
(+ BeanValidation)
• Access updated specs
• Swagger spec
• WADL
• Freeze the contract
Spring Boot Hot-Deploy – Spring Loaded
• Allows hot deploy
• for adding new methods etc.
• Add JVM parameters:
• -javaagent:/path_to_spring-loaded/springloaded-1.2.5.RELEASE.jar –
noverify
• Used by Grails
• More Info: https://github.com/spring-projects/spring-loaded
Use your API
 Generate client stubs
• Swagger-Codegen
 Access your API using a browser
• Swagger-UI
 Generate HTML/PDF documentation
 Swagger2Markup
Swagger-Codegen
• Server + Client code stub generator
• Integration options
• Java application
• Maven
• Gradle
• https://github.com/swagger-api/swagger-codegen
Why generate client code?
• No more manual api calls
• Ensure consistency of your client code with the API!
• Makes code completion possible!
• Allows developers to read description for your operations and
models in the IDE
• You get compilation errors if the API breaks with newer
versions!
Swagger-UI
• By SmartBear
• Access your API with a browser
• Javascript application
• Can access the generated Swagger spec – always consistent
with your code
• Integration options:
• Copy into your webapp
• load as Web-Jar
https://github.com/swagger-api/swagger-ui
Swagger-UI
Swagger2Markup
• By Robert Winkler (github)
• Render your API in HTML/PDFs
• Uses Markdown/Asciidoctor files
• Completely customizable
• Integration options:
• Run as Program/Unittest
• Maven
https://github.com/Swagger2Markup/swagger2markup
Swagger2Markup
Swagger
contract
Asciidoctor Html
PDF
Demo
• Client stub generator:
• Java
• Javascript
• Swagger-UI
• Swagger2Markup
Migration – Ensure portability
• Keep method signatures clean
• Use JaxRS 2 Exceptions
• Use JaxRS Response only if necessary
• Keep framework-specific configuration separately
Customize the generator
• Generator implemented in Java (one class for each language)
• Mustache-files
• api.mustache
• apiServiceImpl.mustache
• pojo.mustache
• api_test.mustache
• …
• Jmustache:
• https://github.com/samskivert/jmustache
Customize the generator
• Use –t flag for your own templates
• Customize only the templates you need
• Examples:
• Add Maven profile for deployment
• Add logger declaration
• Customize generated unit tests
• …
Customize the generator
• Customize Codegen Languages
• Extend Language class
• Add it to io.swagger.codegen.CodegenConfig
• swagger-codegensrcmainresourcesMETA-
INFservicesio.swagger.codegen.CodegenConfig
• Copy language templates
• Also see "Building your own Templates"
• https://github.com/swagger-api/swagger-codegen/wiki/Building-your-own-
Templates
Demo
• Customize the generator
• E.g. custom pom.xml file for deployment
• Swagger-Codegen project structure
WADL  Swagger
• Use wadl2java to generate server stub
• BeanValidation: krasa-jaxb-tools
• Activate CXF3 SwaggerFeature
• Use generated Swagger-file
• Will include BeanValidation annotations for models
• You can use both WADL first + auto-generate Swagger contract
Wrapup
• Generate based on contract
• Swagger-Codegen server stubs
• Extend using code first
• CXF 3 Swagger Feature
• Freeze using contract
• Swagger-Codegen build integration (mvn/gradle/cmd)
• Use your application
• Generate client code (Swagger-Codegen)
• Use in browser (Swagger-UI)
• View/Share as HTML/PDF (Swagger2Markup)
• Customize the code generator
Contribute to the projects
• Swagger-Codegen
• Java / JMustache
• Swagger-UI
• Javascript
• Swagger-Editor
• Javascript
• Swagger2Markup
• Java/Asciidoctor
Links & Resources
• Swagger Editor
• http://editor.swagger.io/
• Swagger Codegen
• https://github.com/swagger-api/swagger-codegen
• Swagger UI
• https://github.com/swagger-api/swagger-ui
• CXF
• http://cxf.apache.org/
Thank you for your attention!
• Demo-Code:
http://github.com/jfiala/swagger-cxf-demo
• Contact:
• @johannes_fiala

More Related Content

PDF
Jcon 2017 How to use Swagger to develop REST applications
PDF
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
PDF
Swagger / Quick Start Guide
PDF
OpenAPI Specification概要
PDF
Documenting your REST API with Swagger - JOIN 2014
PDF
Swagger 2.0: Latest and Greatest
PDF
Swagger code motion talk
PPTX
Document your rest api using swagger - Devoxx 2015
Jcon 2017 How to use Swagger to develop REST applications
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Swagger / Quick Start Guide
OpenAPI Specification概要
Documenting your REST API with Swagger - JOIN 2014
Swagger 2.0: Latest and Greatest
Swagger code motion talk
Document your rest api using swagger - Devoxx 2015

What's hot (20)

PPTX
Writer APIs in Java faster with Swagger Inflector
PPTX
Swagger APIs for Humans and Robots (Gluecon)
PDF
Design Driven API Development
PPTX
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...
PDF
Developing Faster with Swagger
PDF
Swagger UI
PPTX
Introducing swagger
PDF
Fastest to Mobile with Scalatra + Swagger
PDF
Writing REST APIs with OpenAPI and Swagger Ada
PPTX
Building an API using Grape
PDF
Simple REST-APIs with Dropwizard and Swagger
PDF
Skinny Framework 1.0.0
PPTX
Swagger - Making REST APIs friendlier
PPTX
Building RESTful APIs w/ Grape
PDF
Apache Big Data Europe 2015: Selected Talks
PPTX
Level 3 REST Makes Your API Browsable
PDF
Creating applications with Grails, Angular JS and Spring Security - G3 Summit...
PDF
Creating applications with Grails, Angular JS and Spring Security - GR8Conf U...
PDF
Serverless 프레임워크로 Nuxt 앱 배포하기
Writer APIs in Java faster with Swagger Inflector
Swagger APIs for Humans and Robots (Gluecon)
Design Driven API Development
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...
Developing Faster with Swagger
Swagger UI
Introducing swagger
Fastest to Mobile with Scalatra + Swagger
Writing REST APIs with OpenAPI and Swagger Ada
Building an API using Grape
Simple REST-APIs with Dropwizard and Swagger
Skinny Framework 1.0.0
Swagger - Making REST APIs friendlier
Building RESTful APIs w/ Grape
Apache Big Data Europe 2015: Selected Talks
Level 3 REST Makes Your API Browsable
Creating applications with Grails, Angular JS and Spring Security - G3 Summit...
Creating applications with Grails, Angular JS and Spring Security - GR8Conf U...
Serverless 프레임워크로 Nuxt 앱 배포하기
Ad

Viewers also liked (11)

ZIP
Templating with your {{mustache}}js
PDF
Web pack and friends
PPTX
Swagger in the API Lifecycle
PPT
A Tour of Swagger for APIs
PPTX
Understanding how to use Swagger and its tools
PPTX
API Design first with Swagger
PDF
Automated Deployment with Maven - going the whole nine yards
PDF
Swaggerで始めるモデルファーストなAPI開発
PDF
Scale a Swagger based Web API (Guillaume Laforge)
PPTX
Consuming Restful APIs using Swagger v2.0
PDF
Crystal clear service interfaces w/ Swagger/OpenAPI
Templating with your {{mustache}}js
Web pack and friends
Swagger in the API Lifecycle
A Tour of Swagger for APIs
Understanding how to use Swagger and its tools
API Design first with Swagger
Automated Deployment with Maven - going the whole nine yards
Swaggerで始めるモデルファーストなAPI開発
Scale a Swagger based Web API (Guillaume Laforge)
Consuming Restful APIs using Swagger v2.0
Crystal clear service interfaces w/ Swagger/OpenAPI
Ad

Similar to How to generate a REST CXF3 application from Swagger ApacheConEU 2016 (20)

PPTX
How to generate a rest application - DevFest Vienna 2016
PPTX
Java script nirvana in netbeans [con5679]
ODP
Groovy & Grails eXchange 2012 vert.x presentation
PDF
Java ScriptingJava Scripting: One VM, Many Languages
PDF
Building Services with WSO2 Microservices framework for Java and WSO2 AS
PDF
How do JavaScript frameworks impact the security of applications?
PDF
Bundle your modules with Webpack
PDF
How to Contribute to Apache Usergrid
PPTX
Infrastructure as Code
PDF
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
PDF
JavaScript Engine and WebAssembly
PPTX
Building a REST API Microservice for the DevNet API Scavenger Hunt
PDF
Play Framework and Activator
PPTX
ASP.NET MVC 5 and SignalR 2
PPTX
Node.js Development with Apache NetBeans
PDF
Intro JavaScript
PDF
Vagrant Binding JayDay 2013
PPTX
concept of server-side JavaScript / JS Framework: NODEJS
PDF
JHipster
PPTX
Building Services with WSO2 Application Server and WSO2 Microservices Framewo...
How to generate a rest application - DevFest Vienna 2016
Java script nirvana in netbeans [con5679]
Groovy & Grails eXchange 2012 vert.x presentation
Java ScriptingJava Scripting: One VM, Many Languages
Building Services with WSO2 Microservices framework for Java and WSO2 AS
How do JavaScript frameworks impact the security of applications?
Bundle your modules with Webpack
How to Contribute to Apache Usergrid
Infrastructure as Code
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
JavaScript Engine and WebAssembly
Building a REST API Microservice for the DevNet API Scavenger Hunt
Play Framework and Activator
ASP.NET MVC 5 and SignalR 2
Node.js Development with Apache NetBeans
Intro JavaScript
Vagrant Binding JayDay 2013
concept of server-side JavaScript / JS Framework: NODEJS
JHipster
Building Services with WSO2 Application Server and WSO2 Microservices Framewo...

Recently uploaded (20)

PPTX
Digital Literacy And Online Safety on internet
PPTX
Mathew Digital SEO Checklist Guidlines 2025
DOCX
Unit-3 cyber security network security of internet system
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PDF
SASE Traffic Flow - ZTNA Connector-1.pdf
PPTX
E -tech empowerment technologies PowerPoint
PPTX
Funds Management Learning Material for Beg
PDF
Paper PDF World Game (s) Great Redesign.pdf
DOC
Rose毕业证学历认证,利物浦约翰摩尔斯大学毕业证国外本科毕业证
PDF
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
PDF
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
PDF
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PDF
The New Creative Director: How AI Tools for Social Media Content Creation Are...
PDF
Introduction to the IoT system, how the IoT system works
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PPTX
Internet___Basics___Styled_ presentation
Digital Literacy And Online Safety on internet
Mathew Digital SEO Checklist Guidlines 2025
Unit-3 cyber security network security of internet system
Unit-1 introduction to cyber security discuss about how to secure a system
SASE Traffic Flow - ZTNA Connector-1.pdf
E -tech empowerment technologies PowerPoint
Funds Management Learning Material for Beg
Paper PDF World Game (s) Great Redesign.pdf
Rose毕业证学历认证,利物浦约翰摩尔斯大学毕业证国外本科毕业证
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
Module 1 - Cyber Law and Ethics 101.pptx
Job_Card_System_Styled_lorem_ipsum_.pptx
The New Creative Director: How AI Tools for Social Media Content Creation Are...
Introduction to the IoT system, how the IoT system works
Tenda Login Guide: Access Your Router in 5 Easy Steps
Internet___Basics___Styled_ presentation

How to generate a REST CXF3 application from Swagger ApacheConEU 2016

  • 1. How to Generate a REST CXF3 Application from a Swagger-Contract Johannes Fiala, Developer
  • 2. Agenda • Generate based on contract • Extend using code first • Freeze the contract • Use the REST API • Generate client code (Java/Javascript) • Access with a browser using a UI • View/Share as HTML/PDF • Customize the code generator
  • 3. Toolchain • Apache CXF 3 • + SwaggerFeature • + Spring configuration • + Spring Boot integration (start/tests) • Swagger-Tools • Swagger-Editor • Swagger-Codegen • Swagger-UI • Swagger2Markup
  • 4. Contract first, then code, then contract
  • 6. About me… • Spring REST / Swagger-Springfox • Added BeanValidation support • Swagger-Codegen • Created Javascript client • Add BeanValidation support for Java • Improved CXF server (generate complete server) • Created CXF client • Swagger2Markup • Added BeanValidation support
  • 7. Contract • WADL (XML-based) • By w3c, Last update 2009 • Swagger (Json/Yaml-based) • By Linux foundation • Version 1.0 – 2011 (Wordnik) • Version 1.2 - 2014 • Version 2.0 – 2015 / transferred to Linux foundation / Open-API initiative • Next version 3.0 • Others: Blueprint, RAML, …
  • 8. Open API / Swagger • A language-agnostic interface to REST APIs • allows to discover and understand the capabilities of a service • Supported Formats: JSON/YAML https://github.com/OAI/OpenAPI-Specification
  • 9. Contract editors • Swagger Editor • by SmartBear • Eclipse SwagEdit • By RepreZen API Studio • Commercial Tools: • Restlet Studio • RepreZen API Studio
  • 11. Swagger-Editor • By SmartBear • Javascript application • Run locally using npm • Edit Json / Yaml format • Generate server • Generate client • Import using URL / copy/paste https://github.com/swagger-api/swagger-editor
  • 12. Generate the server stub Swagger-Codegen • by SmartBear (Apache License) • Version 2.2.0 • Java program • Mustache templating • Generates server + client code • 32 Supported languages: Java, C#, Javascript, Dart, Groovy, JaxRS, NodeJS, Objective-C, Perl, PHP, Python, Ruby, Scala, … https://github.com/swagger-api/swagger-codegen
  • 13. Generate the server stub Swagger-Codegen • Supported server stubs for Java: • Java JAX RS • 2.0 spec • Jersey • CXF • Resteasy • Spring MVC • Spring Boot
  • 14. CXF server stub Features • Scheduled for version 2.2.2 • Generates Interface/Implementation/Models • Generate a complete web application • Context.xml / ApplicationContext.xml • Web.xml • Jboss: jboss-web.xml • Spring Boot support • Run as Spring-Boot Application • Tests • Run using Spring Integrationtests using random ports • Currently no update/merge for new methods …
  • 15. Swagger-Codegen CLI • io.swagger.codegen.Codegen -i hello_world.json -l jaxrs-cxf -o c:hello_world_project -c hello_world_config.json
  • 17. Demo • Create hello world service • Generate CXF server stub (with Spring support enabled) • Run using Spring Boot • Run Junit-Tests • Deploy to application server (Jboss EAP 7)
  • 18. CXF server stub Supported Features • Spring application • Swagger generator • WADL generator • BeanValidation annotations • Activate automatic BeanValidation (1.1) • Compression (gzip) • Logging • Integration-Tests (Spring Boot)
  • 19. Swagger-Codegen CLI Display all language options • io.swagger.codegen.SwaggerCodegen config-help -l jaxrs-cxf or • java -jar modules/swagger-codegen-cli/target/swagger- codegen-cli.jar config-help –l jaxrs-cxf
  • 21. Demo • Re-Generate with more options • BeanValidation • Gzip • Logging
  • 22. Further development life cycle • Extend the API • code first • Use the API • Frontend development • Finalize: Freeze the contract
  • 23. Further development life cycle Contract Generate Code Add/Modify Code
  • 24. Extend the application • Modify your API: • Add new services (use JAXRS-annotations) • Use Swagger annotations • Use BeanValidation annotations • Generated Swagger spec gets updated automatically
  • 25. Extend the application Swagger annotations • Service: • @Api – activate Swagger for api • Operations: • @ApiOperation - description • @ApiResponse – error codes + return types • Model: • @ApiModel - description • @ApiModelProperty - description
  • 26. Freeze your API: contract • Use the updated contract • Generate interfaces/models • Prevent accidential changes of the API • Integrate in build job (Maven / Gradle) • Will generate to target/generated-sources/swagger by default • Use .swagger-codegen-ignore file to protect files from updates • Tests are always protected • https://github.com/swagger-api/swagger- codegen/tree/master/modules/swagger-codegen-maven-plugin
  • 27. Freeze your API: contract
  • 28. Demo • Extend hello world service (+ BeanValidation) • Access updated specs • Swagger spec • WADL • Freeze the contract
  • 29. Spring Boot Hot-Deploy – Spring Loaded • Allows hot deploy • for adding new methods etc. • Add JVM parameters: • -javaagent:/path_to_spring-loaded/springloaded-1.2.5.RELEASE.jar – noverify • Used by Grails • More Info: https://github.com/spring-projects/spring-loaded
  • 30. Use your API  Generate client stubs • Swagger-Codegen  Access your API using a browser • Swagger-UI  Generate HTML/PDF documentation  Swagger2Markup
  • 31. Swagger-Codegen • Server + Client code stub generator • Integration options • Java application • Maven • Gradle • https://github.com/swagger-api/swagger-codegen
  • 32. Why generate client code? • No more manual api calls • Ensure consistency of your client code with the API! • Makes code completion possible! • Allows developers to read description for your operations and models in the IDE • You get compilation errors if the API breaks with newer versions!
  • 33. Swagger-UI • By SmartBear • Access your API with a browser • Javascript application • Can access the generated Swagger spec – always consistent with your code • Integration options: • Copy into your webapp • load as Web-Jar https://github.com/swagger-api/swagger-ui
  • 35. Swagger2Markup • By Robert Winkler (github) • Render your API in HTML/PDFs • Uses Markdown/Asciidoctor files • Completely customizable • Integration options: • Run as Program/Unittest • Maven https://github.com/Swagger2Markup/swagger2markup
  • 37. Demo • Client stub generator: • Java • Javascript • Swagger-UI • Swagger2Markup
  • 38. Migration – Ensure portability • Keep method signatures clean • Use JaxRS 2 Exceptions • Use JaxRS Response only if necessary • Keep framework-specific configuration separately
  • 39. Customize the generator • Generator implemented in Java (one class for each language) • Mustache-files • api.mustache • apiServiceImpl.mustache • pojo.mustache • api_test.mustache • … • Jmustache: • https://github.com/samskivert/jmustache
  • 40. Customize the generator • Use –t flag for your own templates • Customize only the templates you need • Examples: • Add Maven profile for deployment • Add logger declaration • Customize generated unit tests • …
  • 41. Customize the generator • Customize Codegen Languages • Extend Language class • Add it to io.swagger.codegen.CodegenConfig • swagger-codegensrcmainresourcesMETA- INFservicesio.swagger.codegen.CodegenConfig • Copy language templates • Also see "Building your own Templates" • https://github.com/swagger-api/swagger-codegen/wiki/Building-your-own- Templates
  • 42. Demo • Customize the generator • E.g. custom pom.xml file for deployment • Swagger-Codegen project structure
  • 43. WADL  Swagger • Use wadl2java to generate server stub • BeanValidation: krasa-jaxb-tools • Activate CXF3 SwaggerFeature • Use generated Swagger-file • Will include BeanValidation annotations for models • You can use both WADL first + auto-generate Swagger contract
  • 44. Wrapup • Generate based on contract • Swagger-Codegen server stubs • Extend using code first • CXF 3 Swagger Feature • Freeze using contract • Swagger-Codegen build integration (mvn/gradle/cmd) • Use your application • Generate client code (Swagger-Codegen) • Use in browser (Swagger-UI) • View/Share as HTML/PDF (Swagger2Markup) • Customize the code generator
  • 45. Contribute to the projects • Swagger-Codegen • Java / JMustache • Swagger-UI • Javascript • Swagger-Editor • Javascript • Swagger2Markup • Java/Asciidoctor
  • 46. Links & Resources • Swagger Editor • http://editor.swagger.io/ • Swagger Codegen • https://github.com/swagger-api/swagger-codegen • Swagger UI • https://github.com/swagger-api/swagger-ui • CXF • http://cxf.apache.org/
  • 47. Thank you for your attention! • Demo-Code: http://github.com/jfiala/swagger-cxf-demo • Contact: • @johannes_fiala