[Java] remove samples & replace them with file asserts (#11773)

This commit is contained in:
Oleh Kurpiak 2022-03-03 13:58:03 +02:00 committed by GitHub
parent 00ec168536
commit 3656ec5260
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 700 additions and 1546 deletions

View File

@ -34,11 +34,9 @@ jobs:
- samples/server/petstore/jaxrs-resteasy/eap-joda - samples/server/petstore/jaxrs-resteasy/eap-joda
- samples/server/petstore/jaxrs-resteasy/eap-java8 - samples/server/petstore/jaxrs-resteasy/eap-java8
- samples/server/petstore/jaxrs-resteasy/joda - samples/server/petstore/jaxrs-resteasy/joda
- samples/server/petstore/jaxrs-resteasy/default-value
- samples/server/petstore/jaxrs-cxf - samples/server/petstore/jaxrs-cxf
- samples/server/petstore/jaxrs-cxf-annotated-base-path - samples/server/petstore/jaxrs-cxf-annotated-base-path
- samples/server/petstore/jaxrs-cxf-cdi - samples/server/petstore/jaxrs-cxf-cdi
- samples/server/petstore/jaxrs-cxf-cdi-default-value
- samples/server/petstore/jaxrs-cxf-non-spring-app - samples/server/petstore/jaxrs-cxf-non-spring-app
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3

View File

@ -1,7 +0,0 @@
generatorName: jaxrs-cxf-cdi
outputDir: samples/server/petstore/jaxrs-cxf-cdi-default-value
inputSpec: modules/openapi-generator/src/test/resources/3_0/issue_8535.yaml
templateDir: modules/openapi-generator/src/main/resources/JavaJaxRS/cxf-cdi
additionalProperties:
hideGenerationTimestamp: "true"
artifactId: jaxrs-cxf-cdi-default-value

View File

@ -1,7 +0,0 @@
generatorName: jaxrs-resteasy
outputDir: samples/server/petstore/jaxrs-resteasy/default-value
inputSpec: modules/openapi-generator/src/test/resources/3_0/issue_8535.yaml
templateDir: modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy
additionalProperties:
hideGenerationTimestamp: "true"
artifactId: jaxrs-resteasy-default-value

View File

@ -1,5 +1,6 @@
package org.openapitools.codegen.java.assertions; package org.openapitools.codegen.java.assertions;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -8,8 +9,11 @@ import java.util.stream.Collectors;
import org.assertj.core.api.ListAssert; import org.assertj.core.api.ListAssert;
import com.github.javaparser.ast.expr.AnnotationExpr; import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.MemberValuePair; import com.github.javaparser.ast.expr.MarkerAnnotationExpr;
import com.github.javaparser.ast.expr.NormalAnnotationExpr;
import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr;
import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName; import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName;
import com.google.common.collect.ImmutableMap;
public abstract class AbstractAnnotationAssert<ACTUAL extends AbstractAnnotationAssert<ACTUAL>> extends ListAssert<AnnotationExpr> { public abstract class AbstractAnnotationAssert<ACTUAL extends AbstractAnnotationAssert<ACTUAL>> extends ListAssert<AnnotationExpr> {
@ -37,10 +41,19 @@ public abstract class AbstractAnnotationAssert<ACTUAL extends AbstractAnnotation
} }
private static boolean hasAttributes(final AnnotationExpr annotation, final Map<String, String> expectedAttributesToContains) { private static boolean hasAttributes(final AnnotationExpr annotation, final Map<String, String> expectedAttributesToContains) {
final Map<String, String> actualAttributes = annotation.getChildNodes().stream() final Map<String, String> actualAttributes;
.filter(MemberValuePair.class::isInstance) if (annotation instanceof SingleMemberAnnotationExpr) {
.map(MemberValuePair.class::cast) actualAttributes = ImmutableMap.of(
.collect(Collectors.toMap(NodeWithSimpleName::getNameAsString, pair -> pair.getValue().toString())); "value", ((SingleMemberAnnotationExpr) annotation).getMemberValue().toString()
);
} else if (annotation instanceof NormalAnnotationExpr) {
actualAttributes = ((NormalAnnotationExpr) annotation).getPairs().stream()
.collect(Collectors.toMap(NodeWithSimpleName::getNameAsString, pair -> pair.getValue().toString()));
} else if (annotation instanceof MarkerAnnotationExpr) {
actualAttributes = new HashMap<>();
} else {
throw new IllegalArgumentException("Unexpected annotation expression type for: " + annotation);
}
return expectedAttributesToContains.entrySet().stream() return expectedAttributesToContains.entrySet().stream()
.allMatch(expected -> Objects.equals(actualAttributes.get(expected.getKey()), expected.getValue())); .allMatch(expected -> Objects.equals(actualAttributes.get(expected.getKey()), expected.getValue()));

View File

@ -1,10 +1,12 @@
package org.openapitools.codegen.java.assertions; package org.openapitools.codegen.java.assertions;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import org.assertj.core.api.AbstractAssert; import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
@ -33,6 +35,14 @@ public class JavaFileAssert extends AbstractAssert<JavaFileAssert, CompilationUn
} }
} }
public static JavaFileAssert assertThat(final File file) {
try {
return new JavaFileAssert(StaticJavaParser.parse(file));
} catch (IOException e) {
throw new RuntimeException("Exception while reading file: " + file, e);
}
}
public MethodAssert assertMethod(final String methodName, final String... paramTypes) { public MethodAssert assertMethod(final String methodName, final String... paramTypes) {
List<MethodDeclaration> methods = paramTypes.length == 0 List<MethodDeclaration> methods = paramTypes.length == 0
? actual.getType(0).getMethodsByName(methodName) ? actual.getType(0).getMethodsByName(methodName)
@ -71,6 +81,20 @@ public class JavaFileAssert extends AbstractAssert<JavaFileAssert, CompilationUn
return this; return this;
} }
public JavaFileAssert fileContains(final String... lines) {
final String actualBody = actual.getTokenRange()
.orElseThrow(() -> new IllegalStateException("Empty file"))
.toString();
Assertions.assertThat(actualBody)
.withFailMessage(
"File should contains lines\n====\n%s\n====\nbut actually was\n====\n%s\n====",
Arrays.stream(lines).collect(Collectors.joining(System.lineSeparator())), actualBody
)
.contains(lines);
return this;
}
public TypeAnnotationAssert assertTypeAnnotations() { public TypeAnnotationAssert assertTypeAnnotations() {
return new TypeAnnotationAssert(this, actual.getType(0).getAnnotations()); return new TypeAnnotationAssert(this, actual.getType(0).getAnnotations());
} }

View File

