Compare commits

...

11 Commits

Author SHA1 Message Date
sullis
4a9c6ffe62 remove unused import 2022-05-05 14:10:09 -07:00
sullis
8348a00db9 unit test: jersey2, jersey3 2022-05-05 14:10:09 -07:00
sullis
7fc9d73b13 regenerate samples and docs 2022-05-05 14:10:09 -07:00
sullis
4bfe8045a9 fix JaxRsType CLASSIC base package 2022-05-05 14:10:09 -07:00
sullis
f60d0e2efa regenerate docs and samples 2022-05-05 14:10:09 -07:00
sullis
50c7917d92 introduce property: jaxrsBasePackage 2022-05-05 14:10:09 -07:00
sullis
49d21c4d7a maven-compiler-plugin 3.10.1 2022-05-05 14:10:09 -07:00
sullis
204fd645c8 add: testJersey3 2022-05-05 14:10:09 -07:00
sullis
a703c58f65 maven plugin it jaxrs-jersey3 2022-05-05 14:10:09 -07:00
sullis
9f8c1249b9 add mustache templates for jersey3 2022-05-05 14:10:09 -07:00
sullis
99bfefab8c [java] JAX-RS jersey3 2022-05-05 14:10:09 -07:00
50 changed files with 383 additions and 128 deletions

View File

@ -47,7 +47,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|implicitHeadersRegex|Skip header parameters that matches given regex in the generated API methods using @ApiImplicitParams annotation. Note: this parameter is ignored when implicitHeaders=true| |null|
|invokerPackage|root package for generated code| |org.openapitools.api|
|legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C#have this enabled by default).|<dl><dt>**true**</dt><dd>The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.</dd><dt>**false**</dt><dd>The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.</dd></dl>|true|
|library|library template (sub-template)|<dl><dt>**jersey1**</dt><dd>Jersey core 1.x</dd><dt>**jersey2**</dt><dd>Jersey core 2.x</dd></dl>|jersey2|
|library|library template (sub-template)|<dl><dt>**jersey1**</dt><dd>Jersey core 1.x</dd><dt>**jersey2**</dt><dd>Jersey core 2.x</dd><dt>**jersey3**</dt><dd>Jersey core 3.x</dd></dl>|jersey2|
|licenseName|The name of the license| |Unlicense|
|licenseUrl|The URL of the license| |http://unlicense.org|
|modelPackage|package for generated models| |org.openapitools.model|

View File

@ -0,0 +1,3 @@
invoker.goals = -nsu clean generate-sources
# The expected result of the build, possible values are "success" (default) and "failure"
invoker.buildResult = success

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech)
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openapitools.maven.its</groupId>
<artifactId>jaxrs-jersey3</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<configuration>
<inputSpec>https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml</inputSpec>
<generatorName>jaxrs-jersey</generatorName>
<library>jersey3</library>
<dateLibrary>java8</dateLibrary>
<output>${basedir}/out</output>
<templateDirectory>${project.basedir}/templates</templateDirectory>
<configOptions>
</configOptions>
</configuration>
<executions>
<execution>
<id>remote</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,21 @@
# TEST TEST TEST
# {{artifactId}}
{{appName}}
- API version: {{appVersion}}
{{^hideGenerationTimestamp}}
- Build date: {{generatedDate}}
{{/hideGenerationTimestamp}}
{{#appDescriptionWithNewLines}}{{{appDescriptionWithNewLines}}}{{/appDescriptionWithNewLines}}
{{#infoUrl}}
For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}})
{{/infoUrl}}
*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)*
… etc.

View File

