From 40400e365749737d51a7be8a403a84572476d183 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 2 Feb 2016 00:27:08 +0600 Subject: [PATCH] update supporting JodaTime and Java8 DateTime --- .../languages/JavaResteasyServerCodegen.java | 3 + .../resteasy3_0_11/JacksonConfig.mustache | 47 ++++++++++++++ .../JodaDateTimeProvider.mustache | 64 +++++++++---------- .../JodaLocalDateProvider.mustache | 64 +++++++++---------- .../resteasy3_0_11/LocalDateProvider.mustache | 56 +++++++--------- .../LocalDateTimeProvider.mustache | 56 +++++++--------- .../JavaJaxRS/resteasy3_0_11/gradle.mustache | 5 +- 7 files changed, 162 insertions(+), 133 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java index 8831c8f1a26..f846790614f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java @@ -121,6 +121,9 @@ public class JavaResteasyServerCodegen extends JavaClientCodegen implements Code importMapping.put("LocalDate", "org.joda.time.LocalDate"); importMapping.put("DateTime", "org.joda.time.DateTime"); + supportingFiles.add(new SupportingFile("JacksonConfig.mustache", + (sourceFolder + '/' + invokerPackage).replace(".", "/"), "JacksonConfig.java")); + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache new file mode 100644 index 00000000000..f2caa6c8331 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache @@ -0,0 +1,47 @@ +package {{invokerPackage}}; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.datatype.joda.JodaModule; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.format.ISODateTimeFormat; + +import javax.ws.rs.ext.ContextResolver; +import javax.ws.rs.ext.Provider; +import java.io.IOException; + +@Provider +public class JacksonConfig implements ContextResolver { + private final ObjectMapper objectMapper; + + public JacksonConfig() throws Exception { + + objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JodaModule() { + { + addSerializer(DateTime.class, new StdSerializer(DateTime.class) { + @Override + public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { + jgen.writeString(ISODateTimeFormat.dateTimeNoMillis().print(value)); + } + }); + addSerializer(LocalDate.class, new StdSerializer(LocalDate.class) { + @Override + public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { + jgen.writeString(ISODateTimeFormat.date().print(value)); + } + }); + + } + }); + } + + @Override + public ObjectMapper getContext(Class arg0) { + return objectMapper; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache index f9421790983..8010eb85f93 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache @@ -1,44 +1,42 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import org.joda.time.DateTime; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + @Provider -public class JodaDateTimeProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class JodaDateTimeProvider implements ParamConverterProvider { - public JodaDateTimeProvider(@Context UriInfo uriInfo) { - super(DateTime.class); - this.uriInfo = uriInfo; + public static class JodaDateTimeConverter implements ParamConverter { + + @Override + public DateTime fromString(String string) { + try { + DateTime dateTime = DateTime.parse(string); + return dateTime; + } catch (Exception e) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST). + entity(string + " must be valid DateTime").build()); + } + } + + @Override + public String toString(DateTime t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public DateTime getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return DateTime.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (DateTime.class.equals(type)) { + return (ParamConverter) new JodaDateTimeConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache index 7bd4027e63d..6227bf6df27 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache @@ -1,44 +1,42 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import org.joda.time.LocalDate; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + @Provider -public class JodaLocalDateProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class JodaLocalDateProvider implements ParamConverterProvider { - public JodaLocalDateProvider(@Context UriInfo uriInfo) { - super(LocalDate.class); - this.uriInfo = uriInfo; + public static class JodaLocalDateConverter implements ParamConverter { + + @Override + public LocalDate fromString(String string) { + try { + LocalDate localDate = LocalDate.parse(string); + return localDate; + } catch (Exception e) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST). + entity(string + " must be valid LocalDate").build()); + } + } + + @Override + public String toString(LocalDate t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDate getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDate.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDate.class.equals(type)) { + return (ParamConverter) new JodaLocalDateConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache index 8c4cd4cbd15..cf52264a1f4 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache @@ -1,44 +1,34 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import java.time.LocalDate; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; @Provider -public class LocalDateProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class LocalDateProvider implements ParamConverterProvider { - public LocalDateProvider(@Context UriInfo uriInfo) { - super(LocalDate.class); - this.uriInfo = uriInfo; + public static class LocalDateConverter implements ParamConverter { + + @Override + public LocalDate fromString(String string) { + LocalDate localDate = LocalDate.parse(string); + return localDate; + } + + @Override + public String toString(LocalDate t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDate getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDate.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDate.class.equals(type)) { + return (ParamConverter) new LocalDateConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache index 93bb6f19d50..591b410b275 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache @@ -1,44 +1,34 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import java.time.LocalDateTime; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; @Provider -public class LocalDateTimeProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class LocalDateTimeProvider implements ParamConverterProvider { - public LocalDateTimeProvider(@Context UriInfo uriInfo) { - super(LocalDateTime.class); - this.uriInfo = uriInfo; + public static class LocalDateTimeConverter implements ParamConverter { + + @Override + public LocalDateTime fromString(String string) { + LocalDate localDateTime = LocalDateTime.parse(string); + return localDateTime; + } + + @Override + public String toString(LocalDateTime t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDateTime getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDateTime.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDateTime.class.equals(type)) { + return (ParamConverter) new LocalDateTimeConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache index be2097d48c2..06b1a1d0d78 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache @@ -5,12 +5,15 @@ repositories { } dependencies { - compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0' providedCompile 'org.jboss.resteasy:resteasy-jaxrs:3.0.11.Final' providedCompile 'org.jboss.resteasy:jaxrs-api:3.0.11.Final' providedCompile 'org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final' providedCompile 'javax.annotation:javax.annotation-api:1.2' providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final' + compile 'org.jboss.resteasy:resteasy-jackson2-provider:3.0.11.Final' + +// compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.1' +// compile 'joda-time:joda-time:2.7' testCompile 'junit:junit:4.12', 'org.hamcrest:hamcrest-core:1.3'