@ -1,23 +1,30 @@
package org.openapitools.codegen.java.assertions; package org.openapitools.codegen.java.assertions;
import java.util.Arrays;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import org.assertj.core.api.AbstractAssert; import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.nodeTypes.NodeWithName;
public class MethodAssert extends AbstractAssert<MethodAssert, MethodDeclaration> { public class MethodAssert extends AbstractAssert<MethodAssert, MethodDeclaration> {
private final JavaFileAssert fileAssert; private final JavaFileAssert fileAssert;
private final String methodSignature;
MethodAssert(final JavaFileAssert fileAssert, final MethodDeclaration methodDeclaration) { MethodAssert(final JavaFileAssert fileAssert, final MethodDeclaration methodDeclaration) {
super(methodDeclaration, MethodAssert.class); super(methodDeclaration, MethodAssert.class);
this.fileAssert = fileAssert; this.fileAssert = fileAssert;
this.methodSignature = methodDeclaration.getDeclarationAsString();
} }
public JavaFileAssert and() { public JavaFileAssert toFileAssert() {
return fileAssert; return fileAssert;
} }
@ -34,9 +41,83 @@ public class MethodAssert extends AbstractAssert<MethodAssert, MethodDeclaration
public ParameterAssert hasParameter(final String paramName) { public ParameterAssert hasParameter(final String paramName) {
final Optional<Parameter> parameter = actual.getParameterByName(paramName); final Optional<Parameter> parameter = actual.getParameterByName(paramName);
Assertions.assertThat(parameter) Assertions.assertThat(parameter)
.withFailMessage("Method %s should have parameter %s, but it doesn't", actual.getNameAsString(), paramName) .withFailMessage("Method %s should have parameter %s, but it doesn't", methodSignature, paramName)
.isPresent(); .isPresent();
return new ParameterAssert(this, parameter.get()); return new ParameterAssert(this, parameter.get());
} }
public MethodAssert doesNotHaveParameter(final String paramName) {
Assertions.assertThat(actual.getParameterByName(paramName))
.withFailMessage("Method %s shouldn't have parameter %s, but it does", methodSignature, paramName)
.isEmpty();
return this;
}
public MethodAssert bodyContainsLines(final String... lines) {
Assertions.assertThat(isWithImplementation())
.withFailMessage("Method %s is abstract", methodSignature)
.isTrue();
final String actualBody = actual.getTokenRange()
.orElseThrow(() -> new IllegalStateException("Not-abstract method doesn't have body"))
.toString();
Assertions.assertThat(actualBody)
.withFailMessage(
"Method's %s body should contains lines\n====\n%s\n====\nbut actually was\n====\n%s\n====",
methodSignature, Arrays.stream(lines).collect(Collectors.joining(System.lineSeparator())), actualBody
)
.contains(lines);
return this;
}
public MethodAssert doesNotHaveImplementation() {
Assertions.assertThat(isWithImplementation())
.withFailMessage("Method %s should be abstract", methodSignature)
.isFalse();
return this;
}
public MethodAssert doesNotHaveComment() {
Assertions.assertThat(actual.getJavadocComment())
.withFailMessage("Method %s shouldn't contains comment, but it does", methodSignature)
.isEmpty();
return this;
}
public MethodAssert commentContainsLines(final String... lines) {
Assertions.assertThat(actual.getJavadocComment())
.withFailMessage("Method %s should contains comment, but it doesn't", methodSignature)
.isPresent();
final String actualComment = actual.getJavadocComment().get().getContent();
Assertions.assertThat(actualComment)
.withFailMessage(
"Method's %s comment should contains lines\n====\n%s\n====\nbut actually was\n====%s\n====",
methodSignature, Arrays.stream(lines).collect(Collectors.joining(System.lineSeparator())), actualComment
)
.contains(lines);
return this;
}
public MethodAssert noneOfParameterHasAnnotation(final String annotationName) {
actual.getParameters()
.forEach(
param -> Assertions.assertThat(param.getAnnotations())
.withFailMessage("Parameter %s contains annotation %s while it shouldn't", param.getNameAsString(), annotationName)
.extracting(NodeWithName::getNameAsString)
.doesNotContain(annotationName)
);
return this;
}
private boolean isWithImplementation() {
final boolean isInterface = actual.getParentNode()
.filter(ClassOrInterfaceDeclaration.class::isInstance)
.map(ClassOrInterfaceDeclaration.class::cast)
.map(ClassOrInterfaceDeclaration::isInterface)
.orElse(false);
return !(actual.isAbstract() || (isInterface && !actual.isDefault()));
}
} }

View File

@ -1,7 +1,24 @@
package org.openapitools.codegen.java.jaxrs; package org.openapitools.codegen.java.jaxrs;
import java.io.File;
import java.nio.file.Files;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen; import org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen;
import org.openapitools.codegen.languages.features.CXFServerFeatures;
import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.ParseOptions;
public class JavaJAXRSCXFCDIServerCodegenTest extends JavaJaxrsBaseTest { public class JavaJAXRSCXFCDIServerCodegenTest extends JavaJaxrsBaseTest {
@ -9,4 +26,76 @@ public class JavaJAXRSCXFCDIServerCodegenTest extends JavaJaxrsBaseTest {
public void beforeMethod() { public void beforeMethod() {
codegen = new JavaJAXRSCXFCDIServerCodegen(); codegen = new JavaJAXRSCXFCDIServerCodegen();
} }
@Test
public void testHandleDefaultValue_issue8535() throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_8535.yaml", null, new ParseOptions()).getOpenAPI();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("TestHeadersApi.java"))
.assertMethod("headersTest")
.hasParameter("headerNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("headerString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"true\""));
JavaFileAssert.assertThat(files.get("TestQueryParamsApi.java"))
.assertMethod("queryParamsTest")
.hasParameter("queryNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("queryString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"true\""));
}
} }

View File

