From 44c1e27680e9b3cbc81f2a9aea6564a92ccde237 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 15 Jan 2016 14:11:38 +0100 Subject: [PATCH 01/12] Add mustache template files for Apache CXF support probably not the final version of the templates --- .../JavaJaxRS/cxf/allowableValues.mustache | 1 + .../main/resources/JavaJaxRS/cxf/api.mustache | 23 ++++++++ .../JavaJaxRS/cxf/bodyParams.mustache | 1 + .../JavaJaxRS/cxf/entityModel.mustache | 56 +++++++++++++++++++ .../JavaJaxRS/cxf/enumOuterClass.mustache | 3 + .../JavaJaxRS/cxf/formParams.mustache | 2 + .../cxf/generatedAnnotation.mustache | 1 + .../JavaJaxRS/cxf/headerParams.mustache | 1 + .../resources/JavaJaxRS/cxf/model.mustache | 16 ++++++ .../JavaJaxRS/cxf/pathParams.mustache | 1 + .../JavaJaxRS/cxf/project/build.properties | 1 + .../JavaJaxRS/cxf/queryParams.mustache | 1 + 12 files changed, 107 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/allowableValues.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/bodyParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/enumOuterClass.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/formParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/generatedAnnotation.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/headerParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pathParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/project/build.properties create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/queryParams.mustache diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/allowableValues.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/allowableValues.mustache new file mode 100644 index 00000000000..a48256d027a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/allowableValues.mustache @@ -0,0 +1 @@ +{{#allowableValues}}allowableValues="{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}{{^values}}range=[{{#min}}{{.}}{{/min}}{{^min}}-infinity{{/min}}, {{#max}}{{.}}{{/max}}{{^max}}infinity{{/max}}]{{/values}}"{{/allowableValues}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache new file mode 100644 index 00000000000..68932d69882 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache @@ -0,0 +1,23 @@ +package {{package}}; + +{{#imports}}import {{import}}; +{{/imports}} + +import {{modelPackage}}.*; +import java.util.*; +import javax.ws.rs.*; + +@Path("/{{baseName}}") +public interface {{classname}} { +{{#operations}} +{{#operation}} + @{{httpMethod}} + {{#subresourceOperation}}@Path("{{path}}"){{/subresourceOperation}} + {{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} + {{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} + public Response {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, + {{/hasMore}}{{/allParams}}); +{{/operation}} +} +{{/operations}} + diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/bodyParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/bodyParams.mustache new file mode 100644 index 00000000000..c7d1abfe527 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/bodyParams.mustache @@ -0,0 +1 @@ +{{#isBodyParam}}{{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache new file mode 100644 index 00000000000..6e68e54fae0 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache @@ -0,0 +1,56 @@ +package {{package}}; + +{{#imports}}import {{import}}; +{{/imports}} + +import com.fasterxml.jackson.annotation.JsonProperty; + +import javax.validation.constraints.NotNull; +import javax.xml.bind.annotation.XmlRootElement; + +{{#models}} + +{{#model}}{{#description}} +/** + * {{description}} + **/{{/description}} +@XmlRootElement(name="{{classname}}") +public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} { + {{#vars}} + {{#isEnum}} + public enum {{datatypeWithEnum}} { + {{#allowableValues}}{{#values}} {{.}}, {{/values}}{{/allowableValues}} + }; + {{#required}}@NotNull{{/required}} + private {{{datatypeWithEnum}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{^isEnum}} + {{#required}}@NotNull{{/required}} + private {{{datatype}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{/vars}} + + {{#vars}} + /**{{#description}} + * {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + **/ + @JsonProperty("{{name}}") + public {{{datatypeWithEnum}}} {{getter}}() { + return {{name}}; + } + public void {{setter}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + } + + {{/vars}} + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class {{classname}} {\n"); + {{#parent}}sb.append(" " + super.toString()).append("\n");{{/parent}} + {{#vars}}sb.append(" {{name}}: ").append({{name}}).append("\n"); + {{/vars}}sb.append("}\n"); + return sb.toString(); + } +} +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/enumOuterClass.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/enumOuterClass.mustache new file mode 100644 index 00000000000..7aea7b92f22 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/enumOuterClass.mustache @@ -0,0 +1,3 @@ +public enum {{classname}} { + {{#allowableValues}}{{.}}{{^-last}}, {{/-last}}{{/allowableValues}} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/formParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/formParams.mustache new file mode 100644 index 00000000000..c129a925e94 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/formParams.mustache @@ -0,0 +1,2 @@ +{{#isFormParam}}{{#notFile}}@Multipart(value = "{{paramName}}"{{^required}}, required = false{{/required}}) {{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}} @Multipart(value = "{{paramName}}"{{^required}}, required = false{{/required}}) InputStream {{paramName}}InputStream, + @Multipart(value = "{{paramName}}" {{^required}}, required = false{{/required}}) Attachment {{paramName}}Detail{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/generatedAnnotation.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/generatedAnnotation.mustache new file mode 100644 index 00000000000..49110fc1ad9 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/generatedAnnotation.mustache @@ -0,0 +1 @@ +@javax.annotation.Generated(value = "{{generatorClass}}", date = "{{generatedDate}}") \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/headerParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/headerParams.mustache new file mode 100644 index 00000000000..25d690c90ed --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/headerParams.mustache @@ -0,0 +1 @@ +{{#isHeaderParam}}@HeaderParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache new file mode 100644 index 00000000000..b9512d2b83c --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache @@ -0,0 +1,16 @@ +package {{package}}; + +import java.util.Objects; +{{#imports}}import {{import}}; +{{/imports}} + +{{#serializableModel}}import java.io.Serializable;{{/serializableModel}} +{{#models}} +{{#model}}{{#description}} +/** + * {{description}} + **/{{/description}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}} +{{^isEnum}}{{>pojo}}{{/isEnum}} +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pathParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pathParams.mustache new file mode 100644 index 00000000000..ba153467a65 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/pathParams.mustache @@ -0,0 +1 @@ +{{#isPathParam}}@PathParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/project/build.properties b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/project/build.properties new file mode 100644 index 00000000000..a8c2f849be3 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.12.0 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/queryParams.mustache new file mode 100644 index 00000000000..be8cee8dfe1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/queryParams.mustache @@ -0,0 +1 @@ +{{#isQueryParam}}@QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file From 3648a7996593c8b00202d74e613c33fbd588cda3 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 15 Jan 2016 14:17:16 +0100 Subject: [PATCH 02/12] Add CXF codegen Also rename the existing JAX-RS codegen to JAX-RS-Jersey1 codegen, since JAX-RS is only a specification. Jersey and CXF are both an implementation of the JAX-RS specification. --- .../languages/JavaJaxRSCXFServerCodegen.java | 49 +++++++++++++++++++ ...ava => JavaJaxRSJersey1ServerCodegen.java} | 9 ++-- .../services/io.swagger.codegen.CodegenConfig | 3 +- .../codegen/jaxrs/JaxRSServerOptionsTest.java | 4 +- .../codegen/jaxrs/JaxrsJava8ModelTest.java | 4 +- .../codegen/jaxrs/JaxrsJodaModelTest.java | 4 +- .../options/JaxRSServerOptionsProvider.java | 3 ++ 7 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java rename modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/{JaxRSServerCodegen.java => JavaJaxRSJersey1ServerCodegen.java} (96%) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java new file mode 100644 index 00000000000..837f61984a4 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java @@ -0,0 +1,49 @@ + +package io.swagger.codegen.languages; + +import java.io.File; + +import org.apache.commons.lang.WordUtils; + +// TODO: create an abstract JavaJAXRSServerCodegen that both Jersey1 & CXF will extends. +public class JavaJaxRSCXFServerCodegen extends JavaJaxRSJersey1ServerCodegen +{ + public JavaJaxRSCXFServerCodegen() + { + super(); + super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; + // We decided to just provide the CXF interface and let the user create his own files to implement it + super.apiTemplateFiles.remove("apiService.mustache"); + super.apiTemplateFiles.remove("apiServiceImpl.mustache"); + super.apiTemplateFiles.remove("apiServiceFactory.mustache"); + } + + @Override + public void processOpts() + { + super.processOpts(); + sourceFolder = "gen" + File.separator + "java"; + + modelTemplateFiles.clear(); + modelTemplateFiles.put("entityModel.mustache", ".java"); + + supportingFiles.clear(); + } + + @Override + public String toApiName(String name) + { + String computedName = name; + computedName = computedName.replace('-', ' '); + computedName = WordUtils.capitalize(computedName); + computedName = computedName.replaceAll("\\s", ""); + computedName = super.toApiName(computedName); + return computedName; + } + + @Override + public String getName() + { + return "cxf"; + } +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java similarity index 96% rename from modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java rename to modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java index f681bf5ba96..b0bc3b5ad6f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java @@ -8,11 +8,14 @@ import io.swagger.models.Swagger; import java.io.File; import java.util.*; -public class JaxRSServerCodegen extends JavaClientCodegen { +public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { + protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; + protected String dateLibrary = "default"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; - public JaxRSServerCodegen() { + public static final String DATE_LIBRARY = "dateLibrary"; + public JavaJaxRSJersey1ServerCodegen() { super(); sourceFolder = "src/gen/java"; @@ -30,7 +33,7 @@ public class JaxRSServerCodegen extends JavaClientCodegen { additionalProperties.put("title", title); - embeddedTemplateDir = templateDir = "JavaJaxRS" + File.separator + "jersey1_18"; + embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; for(int i = 0; i < cliOptions.size(); i++) { if(CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt())) { 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 87d61229936..d22a87b0a7b 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 @@ -7,7 +7,8 @@ io.swagger.codegen.languages.FlaskConnexionCodegen io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.JavaClientCodegen io.swagger.codegen.languages.JavascriptClientCodegen -io.swagger.codegen.languages.JaxRSServerCodegen +io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen +io.swagger.codegen.languages.JavaJaxRSCXFServerCodegen io.swagger.codegen.languages.JavaInflectorServerCodegen io.swagger.codegen.languages.JMeterCodegen io.swagger.codegen.languages.NodeJSServerCodegen diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java index a441a7984d2..94ce0519a6a 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.java.JavaClientOptionsTest; -import io.swagger.codegen.languages.JaxRSServerCodegen; +import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; import io.swagger.codegen.options.JaxRSServerOptionsProvider; import mockit.Expectations; @@ -11,7 +11,7 @@ import mockit.Tested; public class JaxRSServerOptionsTest extends JavaClientOptionsTest { @Tested - private JaxRSServerCodegen clientCodegen; + private JavaJaxRSJersey1ServerCodegen clientCodegen; public JaxRSServerOptionsTest() { super(new JaxRSServerOptionsProvider()); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java index b1ee5b0040a..b5ed5d1653c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JaxRSServerCodegen; +import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -26,7 +26,7 @@ public class JaxrsJava8ModelTest { .required("id") .required("name"); - final JaxRSServerCodegen codegen = new JaxRSServerCodegen(); + final JavaJaxRSJersey1ServerCodegen codegen = new JavaJaxRSJersey1ServerCodegen(); codegen.setDateLibrary("java8"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java index c2cb65c78ca..0fe24f04af2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java @@ -1,7 +1,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JaxRSServerCodegen; +import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -25,7 +25,7 @@ public class JaxrsJodaModelTest { .required("id") .required("name"); - final JaxRSServerCodegen codegen = new JaxRSServerCodegen(); + final JavaJaxRSJersey1ServerCodegen codegen = new JavaJaxRSJersey1ServerCodegen(); codegen.setDateLibrary("joda"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index b74623e8517..2a8b2a3dcfc 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -1,6 +1,7 @@ package io.swagger.codegen.options; import com.google.common.collect.ImmutableMap; +import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; import io.swagger.codegen.CodegenConstants; import java.util.Map; @@ -26,6 +27,8 @@ public class JaxRSServerOptionsProvider extends JavaOptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); builder.putAll(options) .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE); + .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) + .put(JavaJaxRSJersey1ServerCodegen.DATE_LIBRARY, "joda"); return builder.build(); } From 63b7e24c2295bf9fd88f7899460a0c5603d0f6c2 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Mon, 18 Jan 2016 10:38:19 +0100 Subject: [PATCH 03/12] merge resolution --- .../codegen/languages/JavaJaxRSJersey1ServerCodegen.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java index b0bc3b5ad6f..61456b66da5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java @@ -10,11 +10,9 @@ import java.util.*; public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; - protected String dateLibrary = "default"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; - public static final String DATE_LIBRARY = "dateLibrary"; public JavaJaxRSJersey1ServerCodegen() { super(); @@ -156,7 +154,7 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { } } this.additionalProperties.put("serverPort", port); - if(swagger.getPaths() != null) { + if(swagger != null && swagger.getPaths() != null) { for(String pathname : swagger.getPaths().keySet()) { Path path = swagger.getPath(pathname); if(path.getOperations() != null) { @@ -232,7 +230,7 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { if (name.length() == 0) { return "DefaultApi"; } - name = sanitizeName(name); + name = sanitizeName(name); return camelize(name) + "Api"; } From 1dbc8a85528aeb60d24314af150804be777e7144 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Mon, 18 Jan 2016 13:58:40 +0100 Subject: [PATCH 04/12] Unit test correction A unit test was in error due to a duplicate key in a map. Joda library is now used by default for JAX-RS code generation. --- .../swagger/codegen/options/JaxRSServerOptionsProvider.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index 2a8b2a3dcfc..203bc029b19 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -1,7 +1,6 @@ package io.swagger.codegen.options; import com.google.common.collect.ImmutableMap; -import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; import io.swagger.codegen.CodegenConstants; import java.util.Map; @@ -28,7 +27,9 @@ public class JaxRSServerOptionsProvider extends JavaOptionsProvider { builder.putAll(options) .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE); .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) - .put(JavaJaxRSJersey1ServerCodegen.DATE_LIBRARY, "joda"); + // .put(JavaJaxRSJersey1ServerCodegen.DATE_LIBRARY, "joda") //java.lang.IllegalArgumentException: Multiple entries with same key: dateLibrary=joda and dateLibrary=joda + + ; return builder.build(); } From f3659f88a8edfe52e1e766dd29325258ea014f7c Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Wed, 20 Jan 2016 19:10:06 +0100 Subject: [PATCH 05/12] Work almost finish Aask @wing328 if the modificatgion in the DefaultGenerator class is a problem. If needed, find a way to do it only for the CXF Codegen. TODO: Maybe create an abstract JAX-RS Codegen and make Jersey & CXF extends it ? CXF should not extends Jersey since there at two different frameworks implementing the JAX-RS specification. Important: nothing is tested yet, only visual checks during Maven build. --- .../io/swagger/codegen/DefaultGenerator.java | 3 +- .../codegen/languages/JavaClientCodegen.java | 2 +- .../languages/JavaJaxRSCXFServerCodegen.java | 26 +- .../JavaJaxRSJersey1ServerCodegen.java | 240 +++++++++--------- .../main/resources/JavaJaxRS/cxf/api.mustache | 5 +- .../JavaJaxRS/cxf/entityModel.mustache | 5 - .../resources/JavaJaxRS/cxf/model.mustache | 3 +- 7 files changed, 139 insertions(+), 145 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 263adc05cf8..09ea5fb73fc 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -264,7 +264,8 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { operation.put("basePath", basePath); operation.put("basePathWithoutHost", basePathWithoutHost); operation.put("contextPath", contextPath); - operation.put("baseName", tag); + // operation.put("baseName", tag); FIXME ask @hiveship if this modification cause a problem + operation.put("baseName", basePathWithoutHost); operation.put("modelPackage", config.modelPackage()); operation.putAll(config.additionalProperties()); operation.put("classname", config.toApiName(tag)); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index a1ca3245953..6e7756659d2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -493,7 +493,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { if (allDefinitions != null && codegenModel != null && codegenModel.parentSchema != null && codegenModel.hasEnums) { final Model parentModel = allDefinitions.get(codegenModel.parentSchema); final CodegenModel parentCodegenModel = super.fromModel(codegenModel.parent, parentModel); - codegenModel = this.reconcileInlineEnums(codegenModel, parentCodegenModel); + codegenModel = JavaClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel); } return codegenModel; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java index 837f61984a4..2b3cf6e90b0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java @@ -2,8 +2,12 @@ package io.swagger.codegen.languages; import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; -import org.apache.commons.lang.WordUtils; +import io.swagger.codegen.CodegenOperation; +import io.swagger.models.Operation; // TODO: create an abstract JavaJAXRSServerCodegen that both Jersey1 & CXF will extends. public class JavaJaxRSCXFServerCodegen extends JavaJaxRSJersey1ServerCodegen @@ -28,22 +32,18 @@ public class JavaJaxRSCXFServerCodegen extends JavaJaxRSJersey1ServerCodegen modelTemplateFiles.put("entityModel.mustache", ".java"); supportingFiles.clear(); - } - - @Override - public String toApiName(String name) - { - String computedName = name; - computedName = computedName.replace('-', ' '); - computedName = WordUtils.capitalize(computedName); - computedName = computedName.replaceAll("\\s", ""); - computedName = super.toApiName(computedName); - return computedName; - } + } @Override public String getName() { return "cxf"; } + + + @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(); + } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java index 61456b66da5..e4044953678 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java @@ -8,12 +8,14 @@ import io.swagger.models.Swagger; import java.io.File; import java.util.*; -public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { +public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen +{ protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; protected String title = "Swagger Server"; protected String implFolder = "src/main/java"; - public JavaJaxRSJersey1ServerCodegen() { + public JavaJaxRSJersey1ServerCodegen() + { super(); sourceFolder = "src/gen/java"; @@ -30,11 +32,11 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { modelPackage = "io.swagger.model"; additionalProperties.put("title", title); - + embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; - for(int i = 0; i < cliOptions.size(); i++) { - if(CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt())) { + for ( int i = 0; i < cliOptions.size(); i++ ) { + if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { cliOptions.remove(i); break; } @@ -46,7 +48,6 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { Map supportedLibraries = new LinkedHashMap(); supportedLibraries.put(DEFAULT_LIBRARY, "Jersey core 1.18.1"); -// supportedLibraries.put("jersey2", "Jersey2 core library 2.x"); library.setEnum(supportedLibraries); cliOptions.add(library); @@ -54,123 +55,120 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { } @Override - public CodegenType getTag() { + public CodegenType getTag() + { return CodegenType.SERVER; } @Override - public String getName() { + public String getName() + { return "jaxrs"; } @Override - public String getHelp() { - return "Generates a Java JAXRS Server application."; + public String getHelp() + { + return "Generates a Java JAXRS Server application based on Jersey framework."; } @Override - public void processOpts() { + public void processOpts() + { super.processOpts(); - - if(additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER)) { - implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); + + if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { + implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); } - + supportingFiles.clear(); supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("ApiException.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); - supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); - supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); - supportingFiles.add(new SupportingFile("NotFoundException.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); - supportingFiles.add(new SupportingFile("web.mustache", - ("src/main/webapp/WEB-INF"), "web.xml")); - supportingFiles.add(new SupportingFile("StringUtil.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); + supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); + supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); + supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); + supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); + supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); + supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); - if (additionalProperties.containsKey("dateLibrary")) { + if ( additionalProperties.containsKey("dateLibrary") ) { setDateLibrary(additionalProperties.get("dateLibrary").toString()); additionalProperties.put(dateLibrary, "true"); } - if("joda".equals(dateLibrary)) { - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); - } - else if ("java8".equals(dateLibrary)) { - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", - (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + if ( "joda".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } else if ( "java8".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); } } - @Override - public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { - String basePath = resourcePath; - if (basePath.startsWith("/")) { - basePath = basePath.substring(1); - } - int pos = basePath.indexOf("/"); - if (pos > 0) { - basePath = basePath.substring(0, pos); - } - - if (basePath == "") { - basePath = "default"; - } else { - if (co.path.startsWith("/" + basePath)) { - co.path = co.path.substring(("/" + basePath).length()); - } - co.subresourceOperation = !co.path.isEmpty(); - } - List opList = operations.get(basePath); - if (opList == null) { - opList = new ArrayList(); - operations.put(basePath, opList); - } - opList.add(co); - co.baseName = basePath; - } +// @Override +// public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) +// { +// String basePath = resourcePath; +// +// if ( basePath.startsWith("/") ) { +// basePath = basePath.substring(1); +// } +// int pos = basePath.indexOf("/"); +// if ( pos > 0 ) { +// basePath = basePath.substring(0, pos); +// } +// +// if ( basePath == "" ) { +// basePath = "default"; +// } else { +// if ( co.path.startsWith("/" + basePath) ) { +// co.path = co.path.substring(("/" + basePath).length()); +// System.out.println("### DEBUG | jerseyCodegen addOperationToGroupe | co.path -> " + co.path.toString()); +// } +// co.subresourceOperation = !co.path.isEmpty(); +// } +// List opList = operations.get(basePath); +// if ( opList == null ) { +// opList = new ArrayList(); +// operations.put(basePath, opList); +// } +// opList.add(co); +// co.baseName = basePath; +// } @Override - public void preprocessSwagger(Swagger swagger) { - if("/".equals(swagger.getBasePath())) { + public void preprocessSwagger(Swagger swagger) + { + if ( "/".equals(swagger.getBasePath()) ) { swagger.setBasePath(""); } String host = swagger.getHost(); - String port = "8080"; - if(host != null) { + String port = "8080"; // Default value for a JEE Server + if ( host != null ) { String[] parts = host.split(":"); - if(parts.length > 1) { + if ( parts.length > 1 ) { port = parts[1]; } } this.additionalProperties.put("serverPort", port); - if(swagger != null && swagger.getPaths() != null) { - for(String pathname : swagger.getPaths().keySet()) { + if ( swagger.getPaths() != null ) { + for ( String pathname : swagger.getPaths().keySet() ) { Path path = swagger.getPath(pathname); - if(path.getOperations() != null) { - for(Operation operation : path.getOperations()) { - if(operation.getTags() != null) { + if ( path.getOperations() != null ) { + for ( Operation operation : path.getOperations() ) { + if ( operation.getTags() != null ) { List> tags = new ArrayList>(); - for(String tag : operation.getTags()) { + for ( String tag : operation.getTags() ) { Map value = new HashMap(); value.put("tag", tag); value.put("hasMore", "true"); tags.add(value); } - if(tags.size() > 0) { + if ( tags.size() > 0 ) { tags.get(tags.size() - 1).remove("hasMore"); } - if(operation.getTags().size() > 0) { + if ( operation.getTags().size() > 0 ) { String tag = operation.getTags().get(0); operation.setTags(Arrays.asList(tag)); } @@ -183,51 +181,53 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { } @Override - public Map postProcessOperations(Map objs) { + public Map postProcessOperations(Map objs) + { Map operations = (Map) objs.get("operations"); - if (operations != null) { + if ( operations != null ) { List ops = (List) operations.get("operation"); - for (CodegenOperation operation : ops) { + for ( CodegenOperation operation : ops ) { List responses = operation.responses; - if (responses != null) { - for (CodegenResponse resp : responses) { - if ("0".equals(resp.code)) { + if ( responses != null ) { + for ( CodegenResponse resp : responses ) { + if ( "0".equals(resp.code) ) { resp.code = "200"; } } } - if (operation.returnType == null) { - operation.returnType = "Void"; - } else if (operation.returnType.startsWith("List")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("List<".length(), end).trim(); - operation.returnContainer = "List"; - } - } else if (operation.returnType.startsWith("Map")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); - operation.returnContainer = "Map"; - } - } else if (operation.returnType.startsWith("Set")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("Set<".length(), end).trim(); - operation.returnContainer = "Set"; - } - } + if (operation.returnType == null) { + operation.returnType = "void"; + } else if (operation.returnType.startsWith("List")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("List<".length(), end).trim(); + operation.returnContainer = "List"; + } + } else if (operation.returnType.startsWith("Map")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); + operation.returnContainer = "Map"; + } + } else if (operation.returnType.startsWith("Set")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("Set<".length(), end).trim(); + operation.returnContainer = "Set"; + } + } } } return objs; } @Override - public String toApiName(String name) { - if (name.length() == 0) { + public String toApiName(String name) + { + if ( name.length() == 0 ) { return "DefaultApi"; } name = sanitizeName(name); @@ -235,21 +235,19 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { } @Override - public String apiFilename(String templateName, String tag) { - + public String apiFilename(String templateName, String tag) + { String result = super.apiFilename(templateName, tag); - if (templateName.endsWith("Impl.mustache")) { + if ( templateName.endsWith("Impl.mustache") ) { int ix = result.lastIndexOf('/'); result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; - result = result.replace(apiFileFolder(), implFileFolder(implFolder)); - } else if (templateName.endsWith("Factory.mustache")) { + } else if ( templateName.endsWith("Factory.mustache") ) { int ix = result.lastIndexOf('/'); result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; - result = result.replace(apiFileFolder(), implFileFolder(implFolder)); - } else if (templateName.endsWith("Service.mustache")) { + } else if ( templateName.endsWith("Service.mustache") ) { int ix = result.lastIndexOf('.'); result = result.substring(0, ix) + "Service.java"; } @@ -257,12 +255,14 @@ public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen { return result; } - private String implFileFolder(String output) { + private String implFileFolder(String output) + { return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); } @Override - public boolean shouldOverwrite(String filename) { + public boolean shouldOverwrite(String filename) + { return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); } } diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache index 68932d69882..c49958f27bb 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache @@ -3,11 +3,10 @@ package {{package}}; {{#imports}}import {{import}}; {{/imports}} -import {{modelPackage}}.*; -import java.util.*; import javax.ws.rs.*; +import javax.ws.rs.core.Response; -@Path("/{{baseName}}") +@Path("{{baseName}}") public interface {{classname}} { {{#operations}} {{#operation}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache index 6e68e54fae0..9aea77c5bf7 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/entityModel.mustache @@ -3,9 +3,6 @@ package {{package}}; {{#imports}}import {{import}}; {{/imports}} -import com.fasterxml.jackson.annotation.JsonProperty; - -import javax.validation.constraints.NotNull; import javax.xml.bind.annotation.XmlRootElement; {{#models}} @@ -21,9 +18,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} { public enum {{datatypeWithEnum}} { {{#allowableValues}}{{#values}} {{.}}, {{/values}}{{/allowableValues}} }; - {{#required}}@NotNull{{/required}} private {{{datatypeWithEnum}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{^isEnum}} - {{#required}}@NotNull{{/required}} private {{{datatype}}} {{name}} = {{{defaultValue}}};{{/isEnum}}{{/vars}} {{#vars}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache index b9512d2b83c..578cd064df7 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/model.mustache @@ -1,7 +1,6 @@ package {{package}}; -import java.util.Objects; -{{#imports}}import {{import}}; +{{#imports}}import{{import}}; {{/imports}} {{#serializableModel}}import java.io.Serializable;{{/serializableModel}} From 6d6f366db49631716581b27553f95b688d0f15b2 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Thu, 21 Jan 2016 11:04:31 +0100 Subject: [PATCH 06/12] Finish Tests ok. Some modifications may be done later, maybe... --- .../AbstractJavaJAXRSServerCodegen.java | 183 ++++++++++++ .../codegen/languages/JavaCXFCodegen.java | 73 +++++ .../languages/JavaJaxRSCXFServerCodegen.java | 49 ---- .../JavaJaxRSJersey1ServerCodegen.java | 268 ------------------ .../codegen/languages/JavaJerseyCodegen.java | 124 ++++++++ .../services/io.swagger.codegen.CodegenConfig | 5 +- .../codegen/jaxrs/JaxRSServerOptionsTest.java | 4 +- .../codegen/jaxrs/JaxrsJava8ModelTest.java | 4 +- .../codegen/jaxrs/JaxrsJodaModelTest.java | 4 +- 9 files changed, 389 insertions(+), 325 deletions(-) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java delete mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java delete mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java new file mode 100644 index 00000000000..3efca234a79 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java @@ -0,0 +1,183 @@ +package io.swagger.codegen.languages; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import io.swagger.codegen.CodegenOperation; +import io.swagger.codegen.CodegenResponse; +import io.swagger.codegen.CodegenType; +import io.swagger.models.Operation; +import io.swagger.models.Path; +import io.swagger.models.Swagger; + +public abstract class AbstractJavaJAXRSServerCodegen extends JavaClientCodegen +{ + /** + * 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"; + protected String implFolder = "src/main/java"; + protected String title = "Swagger Server"; + + public AbstractJavaJAXRSServerCodegen() + { + super(); + } + + // ================ + // ABSTRACT METHODS + // ================ + + @Override + public abstract String getHelp(); + + @Override + public abstract String getName(); + + // =============== + // COMMONS METHODS + // =============== + + @Override + public CodegenType getTag() + { + return CodegenType.SERVER; + } + + @Override + public void preprocessSwagger(Swagger swagger) + { + if ( "/".equals(swagger.getBasePath()) ) { + swagger.setBasePath(""); + } + + String host = swagger.getHost(); + String port = "8080"; // Default value for a JEE Server + if ( host != null ) { + String[] parts = host.split(":"); + if ( parts.length > 1 ) { + port = parts[1]; + } + } + this.additionalProperties.put("serverPort", port); + if ( swagger.getPaths() != null ) { + for ( String pathname : swagger.getPaths().keySet() ) { + Path path = swagger.getPath(pathname); + if ( path.getOperations() != null ) { + for ( Operation operation : path.getOperations() ) { + if ( operation.getTags() != null ) { + List> tags = new ArrayList>(); + for ( String tag : operation.getTags() ) { + Map value = new HashMap(); + value.put("tag", tag); + value.put("hasMore", "true"); + tags.add(value); + } + if ( tags.size() > 0 ) { + tags.get(tags.size() - 1).remove("hasMore"); + } + if ( operation.getTags().size() > 0 ) { + String tag = operation.getTags().get(0); + operation.setTags(Arrays.asList(tag)); + } + operation.setVendorExtension("x-tags", tags); + } + } + } + } + } + } + + @Override + public Map postProcessOperations(Map objs) + { + @SuppressWarnings("unchecked") + Map operations = (Map) objs.get("operations"); + if ( operations != null ) { + @SuppressWarnings("unchecked") + List ops = (List) operations.get("operation"); + for ( CodegenOperation operation : ops ) { + List responses = operation.responses; + if ( responses != null ) { + for ( CodegenResponse resp : responses ) { + if ( "0".equals(resp.code) ) { + resp.code = "200"; + } + } + } + if ( operation.returnType == null ) { + operation.returnType = "void"; + } else if ( operation.returnType.startsWith("List") ) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if ( end > 0 ) { + operation.returnType = rt.substring("List<".length(), end).trim(); + operation.returnContainer = "List"; + } + } else if ( operation.returnType.startsWith("Map") ) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if ( end > 0 ) { + operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); + operation.returnContainer = "Map"; + } + } else if ( operation.returnType.startsWith("Set") ) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if ( end > 0 ) { + operation.returnType = rt.substring("Set<".length(), end).trim(); + operation.returnContainer = "Set"; + } + } + } + } + return objs; + } + + @Override + public String toApiName(final String name) + { + String computed = name; + if ( computed.length() == 0 ) { + return "DefaultApi"; + } + computed = sanitizeName(computed); + return camelize(computed) + "Api"; + } + + @Override + public String apiFilename(String templateName, String tag) + { + String result = super.apiFilename(templateName, tag); + + if ( templateName.endsWith("Impl.mustache") ) { + int ix = result.lastIndexOf('/'); + result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; + result = result.replace(apiFileFolder(), implFileFolder(implFolder)); + } else if ( templateName.endsWith("Factory.mustache") ) { + int ix = result.lastIndexOf('/'); + result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; + result = result.replace(apiFileFolder(), implFileFolder(implFolder)); + } else if ( templateName.endsWith("Service.mustache") ) { + int ix = result.lastIndexOf('.'); + result = result.substring(0, ix) + "Service.java"; + } + return result; + } + + private String implFileFolder(String output) + { + return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); + } + + @Override + public boolean shouldOverwrite(String filename) + { + return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); + } + +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java new file mode 100644 index 00000000000..2592e0823c3 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java @@ -0,0 +1,73 @@ + +package io.swagger.codegen.languages; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CodegenOperation; +import io.swagger.models.Operation; + +public class JavaCXFCodegen extends AbstractJavaJAXRSServerCodegen +{ + public JavaCXFCodegen() + { + super(); + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-server"; + outputFolder = "generated-code/JavaJaxRS-CXF"; + + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + additionalProperties.put("title", title); + + super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; + + for ( int i = 0; i < cliOptions.size(); i++ ) { + if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { + cliOptions.remove(i); + break; + } + } + + cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + } + + @Override + public void processOpts() + { + super.processOpts(); + sourceFolder = "gen" + File.separator + "java"; + + modelTemplateFiles.clear(); + modelTemplateFiles.put("entityModel.mustache", ".java"); + + supportingFiles.clear(); + } + + @Override + public String getName() + { + return "cxf"; + } + + + @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 String getHelp() + { + return "Generates a Java JAXRS Server application based on Apache CXF framework."; + } +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java deleted file mode 100644 index 2b3cf6e90b0..00000000000 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSCXFServerCodegen.java +++ /dev/null @@ -1,49 +0,0 @@ - -package io.swagger.codegen.languages; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import io.swagger.codegen.CodegenOperation; -import io.swagger.models.Operation; - -// TODO: create an abstract JavaJAXRSServerCodegen that both Jersey1 & CXF will extends. -public class JavaJaxRSCXFServerCodegen extends JavaJaxRSJersey1ServerCodegen -{ - public JavaJaxRSCXFServerCodegen() - { - super(); - super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; - // We decided to just provide the CXF interface and let the user create his own files to implement it - super.apiTemplateFiles.remove("apiService.mustache"); - super.apiTemplateFiles.remove("apiServiceImpl.mustache"); - super.apiTemplateFiles.remove("apiServiceFactory.mustache"); - } - - @Override - public void processOpts() - { - super.processOpts(); - sourceFolder = "gen" + File.separator + "java"; - - modelTemplateFiles.clear(); - modelTemplateFiles.put("entityModel.mustache", ".java"); - - supportingFiles.clear(); - } - - @Override - public String getName() - { - return "cxf"; - } - - - @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(); - } -} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java deleted file mode 100644 index e4044953678..00000000000 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJaxRSJersey1ServerCodegen.java +++ /dev/null @@ -1,268 +0,0 @@ -package io.swagger.codegen.languages; - -import io.swagger.codegen.*; -import io.swagger.models.Operation; -import io.swagger.models.Path; -import io.swagger.models.Swagger; - -import java.io.File; -import java.util.*; - -public class JavaJaxRSJersey1ServerCodegen extends JavaClientCodegen -{ - protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; - protected String title = "Swagger Server"; - protected String implFolder = "src/main/java"; - - public JavaJaxRSJersey1ServerCodegen() - { - super(); - - sourceFolder = "src/gen/java"; - invokerPackage = "io.swagger.api"; - artifactId = "swagger-jaxrs-server"; - - outputFolder = "generated-code/javaJaxRS"; - modelTemplateFiles.put("model.mustache", ".java"); - apiTemplateFiles.put("api.mustache", ".java"); - apiTemplateFiles.put("apiService.mustache", ".java"); - apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); - apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); - apiPackage = "io.swagger.api"; - modelPackage = "io.swagger.model"; - - additionalProperties.put("title", title); - - embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; - - for ( int i = 0; i < cliOptions.size(); i++ ) { - if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { - cliOptions.remove(i); - break; - } - } - - CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); - library.setDefault(DEFAULT_LIBRARY); - - Map supportedLibraries = new LinkedHashMap(); - - supportedLibraries.put(DEFAULT_LIBRARY, "Jersey core 1.18.1"); - library.setEnum(supportedLibraries); - - cliOptions.add(library); - cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); - } - - @Override - public CodegenType getTag() - { - return CodegenType.SERVER; - } - - @Override - public String getName() - { - return "jaxrs"; - } - - @Override - public String getHelp() - { - return "Generates a Java JAXRS Server application based on Jersey framework."; - } - - @Override - public void processOpts() - { - super.processOpts(); - - if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { - implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); - } - - supportingFiles.clear(); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); - supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); - supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); - supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); - supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); - supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); - - if ( additionalProperties.containsKey("dateLibrary") ) { - setDateLibrary(additionalProperties.get("dateLibrary").toString()); - additionalProperties.put(dateLibrary, "true"); - } - - if ( "joda".equals(dateLibrary) ) { - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); - } else if ( "java8".equals(dateLibrary) ) { - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); - } - } - -// @Override -// public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) -// { -// String basePath = resourcePath; -// -// if ( basePath.startsWith("/") ) { -// basePath = basePath.substring(1); -// } -// int pos = basePath.indexOf("/"); -// if ( pos > 0 ) { -// basePath = basePath.substring(0, pos); -// } -// -// if ( basePath == "" ) { -// basePath = "default"; -// } else { -// if ( co.path.startsWith("/" + basePath) ) { -// co.path = co.path.substring(("/" + basePath).length()); -// System.out.println("### DEBUG | jerseyCodegen addOperationToGroupe | co.path -> " + co.path.toString()); -// } -// co.subresourceOperation = !co.path.isEmpty(); -// } -// List opList = operations.get(basePath); -// if ( opList == null ) { -// opList = new ArrayList(); -// operations.put(basePath, opList); -// } -// opList.add(co); -// co.baseName = basePath; -// } - - @Override - public void preprocessSwagger(Swagger swagger) - { - if ( "/".equals(swagger.getBasePath()) ) { - swagger.setBasePath(""); - } - - String host = swagger.getHost(); - String port = "8080"; // Default value for a JEE Server - if ( host != null ) { - String[] parts = host.split(":"); - if ( parts.length > 1 ) { - port = parts[1]; - } - } - this.additionalProperties.put("serverPort", port); - if ( swagger.getPaths() != null ) { - for ( String pathname : swagger.getPaths().keySet() ) { - Path path = swagger.getPath(pathname); - if ( path.getOperations() != null ) { - for ( Operation operation : path.getOperations() ) { - if ( operation.getTags() != null ) { - List> tags = new ArrayList>(); - for ( String tag : operation.getTags() ) { - Map value = new HashMap(); - value.put("tag", tag); - value.put("hasMore", "true"); - tags.add(value); - } - if ( tags.size() > 0 ) { - tags.get(tags.size() - 1).remove("hasMore"); - } - if ( operation.getTags().size() > 0 ) { - String tag = operation.getTags().get(0); - operation.setTags(Arrays.asList(tag)); - } - operation.setVendorExtension("x-tags", tags); - } - } - } - } - } - } - - @Override - public Map postProcessOperations(Map objs) - { - Map operations = (Map) objs.get("operations"); - if ( operations != null ) { - List ops = (List) operations.get("operation"); - for ( CodegenOperation operation : ops ) { - List responses = operation.responses; - if ( responses != null ) { - for ( CodegenResponse resp : responses ) { - if ( "0".equals(resp.code) ) { - resp.code = "200"; - } - } - } - if (operation.returnType == null) { - operation.returnType = "void"; - } else if (operation.returnType.startsWith("List")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("List<".length(), end).trim(); - operation.returnContainer = "List"; - } - } else if (operation.returnType.startsWith("Map")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); - operation.returnContainer = "Map"; - } - } else if (operation.returnType.startsWith("Set")) { - String rt = operation.returnType; - int end = rt.lastIndexOf(">"); - if (end > 0) { - operation.returnType = rt.substring("Set<".length(), end).trim(); - operation.returnContainer = "Set"; - } - } - } - } - return objs; - } - - @Override - public String toApiName(String name) - { - if ( name.length() == 0 ) { - return "DefaultApi"; - } - name = sanitizeName(name); - return camelize(name) + "Api"; - } - - @Override - public String apiFilename(String templateName, String tag) - { - String result = super.apiFilename(templateName, tag); - - if ( templateName.endsWith("Impl.mustache") ) { - int ix = result.lastIndexOf('/'); - result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; - result = result.replace(apiFileFolder(), implFileFolder(implFolder)); - } else if ( templateName.endsWith("Factory.mustache") ) { - int ix = result.lastIndexOf('/'); - result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; - result = result.replace(apiFileFolder(), implFileFolder(implFolder)); - } else if ( templateName.endsWith("Service.mustache") ) { - int ix = result.lastIndexOf('.'); - result = result.substring(0, ix) + "Service.java"; - } - - return result; - } - - private String implFileFolder(String output) - { - return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); - } - - @Override - public boolean shouldOverwrite(String filename) - { - return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); - } -} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java new file mode 100644 index 00000000000..f3a7d9ceda5 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java @@ -0,0 +1,124 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.Operation; + +import java.io.File; +import java.util.*; + +public class JavaJerseyCodegen extends AbstractJavaJAXRSServerCodegen +{ + + public JavaJerseyCodegen() + { + super(); + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-server"; + outputFolder = "generated-code/JavaJaxRS-Jersey"; + + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + apiTemplateFiles.put("apiService.mustache", ".java"); + apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); + apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + additionalProperties.put("title", title); + + embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; + + for ( int i = 0; i < cliOptions.size(); i++ ) { + if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { + cliOptions.remove(i); + break; + } + } + + CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); + library.setDefault(DEFAULT_LIBRARY); + + Map supportedLibraries = new LinkedHashMap(); + + supportedLibraries.put(DEFAULT_LIBRARY, "Jersey core 1.18.1"); + library.setEnum(supportedLibraries); + + cliOptions.add(library); + cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + } + + @Override + public String getName() + { + return "jaxrs"; + } + + @Override + public String getHelp() + { + return "Generates a Java JAXRS Server application based on Jersey framework."; + } + + @Override + public void processOpts() + { + super.processOpts(); + + if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { + implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); + } + + supportingFiles.clear(); + supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); + supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); + supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); + supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); + supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); + supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); + + if ( additionalProperties.containsKey("dateLibrary") ) { + setDateLibrary(additionalProperties.get("dateLibrary").toString()); + additionalProperties.put(dateLibrary, "true"); + } + + if ( "joda".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } else if ( "java8".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + } + } + + @Override + public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { + String basePath = resourcePath; + if (basePath.startsWith("/")) { + basePath = basePath.substring(1); + } + int pos = basePath.indexOf("/"); + if (pos > 0) { + basePath = basePath.substring(0, pos); + } + + if (basePath == "") { + basePath = "default"; + } else { + if (co.path.startsWith("/" + basePath)) { + co.path = co.path.substring(("/" + basePath).length()); + } + co.subresourceOperation = !co.path.isEmpty(); + } + List opList = operations.get(basePath); + if (opList == null) { + opList = new ArrayList(); + operations.put(basePath, opList); + } + opList.add(co); + co.baseName = basePath; + } +} 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 d22a87b0a7b..5a0d5372208 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 @@ -7,8 +7,9 @@ io.swagger.codegen.languages.FlaskConnexionCodegen io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.JavaClientCodegen io.swagger.codegen.languages.JavascriptClientCodegen -io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen -io.swagger.codegen.languages.JavaJaxRSCXFServerCodegen +io.swagger.codegen.languages.JavaClientCodegen +io.swagger.codegen.languages.JavaJerseyCodegen +io.swagger.codegen.languages.JavaCXFCodegen io.swagger.codegen.languages.JavaInflectorServerCodegen io.swagger.codegen.languages.JMeterCodegen io.swagger.codegen.languages.NodeJSServerCodegen diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java index 94ce0519a6a..b2370aef8c2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.java.JavaClientOptionsTest; -import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; +import io.swagger.codegen.languages.JavaJerseyCodegen; import io.swagger.codegen.options.JaxRSServerOptionsProvider; import mockit.Expectations; @@ -11,7 +11,7 @@ import mockit.Tested; public class JaxRSServerOptionsTest extends JavaClientOptionsTest { @Tested - private JavaJaxRSJersey1ServerCodegen clientCodegen; + private JavaJerseyCodegen clientCodegen; public JaxRSServerOptionsTest() { super(new JaxRSServerOptionsProvider()); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java index b5ed5d1653c..3c74b570ec2 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; +import io.swagger.codegen.languages.JavaJerseyCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -26,7 +26,7 @@ public class JaxrsJava8ModelTest { .required("id") .required("name"); - final JavaJaxRSJersey1ServerCodegen codegen = new JavaJaxRSJersey1ServerCodegen(); + final JavaJerseyCodegen codegen = new JavaJerseyCodegen(); codegen.setDateLibrary("java8"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java index 0fe24f04af2..a133f2c3661 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java @@ -1,7 +1,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JavaJaxRSJersey1ServerCodegen; +import io.swagger.codegen.languages.JavaJerseyCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -25,7 +25,7 @@ public class JaxrsJodaModelTest { .required("id") .required("name"); - final JavaJaxRSJersey1ServerCodegen codegen = new JavaJaxRSJersey1ServerCodegen(); + final JavaJerseyCodegen codegen = new JavaJerseyCodegen(); codegen.setDateLibrary("joda"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); From 491f97f7ef2176d3043a8d38a9f52592ae0dd83b Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Fri, 22 Jan 2016 10:46:27 +0100 Subject: [PATCH 07/12] rename codegen names --- .../main/java/io/swagger/codegen/languages/JavaCXFCodegen.java | 2 +- .../java/io/swagger/codegen/languages/JavaJerseyCodegen.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java index 2592e0823c3..0f063e485d0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java @@ -55,7 +55,7 @@ public class JavaCXFCodegen extends AbstractJavaJAXRSServerCodegen @Override public String getName() { - return "cxf"; + return "jaxrs-cxf"; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java index f3a7d9ceda5..2e7d30842b8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java @@ -52,7 +52,7 @@ public class JavaJerseyCodegen extends AbstractJavaJAXRSServerCodegen @Override public String getName() { - return "jaxrs"; + return "jaxrs"; // TODO should be renamed as "jaxrs-jersey" } @Override From 668610f7fc3ae873e36fb2095fa336a0e2ed5672 Mon Sep 17 00:00:00 2001 From: Maelig Nantel Date: Sun, 24 Jan 2016 15:37:22 +0100 Subject: [PATCH 08/12] Include JAX-RS CXF in the readme --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f4dfda85b6b..92f5fad5958 100644 --- a/README.md +++ b/README.md @@ -534,13 +534,22 @@ java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ -o samples/server/petstore/scalatra ``` -### Java JAX-RS +### Java JAX-RS (Jersey v1.18) ``` java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ -i http://petstore.swagger.io/v2/swagger.json \ -l jaxrs \ - -o samples/server/petstore/jaxrs + -o samples/server/petstore/jaxrs-jersey +``` + +### Java JAX-RS (Apache CXF 3) + +``` +java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ + -i http://petstore.swagger.io/v2/swagger.json \ + -l jaxrs-cxf \ + -o samples/server/petstore/jaxrs-cxf ``` ### Java Spring MVC From fc831394836fbe9e1102af65d2ea8835e14347ec Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 25 Jan 2016 01:11:20 +0800 Subject: [PATCH 09/12] resolve minor issue after rebase --- .../swagger/codegen/options/JaxRSServerOptionsProvider.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index 203bc029b19..cccac11b7e5 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -25,10 +25,8 @@ public class JaxRSServerOptionsProvider extends JavaOptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); builder.putAll(options) - .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE); .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) - // .put(JavaJaxRSJersey1ServerCodegen.DATE_LIBRARY, "joda") //java.lang.IllegalArgumentException: Multiple entries with same key: dateLibrary=joda and dateLibrary=joda - + //.put(JavaJaxRSJersey1ServerCodegen.DATE_LIBRARY, "joda") //java.lang.IllegalArgumentException: Multiple entries with same key: dateLibrary=joda and dateLibrary=joda ; return builder.build(); From 741974c1a93e9bb20f358faf3014461afda5a7de Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 25 Jan 2016 22:23:25 +0800 Subject: [PATCH 10/12] add shell script for jaxrs-cxf --- bin/jaxrs-cxf-petstore-server.sh | 31 ++++ .../gen/java/io/swagger/api/PetApi.java | 68 +++++++++ .../gen/java/io/swagger/api/StoreApi.java | 32 ++++ .../gen/java/io/swagger/api/UserApi.java | 54 +++++++ .../gen/java/io/swagger/model/Category.java | 54 +++++++ .../gen/java/io/swagger/model/Order.java | 115 +++++++++++++++ .../gen/java/io/swagger/model/Pet.java | 117 +++++++++++++++ .../gen/java/io/swagger/model/Tag.java | 54 +++++++ .../gen/java/io/swagger/model/User.java | 139 ++++++++++++++++++ 9 files changed, 664 insertions(+) create mode 100755 bin/jaxrs-cxf-petstore-server.sh create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/PetApi.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/StoreApi.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/UserApi.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Category.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Order.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Pet.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Tag.java create mode 100644 samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/User.java diff --git a/bin/jaxrs-cxf-petstore-server.sh b/bin/jaxrs-cxf-petstore-server.sh new file mode 100755 index 00000000000..8049dde5630 --- /dev/null +++ b/bin/jaxrs-cxf-petstore-server.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/JavaJaxRS -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l jaxrs-cxf -o samples/server/petstore/jaxrs-cxf" + +java $JAVA_OPTS -jar $executable $ags diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/PetApi.java new file mode 100644 index 00000000000..62251207319 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/PetApi.java @@ -0,0 +1,68 @@ +package io.swagger.api; + +import io.swagger.model.Pet; +import java.io.File; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; + +@Path("/v2") +public interface PetApi { + @PUT + @Path("/pet") + @Consumes({ "application/json", "application/xml" }) + @Produces({ "application/json", "application/xml" }) + public Response updatePet(Pet body); + @POST + @Path("/pet") + @Consumes({ "application/json", "application/xml" }) + @Produces({ "application/json", "application/xml" }) + public Response addPet(Pet body); + @GET + @Path("/pet/findByStatus") + + @Produces({ "application/json", "application/xml" }) + public Response findPetsByStatus(@QueryParam("status") List status); + @GET + @Path("/pet/findByTags") + + @Produces({ "application/json", "application/xml" }) + public Response findPetsByTags(@QueryParam("tags") List tags); + @GET + @Path("/pet/{petId}") + + @Produces({ "application/json", "application/xml" }) + public Response getPetById(@PathParam("petId") Long petId); + @POST + @Path("/pet/{petId}") + @Consumes({ "application/x-www-form-urlencoded" }) + @Produces({ "application/json", "application/xml" }) + public Response updatePetWithForm(@PathParam("petId") String petId, + @Multipart(value = "name", required = false) String name, + @Multipart(value = "status", required = false) String status); + @DELETE + @Path("/pet/{petId}") + + @Produces({ "application/json", "application/xml" }) + public Response deletePet(@PathParam("petId") Long petId, + @HeaderParam("api_key") String apiKey); + @POST + @Path("/pet/{petId}/uploadImage") + @Consumes({ "multipart/form-data" }) + @Produces({ "application/json", "application/xml" }) + public Response uploadFile(@PathParam("petId") Long petId, + @Multipart(value = "additionalMetadata", required = false) String additionalMetadata, + @Multipart(value = "file", required = false) InputStream fileInputStream, + @Multipart(value = "file" , required = false) Attachment fileDetail); + @GET + @Path("/pet/{petId}?testing_byte_array=true") + + @Produces({ "application/json", "application/xml" }) + public Response getPetByIdWithByteArray(@PathParam("petId") Long petId); + @POST + @Path("/pet?testing_byte_array=true") + @Consumes({ "application/json", "application/xml" }) + @Produces({ "application/json", "application/xml" }) + public Response addPetUsingByteArray(byte[] body); +} + diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/StoreApi.java new file mode 100644 index 00000000000..4738649215d --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/StoreApi.java @@ -0,0 +1,32 @@ +package io.swagger.api; + +import java.util.Map; +import io.swagger.model.Order; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; + +@Path("/v2") +public interface StoreApi { + @GET + @Path("/store/inventory") + + @Produces({ "application/json", "application/xml" }) + public Response getInventory(); + @POST + @Path("/store/order") + + @Produces({ "application/json", "application/xml" }) + public Response placeOrder(Order body); + @GET + @Path("/store/order/{orderId}") + + @Produces({ "application/json", "application/xml" }) + public Response getOrderById(@PathParam("orderId") String orderId); + @DELETE + @Path("/store/order/{orderId}") + + @Produces({ "application/json", "application/xml" }) + public Response deleteOrder(@PathParam("orderId") String orderId); +} + diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/UserApi.java new file mode 100644 index 00000000000..840331009b1 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/api/UserApi.java @@ -0,0 +1,54 @@ +package io.swagger.api; + +import io.swagger.model.User; +import java.util.*; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; + +@Path("/v2") +public interface UserApi { + @POST + @Path("/user") + + @Produces({ "application/json", "application/xml" }) + public Response createUser(User body); + @POST + @Path("/user/createWithArray") + + @Produces({ "application/json", "application/xml" }) + public Response createUsersWithArrayInput(List body); + @POST + @Path("/user/createWithList") + + @Produces({ "application/json", "application/xml" }) + public Response createUsersWithListInput(List body); + @GET + @Path("/user/login") + + @Produces({ "application/json", "application/xml" }) + public Response loginUser(@QueryParam("username") String username, + @QueryParam("password") String password); + @GET + @Path("/user/logout") + + @Produces({ "application/json", "application/xml" }) + public Response logoutUser(); + @GET + @Path("/user/{username}") + + @Produces({ "application/json", "application/xml" }) + public Response getUserByName(@PathParam("username") String username); + @PUT + @Path("/user/{username}") + + @Produces({ "application/json", "application/xml" }) + public Response updateUser(@PathParam("username") String username, + User body); + @DELETE + @Path("/user/{username}") + + @Produces({ "application/json", "application/xml" }) + public Response deleteUser(@PathParam("username") String username); +} + diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Category.java new file mode 100644 index 00000000000..c4dcc713964 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Category.java @@ -0,0 +1,54 @@ +package io.swagger.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlRootElement; + + + +@XmlRootElement(name="Category") +public class Category { + + + private Long id = null; + + private String name = null; + + + /** + **/ + @JsonProperty("id") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @JsonProperty("name") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Category {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Order.java new file mode 100644 index 00000000000..333d1b8b604 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Order.java @@ -0,0 +1,115 @@ +package io.swagger.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; + +import javax.xml.bind.annotation.XmlRootElement; + + + +@XmlRootElement(name="Order") +public class Order { + + + private Long id = null; + + private Long petId = null; + + private Integer quantity = null; + + private Date shipDate = null; + + public enum StatusEnum { + placed, approved, delivered, + }; + private StatusEnum status = null; + + private Boolean complete = null; + + + /** + **/ + @JsonProperty("id") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @JsonProperty("petId") + public Long getPetId() { + return petId; + } + public void setPetId(Long petId) { + this.petId = petId; + } + + + /** + **/ + @JsonProperty("quantity") + public Integer getQuantity() { + return quantity; + } + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + + /** + **/ + @JsonProperty("shipDate") + public Date getShipDate() { + return shipDate; + } + public void setShipDate(Date shipDate) { + this.shipDate = shipDate; + } + + + /** + * Order Status + **/ + @JsonProperty("status") + public StatusEnum getStatus() { + return status; + } + public void setStatus(StatusEnum status) { + this.status = status; + } + + + /** + **/ + @JsonProperty("complete") + public Boolean getComplete() { + return complete; + } + public void setComplete(Boolean complete) { + this.complete = complete; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Order {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" petId: ").append(petId).append("\n"); + sb.append(" quantity: ").append(quantity).append("\n"); + sb.append(" shipDate: ").append(shipDate).append("\n"); + sb.append(" status: ").append(status).append("\n"); + sb.append(" complete: ").append(complete).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Pet.java new file mode 100644 index 00000000000..53fa2ef229d --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Pet.java @@ -0,0 +1,117 @@ +package io.swagger.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.model.Category; +import io.swagger.model.Tag; +import java.util.*; + +import javax.xml.bind.annotation.XmlRootElement; + + + +@XmlRootElement(name="Pet") +public class Pet { + + + private Long id = null; + + private Category category = null; + + private String name = null; + + private List photoUrls = new ArrayList(); + + private List tags = new ArrayList(); + + public enum StatusEnum { + available, pending, sold, + }; + private StatusEnum status = null; + + + /** + **/ + @JsonProperty("id") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @JsonProperty("category") + public Category getCategory() { + return category; + } + public void setCategory(Category category) { + this.category = category; + } + + + /** + **/ + @JsonProperty("name") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + /** + **/ + @JsonProperty("photoUrls") + public List getPhotoUrls() { + return photoUrls; + } + public void setPhotoUrls(List photoUrls) { + this.photoUrls = photoUrls; + } + + + /** + **/ + @JsonProperty("tags") + public List getTags() { + return tags; + } + public void setTags(List tags) { + this.tags = tags; + } + + + /** + * pet status in the store + **/ + @JsonProperty("status") + public StatusEnum getStatus() { + return status; + } + public void setStatus(StatusEnum status) { + this.status = status; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Pet {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" category: ").append(category).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append(" photoUrls: ").append(photoUrls).append("\n"); + sb.append(" tags: ").append(tags).append("\n"); + sb.append(" status: ").append(status).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Tag.java new file mode 100644 index 00000000000..933dda70086 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/Tag.java @@ -0,0 +1,54 @@ +package io.swagger.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlRootElement; + + + +@XmlRootElement(name="Tag") +public class Tag { + + + private Long id = null; + + private String name = null; + + + /** + **/ + @JsonProperty("id") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @JsonProperty("name") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Tag {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" name: ").append(name).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} diff --git a/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/User.java new file mode 100644 index 00000000000..a8da05deac7 --- /dev/null +++ b/samples/server/petstore/jaxrs-cxf/gen/java/io/swagger/model/User.java @@ -0,0 +1,139 @@ +package io.swagger.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlRootElement; + + + +@XmlRootElement(name="User") +public class User { + + + private Long id = null; + + private String username = null; + + private String firstName = null; + + private String lastName = null; + + private String email = null; + + private String password = null; + + private String phone = null; + + private Integer userStatus = null; + + + /** + **/ + @JsonProperty("id") + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + + /** + **/ + @JsonProperty("username") + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + + + /** + **/ + @JsonProperty("firstName") + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + + /** + **/ + @JsonProperty("lastName") + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + + + /** + **/ + @JsonProperty("email") + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + + /** + **/ + @JsonProperty("password") + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + + + /** + **/ + @JsonProperty("phone") + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + + + /** + * User Status + **/ + @JsonProperty("userStatus") + public Integer getUserStatus() { + return userStatus; + } + public void setUserStatus(Integer userStatus) { + this.userStatus = userStatus; + } + + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class User {\n"); + + sb.append(" id: ").append(id).append("\n"); + sb.append(" username: ").append(username).append("\n"); + sb.append(" firstName: ").append(firstName).append("\n"); + sb.append(" lastName: ").append(lastName).append("\n"); + sb.append(" email: ").append(email).append("\n"); + sb.append(" password: ").append(password).append("\n"); + sb.append(" phone: ").append(phone).append("\n"); + sb.append(" userStatus: ").append(userStatus).append("\n"); + sb.append("}\n"); + return sb.toString(); + } +} From 2046580d41083593daa7b4ed6a1c5166add03b40 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 26 Jan 2016 15:23:50 +0800 Subject: [PATCH 11/12] update based on discussion on https://github.com/swagger-api/swagger-codegen/pull/1967/files#r50697083 --- .../io/swagger/codegen/DefaultGenerator.java | 3 +- .../codegen/languages/JavaCXFCodegen.java | 73 ----------- .../codegen/languages/JavaJerseyCodegen.java | 124 ------------------ .../main/resources/JavaJaxRS/cxf/api.mustache | 2 +- .../services/io.swagger.codegen.CodegenConfig | 7 +- .../codegen/jaxrs/JaxRSServerOptionsTest.java | 4 +- .../codegen/jaxrs/JaxrsJava8ModelTest.java | 4 +- .../codegen/jaxrs/JaxrsJodaModelTest.java | 4 +- 8 files changed, 11 insertions(+), 210 deletions(-) delete mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java delete mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 09ea5fb73fc..263adc05cf8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -264,8 +264,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { operation.put("basePath", basePath); operation.put("basePathWithoutHost", basePathWithoutHost); operation.put("contextPath", contextPath); - // operation.put("baseName", tag); FIXME ask @hiveship if this modification cause a problem - operation.put("baseName", basePathWithoutHost); + operation.put("baseName", tag); operation.put("modelPackage", config.modelPackage()); operation.putAll(config.additionalProperties()); operation.put("classname", config.toApiName(tag)); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java deleted file mode 100644 index 0f063e485d0..00000000000 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFCodegen.java +++ /dev/null @@ -1,73 +0,0 @@ - -package io.swagger.codegen.languages; - -import java.io.File; -import java.util.List; -import java.util.Map; - -import io.swagger.codegen.CliOption; -import io.swagger.codegen.CodegenConstants; -import io.swagger.codegen.CodegenOperation; -import io.swagger.models.Operation; - -public class JavaCXFCodegen extends AbstractJavaJAXRSServerCodegen -{ - public JavaCXFCodegen() - { - super(); - - sourceFolder = "src/gen/java"; - invokerPackage = "io.swagger.api"; - artifactId = "swagger-jaxrs-server"; - outputFolder = "generated-code/JavaJaxRS-CXF"; - - modelTemplateFiles.put("model.mustache", ".java"); - apiTemplateFiles.put("api.mustache", ".java"); - apiPackage = "io.swagger.api"; - modelPackage = "io.swagger.model"; - - additionalProperties.put("title", title); - - super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; - - for ( int i = 0; i < cliOptions.size(); i++ ) { - if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { - cliOptions.remove(i); - break; - } - } - - cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); - } - - @Override - public void processOpts() - { - super.processOpts(); - sourceFolder = "gen" + File.separator + "java"; - - modelTemplateFiles.clear(); - modelTemplateFiles.put("entityModel.mustache", ".java"); - - supportingFiles.clear(); - } - - @Override - public String getName() - { - return "jaxrs-cxf"; - } - - - @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 String getHelp() - { - return "Generates a Java JAXRS Server application based on Apache CXF framework."; - } -} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java deleted file mode 100644 index 2e7d30842b8..00000000000 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyCodegen.java +++ /dev/null @@ -1,124 +0,0 @@ -package io.swagger.codegen.languages; - -import io.swagger.codegen.*; -import io.swagger.models.Operation; - -import java.io.File; -import java.util.*; - -public class JavaJerseyCodegen extends AbstractJavaJAXRSServerCodegen -{ - - public JavaJerseyCodegen() - { - super(); - - sourceFolder = "src/gen/java"; - invokerPackage = "io.swagger.api"; - artifactId = "swagger-jaxrs-server"; - outputFolder = "generated-code/JavaJaxRS-Jersey"; - - modelTemplateFiles.put("model.mustache", ".java"); - apiTemplateFiles.put("api.mustache", ".java"); - apiTemplateFiles.put("apiService.mustache", ".java"); - apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); - apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); - apiPackage = "io.swagger.api"; - modelPackage = "io.swagger.model"; - - additionalProperties.put("title", title); - - embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; - - for ( int i = 0; i < cliOptions.size(); i++ ) { - if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { - cliOptions.remove(i); - break; - } - } - - CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); - library.setDefault(DEFAULT_LIBRARY); - - Map supportedLibraries = new LinkedHashMap(); - - supportedLibraries.put(DEFAULT_LIBRARY, "Jersey core 1.18.1"); - library.setEnum(supportedLibraries); - - cliOptions.add(library); - cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); - } - - @Override - public String getName() - { - return "jaxrs"; // TODO should be renamed as "jaxrs-jersey" - } - - @Override - public String getHelp() - { - return "Generates a Java JAXRS Server application based on Jersey framework."; - } - - @Override - public void processOpts() - { - super.processOpts(); - - if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { - implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); - } - - supportingFiles.clear(); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); - supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); - supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); - supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); - supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); - supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); - - if ( additionalProperties.containsKey("dateLibrary") ) { - setDateLibrary(additionalProperties.get("dateLibrary").toString()); - additionalProperties.put(dateLibrary, "true"); - } - - if ( "joda".equals(dateLibrary) ) { - supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); - } else if ( "java8".equals(dateLibrary) ) { - supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); - supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); - } - } - - @Override - public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { - String basePath = resourcePath; - if (basePath.startsWith("/")) { - basePath = basePath.substring(1); - } - int pos = basePath.indexOf("/"); - if (pos > 0) { - basePath = basePath.substring(0, pos); - } - - if (basePath == "") { - basePath = "default"; - } else { - if (co.path.startsWith("/" + basePath)) { - co.path = co.path.substring(("/" + basePath).length()); - } - co.subresourceOperation = !co.path.isEmpty(); - } - List opList = operations.get(basePath); - if (opList == null) { - opList = new ArrayList(); - operations.put(basePath, opList); - } - opList.add(co); - co.baseName = basePath; - } -} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache index c49958f27bb..869d1aa63de 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf/api.mustache @@ -6,7 +6,7 @@ package {{package}}; import javax.ws.rs.*; import javax.ws.rs.core.Response; -@Path("{{baseName}}") +@Path("{{contextPath}}") public interface {{classname}} { {{#operations}} {{#operation}} 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 5a0d5372208..18015a9328b 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 @@ -6,11 +6,10 @@ io.swagger.codegen.languages.FlashClientCodegen io.swagger.codegen.languages.FlaskConnexionCodegen io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.JavaClientCodegen -io.swagger.codegen.languages.JavascriptClientCodegen -io.swagger.codegen.languages.JavaClientCodegen -io.swagger.codegen.languages.JavaJerseyCodegen -io.swagger.codegen.languages.JavaCXFCodegen +io.swagger.codegen.languages.JavaJerseyServerCodegen +io.swagger.codegen.languages.JavaCXFServerCodegen io.swagger.codegen.languages.JavaInflectorServerCodegen +io.swagger.codegen.languages.JavascriptClientCodegen io.swagger.codegen.languages.JMeterCodegen io.swagger.codegen.languages.NodeJSServerCodegen io.swagger.codegen.languages.ObjcClientCodegen diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java index b2370aef8c2..241846dbb88 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.java.JavaClientOptionsTest; -import io.swagger.codegen.languages.JavaJerseyCodegen; +import io.swagger.codegen.languages.JavaJerseyServerCodegen; import io.swagger.codegen.options.JaxRSServerOptionsProvider; import mockit.Expectations; @@ -11,7 +11,7 @@ import mockit.Tested; public class JaxRSServerOptionsTest extends JavaClientOptionsTest { @Tested - private JavaJerseyCodegen clientCodegen; + private JavaJerseyServerCodegen clientCodegen; public JaxRSServerOptionsTest() { super(new JaxRSServerOptionsProvider()); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java index 3c74b570ec2..34c91e28335 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJava8ModelTest.java @@ -2,7 +2,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JavaJerseyCodegen; +import io.swagger.codegen.languages.JavaJerseyServerCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -26,7 +26,7 @@ public class JaxrsJava8ModelTest { .required("id") .required("name"); - final JavaJerseyCodegen codegen = new JavaJerseyCodegen(); + final JavaJerseyServerCodegen codegen = new JavaJerseyServerCodegen(); codegen.setDateLibrary("java8"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java index a133f2c3661..8c71c51418c 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxrsJodaModelTest.java @@ -1,7 +1,7 @@ package io.swagger.codegen.jaxrs; import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.languages.JavaJerseyCodegen; +import io.swagger.codegen.languages.JavaJerseyServerCodegen; import io.swagger.models.Model; import io.swagger.models.ModelImpl; import io.swagger.models.properties.DateProperty; @@ -25,7 +25,7 @@ public class JaxrsJodaModelTest { .required("id") .required("name"); - final JavaJerseyCodegen codegen = new JavaJerseyCodegen(); + final JavaJerseyServerCodegen codegen = new JavaJerseyServerCodegen(); codegen.setDateLibrary("joda"); codegen.processOpts(); final CodegenModel cm = codegen.fromModel("sample", model); From 2e0047cf8611874df06539ab6d636d8540df1b07 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 26 Jan 2016 15:34:43 +0800 Subject: [PATCH 12/12] rename jarxs generator --- .../languages/JavaCXFServerCodegen.java | 73 +++++++++++ .../languages/JavaJerseyServerCodegen.java | 124 ++++++++++++++++++ 2 files changed, 197 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java 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 new file mode 100644 index 00000000000..692168c1a40 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java @@ -0,0 +1,73 @@ + +package io.swagger.codegen.languages; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CodegenOperation; +import io.swagger.models.Operation; + +public class JavaCXFServerCodegen extends AbstractJavaJAXRSServerCodegen +{ + public JavaCXFServerCodegen() + { + super(); + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-server"; + outputFolder = "generated-code/JavaJaxRS-CXF"; + + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + additionalProperties.put("title", title); + + super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; + + for ( int i = 0; i < cliOptions.size(); i++ ) { + if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { + cliOptions.remove(i); + break; + } + } + + cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + } + + @Override + public void processOpts() + { + super.processOpts(); + sourceFolder = "gen" + File.separator + "java"; + + modelTemplateFiles.clear(); + modelTemplateFiles.put("entityModel.mustache", ".java"); + + supportingFiles.clear(); + } + + @Override + public String getName() + { + return "jaxrs-cxf"; + } + + + @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 String getHelp() + { + return "Generates a Java JAXRS Server application based on Apache CXF framework."; + } +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java new file mode 100644 index 00000000000..61d14d692f1 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java @@ -0,0 +1,124 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.Operation; + +import java.io.File; +import java.util.*; + +public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen +{ + + public JavaJerseyServerCodegen() + { + super(); + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-server"; + outputFolder = "generated-code/JavaJaxRS-Jersey"; + + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + apiTemplateFiles.put("apiService.mustache", ".java"); + apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); + apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + additionalProperties.put("title", title); + + embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "jersey1_18"; + + for ( int i = 0; i < cliOptions.size(); i++ ) { + if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { + cliOptions.remove(i); + break; + } + } + + CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); + library.setDefault(DEFAULT_LIBRARY); + + Map supportedLibraries = new LinkedHashMap(); + + supportedLibraries.put(DEFAULT_LIBRARY, "Jersey core 1.18.1"); + library.setEnum(supportedLibraries); + + cliOptions.add(library); + cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + } + + @Override + public String getName() + { + return "jaxrs"; // TODO should be renamed as "jaxrs-jersey" + } + + @Override + public String getHelp() + { + return "Generates a Java JAXRS Server application based on Jersey framework."; + } + + @Override + public void processOpts() + { + super.processOpts(); + + if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { + implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); + } + + supportingFiles.clear(); + supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); + supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); + supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); + supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); + supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); + supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); + + if ( additionalProperties.containsKey("dateLibrary") ) { + setDateLibrary(additionalProperties.get("dateLibrary").toString()); + additionalProperties.put(dateLibrary, "true"); + } + + if ( "joda".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } else if ( "java8".equals(dateLibrary) ) { + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + } + } + + @Override + public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { + String basePath = resourcePath; + if (basePath.startsWith("/")) { + basePath = basePath.substring(1); + } + int pos = basePath.indexOf("/"); + if (pos > 0) { + basePath = basePath.substring(0, pos); + } + + if (basePath == "") { + basePath = "default"; + } else { + if (co.path.startsWith("/" + basePath)) { + co.path = co.path.substring(("/" + basePath).length()); + } + co.subresourceOperation = !co.path.isEmpty(); + } + List opList = operations.get(basePath); + if (opList == null) { + opList = new ArrayList(); + operations.put(basePath, opList); + } + opList.add(co); + co.baseName = basePath; + } +}