diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFClientCodegen.java new file mode 100644 index 00000000000..2b1353aa21d --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFClientCodegen.java @@ -0,0 +1,176 @@ + +package io.swagger.codegen.languages; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.CodegenOperation; +import io.swagger.codegen.CodegenProperty; +import io.swagger.codegen.CodegenType; +import io.swagger.codegen.SupportingFile; +import io.swagger.models.Operation; + +public class JavaCXFClientCodegen extends AbstractJavaCodegen +{ + private static final Logger LOGGER = LoggerFactory.getLogger(JavaCXFClientCodegen.class); + + /** + * Name of the sub-directory in "src/main/resource" where to find the + * Mustache template for the JAX-RS Codegen. + */ + protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; + + public static final String USE_BEANVALIDATION = "useBeanValidation"; + + public static final String USE_GZIP_FEATURE = "useGzipFeature"; + + public static final String USE_LOGGING_FEATURE = "useLoggingFeature"; + + public static final String USE_BEANVALIDATION_FEATURE = "useBeanValidationFeature"; + + protected boolean useBeanValidation = false; + + protected boolean useGzipFeature = false; + + protected boolean useLoggingFeature = false; + + protected boolean useBeanValidationFeature = false; + + + public JavaCXFClientCodegen() + { + super(); + + supportsInheritance = true; + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-client"; + dateLibrary = "legacy"; //TODO: add joda support to all jax-rs + + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + outputFolder = "generated-code/JavaJaxRS-CXF"; + + // clear model and api doc template as this codegen + // does not support auto-generated markdown doc at the moment + //TODO: add doc templates + modelDocTemplateFiles.remove("model_doc.mustache"); + apiDocTemplateFiles.remove("api_doc.mustache"); + + + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "javax.xml.datatype.XMLGregorianCalendar"); // Map DateTime fields to Java standart class 'XMLGregorianCalendar' + + importMapping.put("LocalDate", "org.joda.time.LocalDate"); + + embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; + + cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations")); + + cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Use Gzip Feature")); + cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION_FEATURE, "Use BeanValidation Feature")); + cliOptions.add(CliOption.newBoolean(USE_LOGGING_FEATURE, "Use Logging Feature")); + + + } + + + @Override + public void processOpts() + { + super.processOpts(); + + if (additionalProperties.containsKey(USE_BEANVALIDATION)) { + boolean useBeanValidationProp = convertPropertyToBooleanAndWriteBack(USE_BEANVALIDATION); + this.setUseBeanValidation(useBeanValidationProp); + } + + this.setUseGzipFeature(convertPropertyToBooleanAndWriteBack(USE_GZIP_FEATURE)); + this.setUseLoggingFeature(convertPropertyToBooleanAndWriteBack(USE_LOGGING_FEATURE)); + + boolean useBeanValidationFeature = convertPropertyToBooleanAndWriteBack(USE_BEANVALIDATION_FEATURE); + this.setUseBeanValidationFeature(useBeanValidationFeature); + if (useBeanValidationFeature) { + LOGGER.info("make sure your client supports Bean Validation 1.1"); + } + + supportingFiles.clear(); // Don't need extra files provided by AbstractJAX-RS & Java Codegen + + writeOptional(outputFolder, new SupportingFile("pom.mustache", "", "pom.xml")); + + } + + + private boolean convertPropertyToBooleanAndWriteBack(String propertyKey) { + boolean booleanValue = false; + if (additionalProperties.containsKey(propertyKey)) { + booleanValue = Boolean.valueOf(additionalProperties.get(propertyKey).toString()); + // write back as boolean + additionalProperties.put(propertyKey, booleanValue); + } + + return booleanValue; + } + + @Override + public String getName() + { + return "jaxrs-cxf"; + } + + + @Override + public CodegenType getTag() + { + return CodegenType.CLIENT; + } + + @Override + public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { + super.addOperationToGroup(tag, resourcePath, operation, co, operations); + co.subresourceOperation = !co.path.isEmpty(); + } + + @Override + public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { + super.postProcessModelProperty(model, property); + model.imports.remove("ApiModelProperty"); + model.imports.remove("ApiModel"); + model.imports.remove("JsonSerialize"); + model.imports.remove("ToStringSerializer"); + } + + @Override + public String getHelp() + { + return "Generates a Java JAXRS Client based on Apache CXF framework."; + } + + public void setUseBeanValidation(boolean useBeanValidation) { + this.useBeanValidation = useBeanValidation; + } + + + public void setUseGzipFeature(boolean useGzipFeature) { + this.useGzipFeature = useGzipFeature; + } + + + public void setUseLoggingFeature(boolean useLoggingFeature) { + this.useLoggingFeature = useLoggingFeature; + } + + + public void setUseBeanValidationFeature(boolean useBeanValidationFeature) { + this.useBeanValidationFeature = useBeanValidationFeature; + } + +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java index 0969436413b..0ef8e2a6d78 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java @@ -130,25 +130,25 @@ public void processOpts() supportingFiles.clear(); // Don't need extra files provided by AbstractJAX-RS & Java Codegen - writeOptional(outputFolder, new SupportingFile("pom.mustache", "", "pom.xml")); + writeOptional(outputFolder, new SupportingFile("server/pom.mustache", "", "pom.xml")); if (this.generateSpringApplication) { - writeOptional(outputFolder, new SupportingFile("readme.md", "", "readme.md")); + writeOptional(outputFolder, new SupportingFile("server/readme.md", "", "readme.md")); - writeOptional(outputFolder, new SupportingFile("ApplicationContext.xml.mustache", + writeOptional(outputFolder, new SupportingFile("server/ApplicationContext.xml.mustache", ("src/main/resources"), "ApplicationContext.xml")); - writeOptional(outputFolder, new SupportingFile("web.mustache", + writeOptional(outputFolder, new SupportingFile("server/web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); - writeOptional(outputFolder, new SupportingFile("context.xml.mustache", + writeOptional(outputFolder, new SupportingFile("server/context.xml.mustache", ("src/main/webapp/WEB-INF"), "context.xml")); // Jboss - writeOptional(outputFolder, new SupportingFile("jboss-web.xml.mustache", + writeOptional(outputFolder, new SupportingFile("server/jboss-web.xml.mustache", ("src/main/webapp/WEB-INF"), "jboss-web.xml")); // Spring Boot if (this.generateSpringBootApplication) { - writeOptional(outputFolder, new SupportingFile("SpringBootApplication.mustache", + writeOptional(outputFolder, new SupportingFile("server/SpringBootApplication.mustache", (testFolder + '/' + apiPackage).replace(".", "/"), "SpringBootApplication.java")); } @@ -173,7 +173,7 @@ private boolean convertPropertyToBooleanAndWriteBack(String propertyKey) { @Override public String getName() { - return "jaxrs-cxf"; + return "jaxrs-cxf-server"; } @Override diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api_test.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api_test.mustache index 10725b7a6b8..a823672275a 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api_test.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api_test.mustache @@ -11,8 +11,19 @@ import javax.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; import org.apache.cxf.jaxrs.client.ClientConfiguration; import org.apache.cxf.jaxrs.client.WebClient; +{{#useGzipFeature}} import org.apache.cxf.transport.common.gzip.GZIPInInterceptor; import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor; +{{/useGzipFeature}} + +{{#useLoggingFeature}} +import org.apache.cxf.interceptor.LoggingOutInterceptor; +{{/useLoggingFeature}} +{{#useBeanValidationFeature}} +import org.apache.cxf.validation.BeanValidationProvider; +import org.apache.cxf.validation.BeanValidationOutInterceptor; +{{/useBeanValidationFeature}} + import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; {{^fullJavaUtil}} @@ -32,6 +43,7 @@ import org.springframework.test.context.web.WebAppConfiguration; {{/generateSpringBootApplication}} + /** * API tests for {{classname}} */ @@ -73,7 +85,17 @@ public class {{classname}}Test { config.getOutInterceptors().add(gzipOutInterceptor); config.getInInterceptors().add(new GZIPInInterceptor()); -{{/useGzipFeature}} +{{/useGzipFeature}} +{{#useLoggingFeature}} + LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor(); + config.getOutInterceptors().add(loggingOutInterceptor); +{{/useLoggingFeature}} +{{#useBeanValidationFeature}} + BeanValidationProvider beanValProv = new BeanValidationProvider(); + BeanValidationOutInterceptor beanValidationOutInterceptor = new BeanValidationOutInterceptor(); + beanValidationOutInterceptor.setProvider(beanValProv); + config.getOutInterceptors().add(beanValidationOutInterceptor); +{{/useBeanValidationFeature}} } {{#operations}}{{#operation}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pom.mustache index eda74565ceb..6e0736b368a 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pom.mustache @@ -2,17 +2,12 @@ 4.0.0 {{groupId}} {{artifactId}} - war + jar {{artifactId}} {{artifactVersion}} src/main/java - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 - maven-failsafe-plugin 2.6 @@ -75,20 +70,12 @@ - gen/java + src/gen/java - - - - maven-war-plugin - - true - - @@ -158,42 +145,13 @@ ${cxf-version} compile -{{#generateSpringApplication}} - +{{#useBeanValidationFeature}} - org.springframework - spring-context - ${spring-version} + org.hibernate + hibernate-validator + 5.2.2.Final - - org.springframework - spring-web - ${spring-version} - -{{/generateSpringApplication}} -{{#generateSpringBootApplication}} - - - org.springframework.boot - spring-boot-starter-tomcat - ${spring.boot-version} - provided - - - - org.springframework.boot - spring-boot-starter-test - ${spring.boot-version} - test - - - - org.apache.cxf - cxf-spring-boot-starter-jaxrs - ${cxf-version} - provided - -{{/generateSpringBootApplication}} +{{/useBeanValidationFeature}} @@ -217,12 +175,6 @@ {{#useBeanValidation}} 1.1.0.Final {{/useBeanValidation}} -{{#generateSpringApplication}} - 4.2.5.RELEASE -{{/generateSpringApplication}} -{{#generateSpringBootApplication}} - 1.3.3.RELEASE -{{/generateSpringBootApplication}} 3.1.6 UTF-8 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/ApplicationContext.xml.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/ApplicationContext.xml.mustache similarity index 93% rename from modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/ApplicationContext.xml.mustache rename to modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/ApplicationContext.xml.mustache index b3e02bd864a..6e2a377605f 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/ApplicationContext.xml.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/ApplicationContext.xml.mustache @@ -73,6 +73,9 @@ {{/useBeanValidationFeature}} + + + {{#useWadlFeature}} @@ -104,7 +107,12 @@ -{{/useBeanValidationFeature}} +{{/useBeanValidationFeature}} +{{^useBeanValidationFeature}} + + + +{{/useBeanValidationFeature}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/SpringBootApplication.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/SpringBootApplication.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/SpringBootApplication.mustache rename to modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/SpringBootApplication.mustache diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/jboss-web.xml.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/jboss-web.xml.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/jboss-web.xml.mustache rename to modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/jboss-web.xml.mustache diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache new file mode 100644 index 00000000000..6e0165d011f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/pom.mustache @@ -0,0 +1,231 @@ + + 4.0.0 + {{groupId}} + {{artifactId}} + war + {{artifactId}} + {{artifactVersion}} + + src/main/java + + + maven-failsafe-plugin + 2.6 + + + + integration-test + verify + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.9.1 + + + add-source + generate-sources + + add-source + + + + src/gen/java + + + + + + + + + maven-war-plugin + 2.1.1 + + true + + + + + + + io.swagger + swagger-jaxrs + compile + ${swagger-core-version} + + + ch.qos.logback + logback-classic + ${logback-version} + compile + + + ch.qos.logback + logback-core + ${logback-version} + compile + + + junit + junit + ${junit-version} + test + +{{#useBeanValidation}} + + + javax.validation + validation-api + ${beanvalidation-version} + provided + +{{/useBeanValidation}} + + + org.apache.cxf + cxf-rt-rs-client + ${cxf-version} + test + + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf-version} + compile + + + org.apache.cxf + cxf-rt-rs-service-description + ${cxf-version} + compile + + + org.apache.cxf + cxf-rt-rs-service-description-swagger + ${cxf-version} + compile + + + org.apache.cxf + cxf-rt-ws-policy + ${cxf-version} + compile + + + org.apache.cxf + cxf-rt-wsdl + ${cxf-version} + compile + +{{#generateSpringApplication}} + + + org.springframework + spring-context + ${spring-version} + + + org.springframework + spring-web + ${spring-version} + +{{/generateSpringApplication}} +{{#generateSpringBootApplication}} + + + org.springframework.boot + spring-boot-starter-tomcat + ${spring.boot-version} + provided + + + + org.springframework.boot + spring-boot-starter-test + ${spring.boot-version} + test + + + + org.apache.cxf + cxf-spring-boot-starter-jaxrs + ${cxf-version} + provided + +{{/generateSpringBootApplication}} + + + + sonatype-snapshots + https://oss.sonatype.org/content/repositories/snapshots + + true + + + + + {{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}} + ${java.version} + ${java.version} + 1.5.9 + 9.2.9.v20150224 + 2.22.2 + 4.12 + 1.1.7 + 2.5 +{{#useBeanValidation}} + 1.1.0.Final +{{/useBeanValidation}} +{{#generateSpringApplication}} + 4.2.5.RELEASE +{{/generateSpringApplication}} +{{#generateSpringBootApplication}} + 1.3.3.RELEASE +{{/generateSpringBootApplication}} + 3.1.7 + UTF-8 + + diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/readme.md b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/readme.md similarity index 100% rename from modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/readme.md rename to modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/readme.md diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/web.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/web.mustache rename to modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/server/web.mustache diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 3c40b1d84e9..d042e8654ac 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -11,6 +11,7 @@ io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.GroovyClientCodegen io.swagger.codegen.languages.JavaClientCodegen io.swagger.codegen.languages.JavaJerseyServerCodegen +io.swagger.codegen.languages.JavaCXFClientCodegen io.swagger.codegen.languages.JavaCXFServerCodegen io.swagger.codegen.languages.JavaResteasyServerCodegen io.swagger.codegen.languages.JavaJAXRSSpecServerCodegen