@ -4,7 +4,10 @@ import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server; import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.ParseOptions;
import org.assertj.core.api.Assertions;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.languages.AbstractJavaCodegen; import org.openapitools.codegen.languages.AbstractJavaCodegen;
import org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen; import org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen;
import org.openapitools.codegen.languages.JavaCXFExtServerCodegen; import org.openapitools.codegen.languages.JavaCXFExtServerCodegen;
@ -13,14 +16,9 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
import static org.testng.Assert.*; import static org.testng.Assert.*;
@ -184,33 +182,6 @@ public class JavaJAXRSCXFExtServerCodegenTest extends JavaJaxrsBaseTest {
codegen = new JavaCXFExtServerCodegenTester(); codegen = new JavaCXFExtServerCodegenTester();
} }
private void checkFile(Path path, boolean fileShouldExist, String... regexes) {
if (!fileShouldExist) {
assertFalse(path.toFile().exists());
return;
}
assertTrue(path.toFile().exists());
String contents = null;
try {
contents = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
} catch (IOException e) {
fail("Unable to evaluate file contents");
}
for (String regex : regexes)
assertTrue(Pattern.compile(regex).matcher(contents).find());
}
@SuppressWarnings("unchecked")
private List<CodegenOperation> getOperationsList(Map<String, Object> templateData) {
assertTrue(templateData.get("operations") instanceof Map);
Map<String, Object> operations = (Map<String, Object>) templateData.get("operations");
assertTrue(operations.get("operation") instanceof List);
return (List<CodegenOperation>) operations.get("operation");
}
@Test @Test
public void testAdditionalPropertiesPutForConfigValues() throws Exception { public void testAdditionalPropertiesPutForConfigValues() throws Exception {
JavaCXFExtServerCodegenTester testerCodegen = (JavaCXFExtServerCodegenTester) this.codegen; JavaCXFExtServerCodegenTester testerCodegen = (JavaCXFExtServerCodegenTester) this.codegen;
@ -379,29 +350,25 @@ public class JavaJAXRSCXFExtServerCodegenTest extends JavaJaxrsBaseTest {
DefaultGenerator generator = new DefaultGenerator(); DefaultGenerator generator = new DefaultGenerator();
generator.opts(input).generate(); generator.opts(input).generate();
String reGetPetById = "(?s)(?m)public Pet getPetById\\(Long petId\\) \\{" // split JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/impl/PetApiServiceImpl.java"))
+ ".*" // split .assertMethod("getPetById")
+ "Pet response = new Pet\\(\\);" // split .bodyContainsLines(
+ ".*" // split "Pet response = new Pet();",
+ "return response;\\s+" // split "return response;"
+ "\\}"; // split );
checkFile(Paths.get(outputPath + "/src/main/java/org/openapitools/api/impl/PetApiServiceImpl.java"), true,
reGetPetById);
String reFindPetsByStatusTest = "(?s)(?m)public void findPetsByStatusTest\\(\\) throws Exception \\{\\s+" JavaFileAssert.assertThat(Paths.get(outputPath + "/src/test/java/org/openapitools/api/PetApiTest.java"))
+ ".*" // split .assertMethod("findPetsByStatusTest")
+ "List<String> status = new ArrayList<>\\(\\);" // split .bodyContainsLines(
+ ".*" // split "List<String> status = new ArrayList<>();",
+ "List<Pet> response = api\\.findPetsByStatus\\(status\\);" // split "// List<Pet> response = api.findPetsByStatus(status);",
+ ".*" // split "// validate(response);"
+ "validate\\(response\\);\\s+" // split );
+ "\\}";
checkFile(Paths.get(outputPath + "/src/test/java/org/openapitools/api/PetApiTest.java"), true,
reFindPetsByStatusTest);
checkFile(Paths.get(outputPath + "/src/main/resources/test-data.json"), false); Assertions.assertThat(Paths.get(outputPath + "/src/main/resources/test-data.json"))
.doesNotExist();
checkFile(Paths.get(outputPath + "/test-data-control.json"), false); Assertions.assertThat(Paths.get(outputPath + "/test-data-control.json"))
.doesNotExist();
} }
@Test @Test
@ -424,28 +391,34 @@ public class JavaJAXRSCXFExtServerCodegenTest extends JavaJaxrsBaseTest {
DefaultGenerator generator = new DefaultGenerator(); DefaultGenerator generator = new DefaultGenerator();
generator.opts(input).generate(); generator.opts(input).generate();
String reInitCache = "(?s)(?m)\\{\\s+" + "try \\{\\s+" JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/impl/PetApiServiceImpl.java"))
+ "File cacheFile = new File\\(System\\.getProperty\\(\"jaxrs\\.test\\.server\\.json\",\\s+\"(.+)\"\\)\\);\\s+" .fileContains(
+ "cache = JsonCache\\.Factory\\.instance\\.get\\(\"test-data\"\\)\\.load\\(cacheFile\\)\\.child\\(\"/org\\.openapitools\\.api/PetApi\"\\);"; "File cacheFile = new File(System.getProperty(\"jaxrs.test.server.json\"",
String reGetPetById = "(?s)(?m)public Pet getPetById\\(Long petId\\) \\{.*" // split "cache = JsonCache.Factory.instance.get(\"test-data\").load(cacheFile).child(\"/org.openapitools.api/PetApi\");"
+ "try \\{\\s*" // split )
+ "Pet response = cache\\.getObject\\(\"/getPetById/response\", Pet\\.class\\);"; .assertMethod("getPetById")
checkFile(Paths.get(outputPath + "/src/main/java/org/openapitools/api/impl/PetApiServiceImpl.java"), true, .bodyContainsLines(
reInitCache, reGetPetById); "Pet response = cache.getObject(\"/getPetById/response\", Pet.class);"
);
reInitCache = "(?s)(?m)public static void beforeClass\\(\\) throws Exception \\{\\s+"
+ "File cacheFile = new File\\(System\\.getProperty\\(\"jaxrs\\.test\\.client\\.json\",\\s+"
+ "\".*src(?:\\\\\\\\|/)main(?:\\\\\\\\|/)resources(?:\\\\\\\\|/)test-data\\.json\"\\)\\);\\s+"
+ "cache = JsonCache\\.Factory\\.instance.get\\(\"test-data\"\\)\\.load\\(cacheFile\\)"
+ "\\.child\\(\"/org\\.openapitools\\.api/PetApi\"\\);";
String reAddPetTest = "public void addPetTest\\(\\) throws Exception \\{\\s+"
+ "Pet pet = cache\\.getObject\\(\"/addPet/pet\", Pet\\.class\\);";
checkFile(Paths.get(outputPath + "/src/test/java/org/openapitools/api/PetApiTest.java"), true, reInitCache,
reAddPetTest);
checkFile(Paths.get(outputPath + "/src/main/resources/test-data.json"), true); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/test/java/org/openapitools/api/PetApiTest.java"))
.assertMethod("beforeClass")
.bodyContainsLines(
"File cacheFile = new File(System.getProperty(\"jaxrs.test.client.json\",",
"cache = JsonCache.Factory.instance.get(\"test-data\").load(cacheFile).child(\"/org.openapitools.api/PetApi\");",
"validator = Validation.buildDefaultValidatorFactory().getValidator();"
)
.toFileAssert()
.assertMethod("addPetTest")
.bodyContainsLines(
"Pet pet = cache.getObject(\"/addPet/pet\", Pet.class);"
);
checkFile(Paths.get(outputPath + "/test-data-control.json"), true); Assertions.assertThat(Paths.get(outputPath + "/src/main/resources/test-data.json"))
.exists();
Assertions.assertThat(Paths.get(outputPath + "/test-data-control.json"))
.exists();
} }
@Test @Test

View File

@ -8,6 +8,7 @@ import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.openapitools.codegen.config.CodegenConfigurator; import org.openapitools.codegen.config.CodegenConfigurator;
import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen; import org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen;
import org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen; import org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen;
import org.openapitools.codegen.languages.features.CXFServerFeatures; import org.openapitools.codegen.languages.features.CXFServerFeatures;
@ -23,6 +24,8 @@ import java.nio.file.Paths;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import static org.openapitools.codegen.TestUtils.assertFileContains; import static org.openapitools.codegen.TestUtils.assertFileContains;
import static org.openapitools.codegen.TestUtils.validateJavaSourceFiles; import static org.openapitools.codegen.TestUtils.validateJavaSourceFiles;
@ -32,6 +35,8 @@ import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.RETU
import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.SUPPORT_ASYNC; import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.SUPPORT_ASYNC;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import com.google.common.collect.ImmutableMap;
/** /**
* Unit-Test for {@link org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen}. * Unit-Test for {@link org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen}.
* *
@ -610,4 +615,76 @@ public class JavaJAXRSSpecServerCodegenTest extends JavaJaxrsBaseTest {
TestUtils.ensureContainsFile(files, output, "src/gen/java/org/openapitools/model/Options.java"); TestUtils.ensureContainsFile(files, output, "src/gen/java/org/openapitools/model/Options.java");
TestUtils.assertFileContains(output.toPath().resolve("src/gen/java/org/openapitools/model/Options.java"), "List< @Pattern(regexp=\"^[A-Z].*\")String> getA()"); TestUtils.assertFileContains(output.toPath().resolve("src/gen/java/org/openapitools/model/Options.java"), "List< @Pattern(regexp=\"^[A-Z].*\")String> getA()");
} }
@Test
public void testHandleDefaultValue_issue8535() throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_8535.yaml", null, new ParseOptions()).getOpenAPI();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("TestHeadersApi.java"))
.assertMethod("headersTest")
.hasParameter("headerNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("headerString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"true\""));
JavaFileAssert.assertThat(files.get("TestQueryParamsApi.java"))
.assertMethod("queryParamsTest")
.hasParameter("queryNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("queryString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"true\""));
}
} }

View File

@ -1,14 +1,21 @@
package org.openapitools.codegen.java.jaxrs; package org.openapitools.codegen.java.jaxrs;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.MapSchema; import io.swagger.v3.oas.models.media.MapSchema;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.parser.core.models.ParseOptions;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.TestUtils;
import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.languages.JavaResteasyServerCodegen; import org.openapitools.codegen.languages.JavaResteasyServerCodegen;
import org.openapitools.codegen.languages.features.CXFServerFeatures;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -16,6 +23,14 @@ import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import java.io.File;
import java.nio.file.Files;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.google.common.collect.ImmutableMap;
public class JavaJaxrsResteasyServerCodegenModelTest extends JavaJaxrsBaseTest { public class JavaJaxrsResteasyServerCodegenModelTest extends JavaJaxrsBaseTest {
@BeforeMethod @BeforeMethod
@ -60,4 +75,76 @@ public class JavaJaxrsResteasyServerCodegenModelTest extends JavaJaxrsBaseTest {
Assert.assertEquals(floatParam.defaultValue, floatVal); Assert.assertEquals(floatParam.defaultValue, floatVal);
Assert.assertEquals(doubleParam.defaultValue, doubleVal); Assert.assertEquals(doubleParam.defaultValue, doubleVal);
} }
@Test
public void testHandleDefaultValue_issue8535() throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_8535.yaml", null, new ParseOptions()).getOpenAPI();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("TestHeadersApi.java"))
.assertMethod("headersTest")
.hasParameter("headerNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("headerString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"true\""));
JavaFileAssert.assertThat(files.get("TestQueryParamsApi.java"))
.assertMethod("queryParamsTest")
.hasParameter("queryNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("queryString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("DefaultValue", ImmutableMap.of("value", "\"true\""));
}
} }

View File

@ -1,6 +1,7 @@
package org.openapitools.codegen.java.jaxrs; package org.openapitools.codegen.java.jaxrs;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import io.swagger.parser.OpenAPIParser; import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
@ -12,6 +13,7 @@ import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.TestUtils;
import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.languages.JavaJerseyServerCodegen; import org.openapitools.codegen.languages.JavaJerseyServerCodegen;
import org.openapitools.codegen.languages.features.CXFServerFeatures; import org.openapitools.codegen.languages.features.CXFServerFeatures;
import org.openapitools.codegen.DefaultGenerator; import org.openapitools.codegen.DefaultGenerator;
@ -29,6 +31,7 @@ import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class JavaJerseyServerCodegenTest extends JavaJaxrsBaseTest { public class JavaJerseyServerCodegenTest extends JavaJaxrsBaseTest {
@ -169,4 +172,76 @@ public class JavaJerseyServerCodegenTest extends JavaJaxrsBaseTest {
} }
} }
@Test
public void testHandleDefaultValue_issue8535() throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_8535.yaml", null, new ParseOptions()).getOpenAPI();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("TestHeadersApi.java"))
.assertMethod("headersTest")
.hasParameter("headerNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("headerString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"true\""));
JavaFileAssert.assertThat(files.get("TestQueryParamsApi.java"))
.assertMethod("queryParamsTest")
.hasParameter("queryNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("queryString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("defaultValue", "\"true\""));
}
} }

View File

@ -39,7 +39,10 @@ import java.nio.file.Paths;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.assertj.core.api.Assertions;
import org.openapitools.codegen.java.assertions.JavaFileAssert; import org.openapitools.codegen.java.assertions.JavaFileAssert;
import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.ClientOptInput; import org.openapitools.codegen.ClientOptInput;
@ -127,11 +130,10 @@ public class SpringCodegenTest {
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("required", "false", "value", "\"limit\"")) .containsWithNameAndAttributes("RequestParam", ImmutableMap.of("required", "false", "value", "\"limit\""))
.toParameter() .toParameter()
.toMethod() .toMethod()
.hasParameter("animalParams").withType("AnimalParams"); .hasParameter("animalParams").withType("AnimalParams")
.toMethod()
// todo: to remove .commentContainsLines("GET /zebras", "@param limit (optional)")
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"), .bodyContainsLines("return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED)");
"AnimalParams");
JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/AnimalParams.java")) JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/AnimalParams.java"))
.hasImports("org.springframework.format.annotation.DateTimeFormat") .hasImports("org.springframework.format.annotation.DateTimeFormat")
@ -142,15 +144,11 @@ public class SpringCodegenTest {
.toType() .toType()
.hasProperty("lastSeen").withType("OffsetDateTime") .hasProperty("lastSeen").withType("OffsetDateTime")
.assertPropertyAnnotations() .assertPropertyAnnotations()
.containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE_TIME")); .containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE_TIME"))
.toProperty().toType()
// todo: to remove .assertMethod("born", "LocalDate")
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/AnimalParams.java"), .bodyContainsLines("this.born = born")
"@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)", "@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)"); .doesNotHaveComment();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/AnimalParams.java"),
"import org.springframework.format.annotation.DateTimeFormat;"
);
} }
@Test @Test
@ -179,9 +177,22 @@ public class SpringCodegenTest {
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate(); generator.opts(input).generate();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java"), "@CookieValue"); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java"))
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"), "@CookieValue"); .assertMethod("getElephants", "String", "BigDecimal")
assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/BirdsApi.java"), "@CookieValue"); .hasParameter("userToken")
.assertParameterAnnotations()
.containsWithNameAndAttributes("CookieValue", ImmutableMap.of("name", "\"userToken\""));
JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"))
.assertMethod("getZebras", "String")
.hasParameter("userToken")
.assertParameterAnnotations()
.containsWithNameAndAttributes("CookieValue", ImmutableMap.of("name", "\"userToken\""));
JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/BirdsApi.java"))
.assertMethod("getBirds", "BigDecimal")
.doesNotHaveParameter("userToken")
.noneOfParameterHasAnnotation("CookieValue");
} }
@Test @Test
@ -276,22 +287,19 @@ public class SpringCodegenTest {
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate(); generator.opts(input).generate();
assertFileContains( JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java"))
Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java"), .hasImports("org.springframework.format.annotation.DateTimeFormat")
"import org.springframework.format.annotation.DateTimeFormat;" .assertMethod("getElephants", "LocalDate")
); .hasParameter("startDate")
assertFileContains( .assertParameterAnnotations()
Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java"), .containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE"));
"@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)"
); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"))
assertFileContains( .hasImports("org.springframework.format.annotation.DateTimeFormat")
Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"), .assertMethod("getZebras", "OffsetDateTime")
"import org.springframework.format.annotation.DateTimeFormat;" .hasParameter("startDateTime")
); .assertParameterAnnotations()
assertFileContains( .containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE_TIME"));
Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"),
"@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)"
);
} }
@Test @Test
@ -339,9 +347,15 @@ public class SpringCodegenTest {
generator.opts(input).generate(); generator.opts(input).generate();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"), JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"))
"@RequestParam(value = \"format\"", .assertMethod("exampleApiGet", "String", "Format")
"@RequestParam(value = \"query\""); .hasParameter("query")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"query\""))
.toParameter().toMethod()
.hasParameter("format")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"format\""));
} }
@Test @Test
@ -371,8 +385,12 @@ public class SpringCodegenTest {
generator.opts(input).generate(); generator.opts(input).generate();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"), JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"))
"@RequestParam(value = \"start\""); .assertMethod("exampleApiGet", "OffsetDateTime")
.hasParameter("start")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"start\""))
.containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE_TIME"));
} }
@Test @Test
@ -496,6 +514,12 @@ public class SpringCodegenTest {
generator.opts(input).generate(); generator.opts(input).generate();
JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"))
.assertMethod("exampleApiPost", "InlineObject")
.hasParameter("inlineObject")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestBody", ImmutableMap.of("required", "false"));
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"), assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"),
"@RequestBody(required = false"); "@RequestBody(required = false");
} }
@ -536,14 +560,17 @@ public class SpringCodegenTest {
final Map<String, File> files = generateFiles(codegen, "src/test/resources/3_0/form-multipart-binary-array.yaml"); final Map<String, File> files = generateFiles(codegen, "src/test/resources/3_0/form-multipart-binary-array.yaml");
// Check that the delegate handles the array // Check that the delegate handles the array
final File multipartArrayApiDelegate = files.get("MultipartArrayApiDelegate.java"); JavaFileAssert.assertThat(files.get("MultipartArrayApiDelegate.java"))
assertFileContains(multipartArrayApiDelegate.toPath(), "List<MultipartFile> files"); .assertMethod("multipartArray", "List<MultipartFile>")
.hasParameter("files").withType("List<MultipartFile>");
// Check that the api handles the array // Check that the api handles the array
final File multipartArrayApi = files.get("MultipartArrayApi.java"); JavaFileAssert.assertThat(files.get("MultipartArrayApi.java"))
assertFileContains(multipartArrayApi.toPath(), "List<MultipartFile> files", .assertMethod("multipartArray", "List<MultipartFile>")
"@ApiParam(value = \"Many files\")", .hasParameter("files").withType("List<MultipartFile>")
"@RequestPart(value = \"files\", required = false)"); .assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("value", "\"Many files\""))
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"files\"", "required", "false"));
// UPDATE: the following test has been ignored due to https://github.com/OpenAPITools/openapi-generator/pull/11081/ // UPDATE: the following test has been ignored due to https://github.com/OpenAPITools/openapi-generator/pull/11081/
// We will contact the contributor of the following test to see if the fix will break their use cases and // We will contact the contributor of the following test to see if the fix will break their use cases and
@ -553,17 +580,29 @@ public class SpringCodegenTest {
// assertFileContains(multipartSingleApiDelegate.toPath(), "MultipartFile file"); // assertFileContains(multipartSingleApiDelegate.toPath(), "MultipartFile file");
// Check that the api handles the single file // Check that the api handles the single file
final File multipartSingleApi = files.get("MultipartSingleApi.java"); JavaFileAssert.assertThat(files.get("MultipartSingleApi.java"))
assertFileContains(multipartSingleApi.toPath(), "MultipartFile file", .assertMethod("multipartSingle", "MultipartFile")
"@ApiParam(value = \"One file\")", .hasParameter("file").withType("MultipartFile")
"@RequestPart(value = \"file\", required = false)"); .assertParameterAnnotations()
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("value", "\"One file\""))
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"file\"", "required", "false"));
// Check that api validates mixed multipart request // Check that api validates mixed multipart request
final File multipartMixedApi = files.get("MultipartMixedApi.java"); JavaFileAssert.assertThat(files.get("MultipartMixedApi.java"))
assertFileContains(multipartMixedApi.toPath(), "MultipartFile file", .assertMethod("multipartMixed", "MultipartMixedStatus", "MultipartFile", "MultipartMixedMarker")
"@Valid @RequestParam(value = \"status\", required = true)", .hasParameter("status").withType("MultipartMixedStatus")
"@RequestPart(value = \"file\", required = true)", .assertParameterAnnotations()
"@Valid @RequestParam(value = \"marker\", required = false)"); .containsWithName("Valid")
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("value", "\"\""))
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"status\"", "required", "true"))
.toParameter().toMethod()
.hasParameter("file").withType("MultipartFile")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"file\"", "required", "true"))
.toParameter().toMethod()
.hasParameter("marker").withType("MultipartMixedMarker")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"marker\"", "required", "false"));
} }
// Helper function, intended to reduce boilerplate // Helper function, intended to reduce boilerplate
@ -1015,4 +1054,114 @@ public class SpringCodegenTest {
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Address.java"), assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Address.java"),
"@JsonValue", "import com.fasterxml.jackson.annotation.JsonValue;"); "@JsonValue", "import com.fasterxml.jackson.annotation.JsonValue;");
} }
@Test
public void shouldPurAdditionalModelTypesOverAllModels() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/');
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/petstore.yaml", null, new ParseOptions()).getOpenAPI();
SpringCodegen codegen = new SpringCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(SpringCodegen.ADDITIONAL_MODEL_TYPE_ANNOTATIONS, "@path.Annotation(param1 = \"test1\", param2 = 3);@path.Annotation2;@custom.Annotation");
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
input.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate();
File[] generatedModels = new File(outputPath + "/src/main/java/org/openapitools/model").listFiles();
Assertions.assertThat(generatedModels).isNotEmpty();
for (File modelPath : generatedModels) {
JavaFileAssert.assertThat(modelPath)
.assertTypeAnnotations()
.containsWithName("custom.Annotation")
.containsWithName("path.Annotation2")
.containsWithNameAndAttributes("path.Annotation", ImmutableMap.of("param1", "\"test1\"", "param2", "3"));
}
}
@Test
public void testHandleDefaultValue_issue8535() throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/issue_8535.yaml", null, new ParseOptions()).getOpenAPI();
SpringCodegen codegen = new SpringCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("TestHeadersApi.java"))
.assertMethod("headersTest")
.hasParameter("headerNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("headerString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("headerBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestHeader", ImmutableMap.of("defaultValue", "\"true\""));
JavaFileAssert.assertThat(files.get("TestQueryParamsApi.java"))
.assertMethod("queryParamsTest")
.hasParameter("queryNumber").withType("BigDecimal")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"11.2\""))
.toParameter().toMethod()
.hasParameter("queryString").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"qwerty\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotes").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryStringQuotesWrapped").withType("String")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"qwerty\\\"with quotes\\\" test\""))
.toParameter().toMethod()
.hasParameter("queryBoolean").withType("Boolean")
.assertParameterAnnotations()
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("defaultValue", "\"true\""));
}
} }

View File

@ -1,23 +0,0 @@
# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

View File

@ -1,10 +0,0 @@
pom.xml
src/gen/java/org/openapitools/api/TestHeadersApi.java
src/gen/java/org/openapitools/api/TestHeadersApiService.java
src/gen/java/org/openapitools/api/TestQueryParamsApi.java
src/gen/java/org/openapitools/api/TestQueryParamsApiService.java
src/gen/java/org/openapitools/model/TestResponse.java
src/main/java/org/openapitools/api/RestApplication.java
src/main/java/org/openapitools/api/impl/TestHeadersApiServiceImpl.java
src/main/java/org/openapitools/api/impl/TestQueryParamsApiServiceImpl.java
src/main/webapp/WEB-INF/beans.xml

View File

@ -1,121 +0,0 @@
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openapitools</groupId>
<artifactId>jaxrs-cxf-cdi-default-value</artifactId>
<packaging>war</packaging>
<name>jaxrs-cxf-cdi-default-value</name>
<version>1.0.0</version>
<build>
<!-- Main source directory -->
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<fork>true</fork>
<meminitial>128m</meminitial>
<maxmem>512m</maxmem>
<compilerArgs>
<arg>-Xlint:all</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- Add src/gen/java to compilation -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/gen/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Java EE 7 doesn't need a web.xml -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax/javaee-api -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxrs -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<!-- Version is just a guess -->
<!-- Require at lease CXF 3.1.2 since HTTP PATCH support was added on this version -->
<version>3.1.2</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>[2.8.3,2.12.1]</version>
</dependency>
<!-- Swagger annotations -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>[1.5.3,1.5.16]</version>
</dependency>
<!-- @Nullable annotation -->
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
<!-- Bean Validation API support -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>${beanvalidation-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.13</version>
</dependency>
</dependencies>
<properties>
<beanvalidation-version>2.0.2</beanvalidation-version>
</properties>
</project>

View File

@ -1,49 +0,0 @@
package org.openapitools.api;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import org.openapitools.api.TestHeadersApiService;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import io.swagger.annotations.*;
import java.io.InputStream;
import org.apache.cxf.jaxrs.ext.PATCH;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
import java.util.Map;
import java.util.List;
import javax.validation.constraints.*;
@Path("/test-headers")
@RequestScoped
@Api(description = "the test-headers API")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public class TestHeadersApi {
@Context SecurityContext securityContext;
@Inject TestHeadersApiService delegate;
@GET
@Produces({ "application/json" })
@ApiOperation(value = "test headers", notes = "desc", response = TestResponse.class, tags={ "verify-default-value" })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
public Response headersTest( @ApiParam(value = "" , defaultValue="11.2")@HeaderParam("headerNumber") BigDecimal headerNumber, @ApiParam(value = "" , defaultValue="qwerty")@HeaderParam("headerString") String headerString, @ApiParam(value = "" , defaultValue="qwerty")@HeaderParam("headerStringWrapped") String headerStringWrapped, @ApiParam(value = "" , defaultValue="qwerty\"with quotes\" test")@HeaderParam("headerStringQuotes") String headerStringQuotes, @ApiParam(value = "" , defaultValue="qwerty\"with quotes\" test")@HeaderParam("headerStringQuotesWrapped") String headerStringQuotesWrapped, @ApiParam(value = "" , defaultValue="true")@HeaderParam("headerBoolean") Boolean headerBoolean) {
return delegate.headersTest(headerNumber, headerString, headerStringWrapped, headerStringQuotes, headerStringQuotesWrapped, headerBoolean, securityContext);
}
}

View File

@ -1,22 +0,0 @@
package org.openapitools.api;
import org.openapitools.api.*;
import org.openapitools.model.*;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public interface TestHeadersApiService {
public Response headersTest(BigDecimal headerNumber, String headerString, String headerStringWrapped, String headerStringQuotes, String headerStringQuotesWrapped, Boolean headerBoolean, SecurityContext securityContext);
}

View File

@ -1,49 +0,0 @@
package org.openapitools.api;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import org.openapitools.api.TestQueryParamsApiService;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import io.swagger.annotations.*;
import java.io.InputStream;
import org.apache.cxf.jaxrs.ext.PATCH;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
import java.util.Map;
import java.util.List;
import javax.validation.constraints.*;
@Path("/test-query-params")
@RequestScoped
@Api(description = "the test-query-params API")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public class TestQueryParamsApi {
@Context SecurityContext securityContext;
@Inject TestQueryParamsApiService delegate;
@GET
@Produces({ "application/json" })
@ApiOperation(value = "test query params", notes = "desc", response = TestResponse.class, tags={ "verify-default-value" })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
public Response queryParamsTest(@ApiParam(value = "", defaultValue="11.2") @DefaultValue("11.2") @QueryParam("queryNumber") BigDecimal queryNumber, @ApiParam(value = "", defaultValue="qwerty") @DefaultValue("qwerty") @QueryParam("queryString") String queryString, @ApiParam(value = "", defaultValue="qwerty") @DefaultValue("qwerty") @QueryParam("queryStringWrapped") String queryStringWrapped, @ApiParam(value = "", defaultValue="qwerty\"with quotes\" test") @DefaultValue("qwerty\"with quotes\" test") @QueryParam("queryStringQuotes") String queryStringQuotes, @ApiParam(value = "", defaultValue="qwerty\"with quotes\" test") @DefaultValue("qwerty\"with quotes\" test") @QueryParam("queryStringQuotesWrapped") String queryStringQuotesWrapped, @ApiParam(value = "", defaultValue="true") @DefaultValue("true") @QueryParam("queryBoolean") Boolean queryBoolean) {
return delegate.queryParamsTest(queryNumber, queryString, queryStringWrapped, queryStringQuotes, queryStringQuotesWrapped, queryBoolean, securityContext);
}
}

View File

@ -1,22 +0,0 @@
package org.openapitools.api;
import org.openapitools.api.*;
import org.openapitools.model.*;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public interface TestQueryParamsApiService {
public Response queryParamsTest(BigDecimal queryNumber, String queryString, String queryStringWrapped, String queryStringQuotes, String queryStringQuotesWrapped, Boolean queryBoolean, SecurityContext securityContext);
}

View File

@ -1,148 +0,0 @@
package org.openapitools.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.*;
import io.swagger.annotations.*;
import java.util.Objects;
public class TestResponse {
private Integer id;
private String stringField = "asd";
private BigDecimal numberField = new BigDecimal("11");
private Boolean booleanField = true;
/**
**/
public TestResponse id(Integer id) {
this.id = id;
return this;
}
@ApiModelProperty(required = true, value = "")
@JsonProperty("id")
@NotNull
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
/**
**/
public TestResponse stringField(String stringField) {
this.stringField = stringField;
return this;
}
@ApiModelProperty(required = true, value = "")
@JsonProperty("stringField")
@NotNull
public String getStringField() {
return stringField;
}
public void setStringField(String stringField) {
this.stringField = stringField;
}
/**
**/
public TestResponse numberField(BigDecimal numberField) {
this.numberField = numberField;
return this;
}
@ApiModelProperty(required = true, value = "")
@JsonProperty("numberField")
@NotNull
public BigDecimal getNumberField() {
return numberField;
}
public void setNumberField(BigDecimal numberField) {
this.numberField = numberField;
}
/**
**/
public TestResponse booleanField(Boolean booleanField) {
this.booleanField = booleanField;
return this;
}
@ApiModelProperty(required = true, value = "")
@JsonProperty("booleanField")
@NotNull
public Boolean getBooleanField() {
return booleanField;
}
public void setBooleanField(Boolean booleanField) {
this.booleanField = booleanField;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
TestResponse testResponse = (TestResponse) o;
return Objects.equals(id, testResponse.id) &&
Objects.equals(stringField, testResponse.stringField) &&
Objects.equals(numberField, testResponse.numberField) &&
Objects.equals(booleanField, testResponse.booleanField);
}
@Override
public int hashCode() {
return Objects.hash(id, stringField, numberField, booleanField);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class TestResponse {\n");
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" stringField: ").append(toIndentedString(stringField)).append("\n");
sb.append(" numberField: ").append(toIndentedString(numberField)).append("\n");
sb.append(" booleanField: ").append(toIndentedString(booleanField)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}

View File

@ -1,9 +0,0 @@
package org.openapitools.api;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class RestApplication extends Application {
// Add implementation-specific details here
}

View File

@ -1,27 +0,0 @@
package org.openapitools.api.impl;
import org.openapitools.api.*;
import org.openapitools.model.*;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
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;
@RequestScoped
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public class TestHeadersApiServiceImpl implements TestHeadersApiService {
@Override
public Response headersTest(BigDecimal headerNumber, String headerString, String headerStringWrapped, String headerStringQuotes, String headerStringQuotesWrapped, Boolean headerBoolean, SecurityContext securityContext) {
// do some magic!
return Response.ok().entity("magic!").build();
}
}

View File

@ -1,27 +0,0 @@
package org.openapitools.api.impl;
import org.openapitools.api.*;
import org.openapitools.model.*;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
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;
@RequestScoped
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSCXFCDIServerCodegen")
public class TestQueryParamsApiServiceImpl implements TestQueryParamsApiService {
@Override
public Response queryParamsTest(BigDecimal queryNumber, String queryString, String queryStringWrapped, String queryStringQuotes, String queryStringQuotesWrapped, Boolean queryBoolean, SecurityContext securityContext) {
// do some magic!
return Response.ok().entity("magic!").build();
}
}

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<!--
This is just an empty file so that CDI archive scanning kicks in when
implicit archive scanning is disabled (such as on IBM Bluemix)
-->
</beans>

View File

@ -1,23 +0,0 @@
# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

View File

@ -1,21 +0,0 @@
README.md
build.gradle
pom.xml
settings.gradle
src/gen/java/org/openapitools/api/ApiException.java
src/gen/java/org/openapitools/api/ApiOriginFilter.java
src/gen/java/org/openapitools/api/ApiResponseMessage.java
src/gen/java/org/openapitools/api/JacksonConfig.java
src/gen/java/org/openapitools/api/NotFoundException.java
src/gen/java/org/openapitools/api/RFC3339DateFormat.java
src/gen/java/org/openapitools/api/RestApplication.java
src/gen/java/org/openapitools/api/StringUtil.java
src/gen/java/org/openapitools/api/TestHeadersApi.java
src/gen/java/org/openapitools/api/TestHeadersApiService.java
src/gen/java/org/openapitools/api/TestQueryParamsApi.java
src/gen/java/org/openapitools/api/TestQueryParamsApiService.java
src/gen/java/org/openapitools/model/TestResponse.java
src/main/java/org/openapitools/api/impl/TestHeadersApiServiceImpl.java
src/main/java/org/openapitools/api/impl/TestQueryParamsApiServiceImpl.java
src/main/webapp/WEB-INF/jboss-web.xml
src/main/webapp/WEB-INF/web.xml

View File

@ -1,24 +0,0 @@
# JAX-RS/RESTEasy server with OpenAPI
## Overview
This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using an
[OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
This is an example of building a OpenAPI-enabled JAX-RS server.
This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework.
RESTEasy is used as JAX-RS implementation library and is defined as dependency.
To run the server, please execute the following:
```
mvn -Djetty.http.port=8080 package org.eclipse.jetty:jetty-maven-plugin:run
```
You can then view the OpenAPI v2 specification here:
```
http://localhost:8080/swagger.json
```
Note that if you have configured the `host` to be something other than localhost, the calls through
swagger-ui will be directed to that host and not localhost!

View File

@ -1,36 +0,0 @@
apply plugin: 'war'
project.version = "1.0.0"
project.group = "org.openapitools"
repositories {
maven { url "https://repo1.maven.org/maven2" }
}
dependencies {
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 'org.jboss.resteasy:resteasy-multipart-provider:3.0.11.Final'
providedCompile 'jakarta.annotation:jakarta.annotation-api:1.3.5'
providedCompile 'javax:javaee-api:7.0'
providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final'
compile 'io.swagger:swagger-annotations:1.5.22'
compile 'org.jboss.resteasy:resteasy-jackson2-provider:3.0.11.Final'
providedCompile 'jakarta.validation:jakarta.validation-api:2.0.2'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.9'
compile 'joda-time:joda-time:2.7'
//TODO: swaggerFeature
compile 'io.swagger:swagger-jaxrs:1.5.12'
testCompile 'junit:junit:4.13.2',
'org.hamcrest:hamcrest-core:1.3'
}
sourceSets {
main {
java {
srcDir 'src/gen/java'
}
}
}

View File

@ -1,198 +0,0 @@
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openapitools</groupId>
<artifactId>jaxrs-resteasy-default-value</artifactId>
<packaging>war</packaging>
<name>jaxrs-resteasy-default-value</name>
<version>1.0.0</version>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>
src/gen/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax/javaee-api -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-core-version}</version>
</dependency>
<!-- @Nullable annotation -->
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${servlet-api-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>${resteasy-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.12.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-validator-provider-11</artifactId>
<version>3.6.3.SP1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>${resteasy-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>${resteasy-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>${jakarta-annotation-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>${swagger-core-version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
<exclusion>
<artifactId>snakeyaml</artifactId>
<groupId>org.yaml</groupId>
</exclusion>
<exclusion>
<artifactId>bsh</artifactId>
<groupId>org.beanshell</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Bean Validation API support -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>${beanvalidation-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.13</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<properties>
<swagger-core-version>1.5.22</swagger-core-version>
<jackson-version>2.11.2</jackson-version>
<jetty-version>9.2.9.v20150224</jetty-version>
<resteasy-version>3.13.0.Final</resteasy-version>
<slf4j-version>1.6.3</slf4j-version>
<junit-version>4.13.2</junit-version>
<servlet-api-version>4.0.4</servlet-api-version>
<jakarta-annotation-version>1.3.5</jakarta-annotation-version>
<beanvalidation-version>2.0.2</beanvalidation-version>
</properties>
</project>

View File

@ -1 +0,0 @@
rootProject.name = "jaxrs-resteasy-default-value"

View File

@ -1,32 +0,0 @@
package org.openapitools.api;
/**
* The exception that can be used to store the HTTP status code returned by an API response.
*/
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class ApiException extends Exception {
/** The HTTP status code. */
private int code;
/**
* Constructor.
*
* @param code The HTTP status code.
* @param msg The error message.
*/
public ApiException(int code, String msg) {
super(msg);
this.code = code;
}
/**
* Get the HTTP status code.
*
* @return The HTTP status code.
*/
public int getCode() {
return code;
}
}

View File

@ -1,22 +0,0 @@
package org.openapitools.api;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class ApiOriginFilter implements javax.servlet.Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type");
chain.doFilter(request, response);
}
public void destroy() {}
public void init(FilterConfig filterConfig) throws ServletException {}
}

View File

@ -1,69 +0,0 @@
package org.openapitools.api;
import javax.xml.bind.annotation.XmlTransient;
@javax.xml.bind.annotation.XmlRootElement
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class ApiResponseMessage {
public static final int ERROR = 1;
public static final int WARNING = 2;
public static final int INFO = 3;
public static final int OK = 4;
public static final int TOO_BUSY = 5;
int code;
String type;
String message;
public ApiResponseMessage(){}
public ApiResponseMessage(int code, String message){
this.code = code;
switch(code){
case ERROR:
setType("error");
break;
case WARNING:
setType("warning");
break;
case INFO:
setType("info");
break;
case OK:
setType("ok");
break;
case TOO_BUSY:
setType("too busy");
break;
default:
setType("unknown");
break;
}
this.message = message;
}
@XmlTransient
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

View File

@ -1,24 +0,0 @@
package org.openapitools.api;
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 java.io.IOException;
@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public JacksonConfig() throws Exception {
objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule())
.setDateFormat(new RFC3339DateFormat());
}
public ObjectMapper getContext(Class<?> arg0) {
return objectMapper;
}
}

View File

@ -1,10 +0,0 @@
package org.openapitools.api;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class NotFoundException extends ApiException {
private int code;
public NotFoundException (int code, String msg) {
super(code, msg);
this.code = code;
}
}

View File

@ -1,38 +0,0 @@
package org.openapitools.api;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class RFC3339DateFormat extends DateFormat {
private static final long serialVersionUID = 1L;
private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
private final StdDateFormat fmt = new StdDateFormat()
.withTimeZone(TIMEZONE_Z)
.withColonInTimeZone(true);
public RFC3339DateFormat() {
this.calendar = new GregorianCalendar();
}
@Override
public Date parse(String source, ParsePosition pos) {
return fmt.parse(source, pos);
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
return fmt.format(date, toAppendTo, fieldPosition);
}
@Override
public Object clone() {
return this;
}
}

View File

@ -1,9 +0,0 @@
package org.openapitools.api;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class RestApplication extends Application {
}

View File

@ -1,42 +0,0 @@
package org.openapitools.api;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class StringUtil {
/**
* Check if the given array contains the given value (with case-insensitive comparison).
*
* @param array The array
* @param value The value to search
* @return true if the array contains the value
*/
public static boolean containsIgnoreCase(String[] array, String value) {
for (String str : array) {
if (value == null && str == null) return true;
if (value != null && value.equalsIgnoreCase(str)) return true;
}
return false;
}
/**
* Join an array of strings with the given separator.
* <p>
* Note: This might be replaced by utility method from commons-lang or guava someday
* if one of those libraries is added as dependency.
* </p>
*
* @param array The array of strings
* @param separator The separator
* @return the resulting string
*/
public static String join(String[] array, String separator) {
int len = array.length;
if (len == 0) return "";
StringBuilder out = new StringBuilder();
out.append(array[0]);
for (int i = 1; i < len; i++) {
out.append(separator).append(array[i]);
}
return out.toString();
}
}

View File

@ -1,47 +0,0 @@
package org.openapitools.api;
import org.openapitools.model.*;
import org.openapitools.api.TestHeadersApiService;
import io.swagger.annotations.ApiParam;
import io.swagger.jaxrs.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.Map;
import java.util.List;
import org.openapitools.api.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 javax.inject.Inject;
import javax.validation.constraints.*;
import javax.validation.Valid;
@Path("/test-headers")
@io.swagger.annotations.Api(description = "the test-headers API")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class TestHeadersApi {
@Inject TestHeadersApiService service;
@GET
@Produces({ "application/json" })
@io.swagger.annotations.ApiOperation(value = "test headers", notes = "desc", response = TestResponse.class, tags={ "verify-default-value", })
@io.swagger.annotations.ApiResponses(value = {
@io.swagger.annotations.ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
public Response headersTest( @ApiParam(value = "" , defaultValue="11.2") @HeaderParam("headerNumber") BigDecimal headerNumber, @ApiParam(value = "" , defaultValue="qwerty") @HeaderParam("headerString") String headerString, @ApiParam(value = "" , defaultValue="qwerty") @HeaderParam("headerStringWrapped") String headerStringWrapped, @ApiParam(value = "" , defaultValue="qwerty\"with quotes\" test") @HeaderParam("headerStringQuotes") String headerStringQuotes, @ApiParam(value = "" , defaultValue="qwerty\"with quotes\" test") @HeaderParam("headerStringQuotesWrapped") String headerStringQuotesWrapped, @ApiParam(value = "" , defaultValue="true") @HeaderParam("headerBoolean") Boolean headerBoolean,@Context SecurityContext securityContext)
throws NotFoundException {
return service.headersTest(headerNumber,headerString,headerStringWrapped,headerStringQuotes,headerStringQuotesWrapped,headerBoolean,securityContext);
}
}

View File

@ -1,22 +0,0 @@
package org.openapitools.api;
import org.openapitools.api.*;
import org.openapitools.model.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import org.openapitools.api.NotFoundException;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public interface TestHeadersApiService {
Response headersTest(BigDecimal headerNumber,String headerString,String headerStringWrapped,String headerStringQuotes,String headerStringQuotesWrapped,Boolean headerBoolean,SecurityContext securityContext)
throws NotFoundException;
}

View File

@ -1,47 +0,0 @@
package org.openapitools.api;
import org.openapitools.model.*;
import org.openapitools.api.TestQueryParamsApiService;
import io.swagger.annotations.ApiParam;
import io.swagger.jaxrs.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.Map;
import java.util.List;
import org.openapitools.api.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 javax.inject.Inject;
import javax.validation.constraints.*;
import javax.validation.Valid;
@Path("/test-query-params")
@io.swagger.annotations.Api(description = "the test-query-params API")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class TestQueryParamsApi {
@Inject TestQueryParamsApiService service;
@GET
@Produces({ "application/json" })
@io.swagger.annotations.ApiOperation(value = "test query params", notes = "desc", response = TestResponse.class, tags={ "verify-default-value", })
@io.swagger.annotations.ApiResponses(value = {
@io.swagger.annotations.ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
public Response queryParamsTest( @DefaultValue("11.2") @QueryParam("queryNumber") BigDecimal queryNumber, @DefaultValue("qwerty") @QueryParam("queryString") String queryString, @DefaultValue("qwerty") @QueryParam("queryStringWrapped") String queryStringWrapped, @DefaultValue("qwerty\"with quotes\" test") @QueryParam("queryStringQuotes") String queryStringQuotes, @DefaultValue("qwerty\"with quotes\" test") @QueryParam("queryStringQuotesWrapped") String queryStringQuotesWrapped, @DefaultValue("true") @QueryParam("queryBoolean") Boolean queryBoolean,@Context SecurityContext securityContext)
throws NotFoundException {
return service.queryParamsTest(queryNumber,queryString,queryStringWrapped,queryStringQuotes,queryStringQuotesWrapped,queryBoolean,securityContext);
}
}

View File

@ -1,22 +0,0 @@
package org.openapitools.api;
import org.openapitools.api.*;
import org.openapitools.model.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import org.openapitools.api.NotFoundException;
import java.io.InputStream;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public interface TestQueryParamsApiService {
Response queryParamsTest(BigDecimal queryNumber,String queryString,String queryStringWrapped,String queryStringQuotes,String queryStringQuotesWrapped,Boolean queryBoolean,SecurityContext securityContext)
throws NotFoundException;
}

View File

@ -1,118 +0,0 @@
package org.openapitools.model;
import java.util.Objects;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.*;
import io.swagger.annotations.*;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class TestResponse {
private Integer id;
private String stringField = "asd";
private BigDecimal numberField = new BigDecimal("11");
private Boolean booleanField = true;
/**
**/
@ApiModelProperty(required = true, value = "")
@JsonProperty("id")
@NotNull
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
/**
**/
@ApiModelProperty(required = true, value = "")
@JsonProperty("stringField")
@NotNull
public String getStringField() {
return stringField;
}
public void setStringField(String stringField) {
this.stringField = stringField;
}
/**
**/
@ApiModelProperty(required = true, value = "")
@JsonProperty("numberField")
@NotNull
public BigDecimal getNumberField() {
return numberField;
}
public void setNumberField(BigDecimal numberField) {
this.numberField = numberField;
}
/**
**/
@ApiModelProperty(required = true, value = "")
@JsonProperty("booleanField")
@NotNull
public Boolean getBooleanField() {
return booleanField;
}
public void setBooleanField(Boolean booleanField) {
this.booleanField = booleanField;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
TestResponse testResponse = (TestResponse) o;
return Objects.equals(id, testResponse.id) &&
Objects.equals(stringField, testResponse.stringField) &&
Objects.equals(numberField, testResponse.numberField) &&
Objects.equals(booleanField, testResponse.booleanField);
}
@Override
public int hashCode() {
return Objects.hash(id, stringField, numberField, booleanField);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class TestResponse {\n");
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" stringField: ").append(toIndentedString(stringField)).append("\n");
sb.append(" numberField: ").append(toIndentedString(numberField)).append("\n");
sb.append(" booleanField: ").append(toIndentedString(booleanField)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}

View File

@ -1,27 +0,0 @@
package org.openapitools.api.impl;
import org.openapitools.api.*;
import org.openapitools.model.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import org.openapitools.api.NotFoundException;
import java.io.InputStream;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@RequestScoped
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class TestHeadersApiServiceImpl implements TestHeadersApiService {
public Response headersTest(BigDecimal headerNumber,String headerString,String headerStringWrapped,String headerStringQuotes,String headerStringQuotesWrapped,Boolean headerBoolean,SecurityContext securityContext)
throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}
}

View File

@ -1,27 +0,0 @@
package org.openapitools.api.impl;
import org.openapitools.api.*;
import org.openapitools.model.*;
import java.math.BigDecimal;
import org.openapitools.model.TestResponse;
import java.util.List;
import org.openapitools.api.NotFoundException;
import java.io.InputStream;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
@RequestScoped
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaResteasyServerCodegen")
public class TestQueryParamsApiServiceImpl implements TestQueryParamsApiService {
public Response queryParamsTest(BigDecimal queryNumber,String queryString,String queryStringWrapped,String queryStringQuotes,String queryStringQuotesWrapped,Boolean queryBoolean,SecurityContext securityContext)
throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}
}

View File

@ -1,3 +0,0 @@
<jboss-web>
<context-root></context-root>
</jboss-web>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>ApiOriginFilter</filter-name>
<filter-class>org.openapitools.api.ApiOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>