@ -0,0 +1,37 @@
/*
* Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
File readme = new File(basedir, "out/README.md")
assert readme.isFile()
assert readme.text.contains("# TEST TEST TEST")
assert readme.text.contains("# openapi-jaxrs-server")
assert readme.text.contains("OpenAPI Petstore")
File mavenPomXml = new File(basedir, "out/pom.xml")
assert mavenPomXml.isFile()
File petApi = new File(basedir, "out/src/gen/java/org/openapitools/api/PetApi.java")
assert petApi.isFile()
assert petApi.text.contains("import org.openapitools.api.PetApiService;")
File petApiService = new File(basedir, "out/src/gen/java/org/openapitools/api/PetApiService.java")
assert petApiService.isFile()
assert petApiService.text.contains("import jakarta.ws.rs.core.Response;")
File petModel = new File(basedir, "out/src/gen/java/org/openapitools/model/Pet.java")
assert petModel.isFile()
assert petModel.text.contains("public class Pet")

View File

@ -37,8 +37,24 @@ import java.util.*;
public abstract class AbstractJavaJAXRSServerCodegen extends AbstractJavaCodegen implements BeanValidationFeatures {
public static final String SERVER_PORT = "serverPort";
public static final String JAXRS_BASE_PACKAGE = "jaxrsBasePackage";
public static final String USE_TAGS = "useTags";
enum JaxRsType {
CLASSIC ("javax.ws.rs"),
JAKARTA ("jakarta.ws.rs");
private String basePackage;
JaxRsType(String basePackage) {
this.basePackage = basePackage;
}
public String getBasePackage() {
return this.basePackage;
}
}
/**
* Name of the sub-directory in "src/main/resource" where to find the
* Mustache template for the JAX-RS Codegen.
@ -49,6 +65,8 @@ public abstract class AbstractJavaJAXRSServerCodegen extends AbstractJavaCodegen
protected String title = "OpenAPI Server";
protected String serverPort = "8080";
protected JaxRsType jaxrsType = JaxRsType.CLASSIC;
protected boolean useBeanValidation = true;
protected boolean useTags = false;
@ -139,6 +157,8 @@ public abstract class AbstractJavaJAXRSServerCodegen extends AbstractJavaCodegen
}
*/
this.additionalProperties.put(JAXRS_BASE_PACKAGE, jaxrsType.getBasePackage());
if (!this.additionalProperties.containsKey(SERVER_PORT)) {
URL url = URLPathUtils.getServerURL(openAPI, serverVariableOverrides());
// 8080 is the default value for a JEE Server:

View File

@ -30,6 +30,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
protected static final String LIBRARY_JERSEY1 = "jersey1";
protected static final String LIBRARY_JERSEY2 = "jersey2";
protected static final String LIBRARY_JERSEY3 = "jersey3";
/**
* Default library template to use. (Default: jersey2)
@ -59,6 +60,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
CliOption library = new CliOption(CodegenConstants.LIBRARY, CodegenConstants.LIBRARY_DESC).defaultValue(DEFAULT_JERSEY_LIBRARY);
supportedLibraries.put(LIBRARY_JERSEY1, "Jersey core 1.x");
supportedLibraries.put(LIBRARY_JERSEY2, "Jersey core 2.x");
supportedLibraries.put(LIBRARY_JERSEY3, "Jersey core 3.x");
library.setEnum(supportedLibraries);
cliOptions.add(library);
@ -101,6 +103,10 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen {
setLibrary(DEFAULT_JERSEY_LIBRARY);
}
if (LIBRARY_JERSEY3.equals(library)) {
jaxrsType = JaxRsType.JAKARTA;
}
if (additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER)) {
implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER);
}

View File

@ -4,13 +4,13 @@ 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 {{jaxrsBasePackage}}.QueryParam;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.Response.Status;
import {{jaxrsBasePackage}}.core.UriInfo;
import {{jaxrsBasePackage}}.ext.Provider;
import org.joda.time.DateTime;
import java.util.List;

View File

@ -4,13 +4,13 @@ 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 {{jaxrsBasePackage}}.QueryParam;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.Response.Status;
import {{jaxrsBasePackage}}.core.UriInfo;
import {{jaxrsBasePackage}}.ext.Provider;
import org.joda.time.LocalDate;
import java.util.List;

View File

@ -20,10 +20,10 @@ import org.glassfish.jersey.media.multipart.FormDataParam;
import org.glassfish.jersey.media.multipart.FormDataBodyPart;
import javax.servlet.ServletConfig;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.*;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
import {{jaxrsBasePackage}}.*;
{{#useBeanValidation}}
import javax.validation.constraints.*;
import javax.validation.Valid;
@ -60,7 +60,7 @@ public class {{classname}} {
}
{{#operation}}
@javax.ws.rs.{{httpMethod}}
@{{jaxrsBasePackage}}.{{httpMethod}}
{{#subresourceOperation}}@Path("{{{path}}}"){{/subresourceOperation}}
{{#hasConsumes}}@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}
{{#hasProduces}}@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}

View File

@ -13,8 +13,8 @@ import {{package}}.NotFoundException;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{#useBeanValidation}}
import javax.validation.constraints.*;
{{/useBeanValidation}}

View File

@ -13,8 +13,8 @@ import java.io.InputStream;
import org.glassfish.jersey.media.multipart.FormDataBodyPart;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{#useBeanValidation}}
import javax.validation.constraints.*;
{{/useBeanValidation}}

View File

@ -1,7 +1,7 @@
package {{invokerPackage}};
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import {{jaxrsBasePackage}}.ApplicationPath;
import {{jaxrsBasePackage}}.core.Application;
@ApplicationPath("{{{contextPath}}}")
public class RestApplication extends Application {

View File

@ -4,10 +4,10 @@ package {{package}};
{{/imports}}
import {{package}}.{{classname}}Service;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

View File

@ -13,8 +13,8 @@ import java.util.List;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{>generatedAnnotation}}
{{#operations}}

View File

@ -13,8 +13,8 @@ import java.util.List;
import java.io.InputStream;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
@RequestScoped
{{>generatedAnnotation}}

View File

@ -5,8 +5,8 @@ import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path;
import {{jaxrsBasePackage}}.HttpMethod;
import {{jaxrsBasePackage}}.Path;
import org.apache.cxf.jaxrs.ext.ResourceComparator;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;

View File

@ -7,9 +7,9 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.MediaType;
import org.apache.cxf.jaxrs.ext.multipart.*;
import io.swagger.annotations.Api;

View File

@ -17,8 +17,8 @@ import org.openapitools.codegen.utils.JsonCache;
import org.openapitools.codegen.utils.JsonCache.CacheException;
{{/loadTestDataFromFile}}
{{/generateOperationBody}}
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Response;
import org.apache.cxf.jaxrs.model.wadl.Description;
import org.apache.cxf.jaxrs.model.wadl.DocTarget;

View File

@ -8,8 +8,8 @@ import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.core.MediaType;
import {{jaxrsBasePackage}}.core.Response;
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.apache.cxf.jaxrs.client.ClientConfiguration;
import org.apache.cxf.jaxrs.client.WebClient;

View File

@ -5,8 +5,8 @@ import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path;
import {{jaxrsBasePackage}}.HttpMethod;
import {{jaxrsBasePackage}}.Path;
import org.apache.cxf.jaxrs.ext.ResourceComparator;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;

View File

@ -7,9 +7,9 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.MediaType;
import org.apache.cxf.jaxrs.ext.multipart.*;
import io.swagger.annotations.Api;

View File

@ -8,8 +8,8 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Response;
import org.apache.cxf.jaxrs.model.wadl.Description;
import org.apache.cxf.jaxrs.model.wadl.DocTarget;

View File

@ -8,7 +8,7 @@ import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.*;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.core.Response;
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.apache.cxf.jaxrs.client.ClientConfiguration;
import org.apache.cxf.jaxrs.client.WebClient;

View File

@ -8,9 +8,9 @@ import com.fasterxml.jackson.datatype.jsr310.*;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.Produces;
import {{jaxrsBasePackage}}.core.MediaType;
import {{jaxrsBasePackage}}.ext.Provider;
@Provider
@Produces({MediaType.APPLICATION_JSON})

View File

@ -4,13 +4,13 @@ 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 {{jaxrsBasePackage}}.QueryParam;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.Response.Status;
import {{jaxrsBasePackage}}.core.UriInfo;
import {{jaxrsBasePackage}}.ext.Provider;
import java.time.LocalDate;
import java.util.List;

View File

@ -4,13 +4,13 @@ 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 {{jaxrsBasePackage}}.QueryParam;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.Response.Status;
import {{jaxrsBasePackage}}.core.UriInfo;
import {{jaxrsBasePackage}}.ext.Provider;
import java.time.OffsetDateTime;
import java.util.List;

View File

@ -19,10 +19,10 @@ import java.io.InputStream;
import com.sun.jersey.multipart.FormDataParam;
import com.sun.jersey.multipart.FormDataBodyPart;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.*;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
import {{jaxrsBasePackage}}.*;
{{#useBeanValidation}}
import javax.validation.constraints.*;
import javax.validation.Valid;

View File

@ -16,8 +16,8 @@ import java.io.InputStream;
import com.sun.jersey.multipart.FormDataParam;
import com.sun.jersey.multipart.FormDataBodyPart;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{#useBeanValidation}}
import javax.validation.constraints.*;
{{/useBeanValidation}}

View File

@ -16,8 +16,8 @@ import java.io.InputStream;
import com.sun.jersey.multipart.FormDataParam;
import com.sun.jersey.multipart.FormDataBodyPart;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{#useBeanValidation}}
import javax.validation.constraints.*;
{{/useBeanValidation}}

View File

@ -1,8 +1,8 @@
package {{apiPackage}};
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.LocalDate;

View File

@ -1,8 +1,8 @@
package {{apiPackage}};
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.OffsetDateTime;

View File

@ -0,0 +1,28 @@
package {{apiPackage}};
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.LocalDate;
@Provider
public class LocalDateProvider implements ParamConverterProvider {
public <T> ParamConverter<T> getConverter(Class<T> clazz, Type type, Annotation[] annotations) {
if (clazz.getName().equals(LocalDate.class.getName())) {
return new ParamConverter<T>() {
@SuppressWarnings("unchecked")
public T fromString(String value) {
return value!=null ? (T) LocalDate.parse(value) : null;
}
public String toString(T bean) {
return bean!=null ? bean.toString() : "";
}
};
}
return null;
}
}

View File

@ -0,0 +1,28 @@
package {{apiPackage}};
import jakarta.ws.rs.ext.ParamConverter;
import jakarta.ws.rs.ext.ParamConverterProvider;
import jakarta.ws.rs.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.OffsetDateTime;
@Provider
public class OffsetDateTimeProvider implements ParamConverterProvider {
public <T> ParamConverter<T> getConverter(Class<T> clazz, Type type, Annotation[] annotations) {
if (clazz.getName().equals(OffsetDateTime.class.getName())) {
return new ParamConverter<T>() {
@SuppressWarnings("unchecked")
public T fromString(String value) {
return value != null ? (T) OffsetDateTime.parse(value) : null;
}
public String toString(T bean) {
return bean != null ? bean.toString() : "";
}
};
}
return null;
}
}

View File

@ -3,8 +3,8 @@ package {{invokerPackage}};
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ContextResolver;
import {{jaxrsBasePackage}}.ext.Provider;
import java.io.IOException;
@Provider

View File

@ -1,13 +1,13 @@
package {{apiPackage}};
import org.joda.time.DateTime;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Response;
@Provider

View File

@ -1,13 +1,13 @@
package {{apiPackage}};
import org.joda.time.LocalDate;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.WebApplicationException;
import {{jaxrsBasePackage}}.core.Response;
@Provider

View File

@ -1,9 +1,9 @@
package {{apiPackage}};
import java.time.LocalDate;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

View File

@ -1,9 +1,9 @@
package {{apiPackage}};
import java.time.OffsetDateTime;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.ext.ParamConverter;
import {{jaxrsBasePackage}}.ext.ParamConverterProvider;
import {{jaxrsBasePackage}}.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

View File

@ -1,7 +1,7 @@
package {{invokerPackage}};
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import {{jaxrsBasePackage}}.ApplicationPath;
import {{jaxrsBasePackage}}.core.Application;
@ApplicationPath("{{{contextPath}}}")
public class RestApplication extends Application {

View File

@ -15,10 +15,10 @@ import {{package}}.NotFoundException;
import java.io.InputStream;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.*;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
import {{jaxrsBasePackage}}.*;
import javax.inject.Inject;
{{#useBeanValidation}}

View File

@ -13,8 +13,8 @@ import {{package}}.NotFoundException;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{>generatedAnnotation}}
{{#operations}}

View File

@ -14,8 +14,8 @@ import {{package}}.NotFoundException;
import java.io.InputStream;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
@RequestScoped
{{>generatedAnnotation}}

View File

@ -1,9 +1,9 @@
package {{invokerPackage}};
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import {{jaxrsBasePackage}}.Produces;
import {{jaxrsBasePackage}}.core.MediaType;
import {{jaxrsBasePackage}}.ext.ContextResolver;
import {{jaxrsBasePackage}}.ext.Provider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@ -1,7 +1,7 @@
package {{invokerPackage}};
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import {{jaxrsBasePackage}}.ApplicationPath;
import {{jaxrsBasePackage}}.core.Application;
import java.util.Set;
import java.util.HashSet;

View File

@ -13,10 +13,10 @@ import java.util.Map;
import java.io.InputStream;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.*;
import {{jaxrsBasePackage}}.core.Context;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
import {{jaxrsBasePackage}}.*;
{{#useBeanValidation}}
import javax.validation.constraints.*;
import javax.validation.Valid;

View File

@ -12,8 +12,8 @@ import java.util.List;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import {{jaxrsBasePackage}}.core.Response;
import {{jaxrsBasePackage}}.core.SecurityContext;
{{>generatedAnnotation}}
{{#operations}}

View File

@ -1,7 +1,7 @@
package {{invokerPackage}};
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import {{jaxrsBasePackage}}.ApplicationPath;
import {{jaxrsBasePackage}}.core.Application;
@ApplicationPath("{{{contextPath}}}")
public class RestApplication extends Application {

View File

@ -3,8 +3,8 @@ package {{package}};
{{#imports}}import {{import}};
{{/imports}}
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import {{jaxrsBasePackage}}.*;
import {{jaxrsBasePackage}}.core.Response;
{{#useSwaggerAnnotations}}
import io.swagger.annotations.*;

View File

@ -3,6 +3,7 @@ package org.openapitools.codegen.java.jaxrs;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
@ -24,6 +25,8 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.openapitools.codegen.TestUtils.assertFileContains;
import static org.openapitools.codegen.TestUtils.assertFileNotContains;
import static org.testng.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
@ -31,6 +34,7 @@ import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -47,6 +51,7 @@ public class JavaJerseyServerCodegenTest extends JavaJaxrsBaseTest {
Assert.assertEquals(codegen.getName(), "jaxrs-jersey");
Assert.assertEquals(codegen.getTemplatingEngine().getClass(), MustacheEngineAdapter.class);
Assert.assertEquals(codegen.getDateLibrary(), "legacy");
Assert.assertEquals(codegen.supportedLibraries().keySet(), ImmutableSet.of("jersey1", "jersey2", "jersey3"));
Assert.assertNull(codegen.getInputSpec());
codegen.processOpts();
@ -127,17 +132,57 @@ public class JavaJerseyServerCodegenTest extends JavaJaxrsBaseTest {
final DefaultGenerator generator = new DefaultGenerator();
final List<File> files = generator.opts(input).generate();
Assert.assertTrue(files.size() > 0);
assertTrue(files.size() > 0);
for (File file : files) {
Assert.assertTrue(file.exists());
Assert.assertTrue(file.isFile());
}
TestUtils.validateJavaSourceFiles(files);
TestUtils.validatePomXmlFiles(files);
return files.stream().collect(Collectors.toMap(e -> e.getName().replace(outputPath, ""), i -> i));
}
@Test
public void testJersey2() throws Exception {
codegen.setLibrary("jersey2");
codegen.setDateLibrary("java8");
final Map<String, File> files = generateFiles(codegen, "src/test/resources/3_0/petstore.yaml");
files.values()
.stream()
.filter(file -> file.getName().endsWith(".java"))
.forEach(file -> {
// Jersey2 uses "javax.ws.rs"
// Let's confirm that "jakarta.ws" is not present
assertFileNotContains(file.toPath(), "jakarta.ws");
});
}
@Test
public void testJersey3() throws Exception {
codegen.setLibrary("jersey3");
codegen.setDateLibrary("java8");
final Map<String, File> files = generateFiles(codegen, "src/test/resources/3_0/petstore.yaml");
files.values()
.stream()
.filter(file -> file.getName().endsWith(".java"))
.forEach(file -> {
// Jersey3 uses "jakarta.ws.rs"
// Let's confirm that "javax.ws" is not present
assertFileNotContains(file.toPath(), "javax.ws");
});
}
@DataProvider(name = "codegenParameterMatrix")
public Object[][] codegenParameterMatrix() {
final Set<String> libraries = new JavaJerseyServerCodegen().supportedLibraries().keySet();
final List<Object[]> rows = new ArrayList<Object[]>();
for (final String jerseyLibrary: ImmutableList.of("jersey1", "jersey2")) {
for (final String jerseyLibrary: libraries) {
for (final String dateLibrary: ImmutableList.of("joda", "java8")) {
rows.add(new Object[] { jerseyLibrary, dateLibrary });
}