You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ch...@apache.org on 2019/11/13 08:20:12 UTC
[servicecomb-toolkit] 08/10: add new processor
This is an automated email from the ASF dual-hosted git repository.
chanjarster pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit 9611763173e08fa8101a98234e709ad1642e305a
Author: kakulisen <18...@163.com>
AuthorDate: Tue Nov 12 08:02:56 2019 +0800
add new processor
Signed-off-by: kakulisen <18...@163.com>
---
.../contractgen/DefaultContractsGenerator.java | 2 +-
oas-generator/oas-generator-core/pom.xml | 19 +-
.../{HttpStatus.java => HttpStatuses.java} | 2 +-
.../{MediaTypeConst.java => MediaTypes.java} | 2 +-
.../toolkit/generator/ParameterContext.java | 141 --------
.../ApiResponseMethodAnnotationProcessor.java | 2 +-
.../ApiResponsesMethodAnnotationProcessor.java | 2 +-
.../OpenApiDefinitionClassAnnotationProcessor.java | 81 +++++
.../OperationMethodAnnotationProcessor.java | 50 +--
.../annotation/ParameterAnnotationProcessor.java | 69 ++--
.../RequestBodyParamAnnotationProcessor.java | 57 ++++
.../{HttpStatus.java => context/Context.java} | 8 +-
.../IExtensionsContext.java} | 9 +-
.../ISchemaContext.java} | 11 +-
.../generator/{ => context}/OasContext.java | 20 +-
.../generator/{ => context}/OasGenerator.java | 4 +-
.../generator/{ => context}/OperationContext.java | 142 +++++++-
.../generator/context/ParameterContext.java | 379 +++++++++++++++++++++
.../generator/parser/AbstractAnnotationParser.java | 19 +-
.../parser/api/OpenApiAnnotationParser.java | 6 +-
.../toolkit/generator/util/ModelConverter.java | 4 +
.../toolkit/generator/util/ParamUtils.java | 18 +-
.../generator/util/SwaggerAnnotationUtils.java | 98 ++++++
.../toolkit/generator/AnnotationProcessorTest.java | 263 +++++++++++++-
.../servicecomb/toolkit/generator/ContextTest.java | 112 ++++++
.../toolkit/generator/OasGeneratorTest.java | 8 +-
.../servicecomb/toolkit/generator/ParserTest.java | 1 +
.../servicecomb/toolkit/generator/UtilsTest.java | 27 +-
oas-generator/oas-generator-jaxrs/pom.xml | 14 +-
...essor.java => ConsumesAnnotationProcessor.java} | 10 +-
.../CookieParamAnnotationProcessor.java} | 13 +-
...ssor.java => FormParamAnnotationProcessor.java} | 13 +-
.../HeaderParamAnnotationProcessor.java} | 14 +-
.../annotation/HttpMethodAnnotationProcessor.java | 2 +-
.../annotation/PathClassAnnotationProcessor.java | 2 +-
.../annotation/PathMethodAnnotationProcessor.java | 2 +-
...ssor.java => PathParamAnnotationProcessor.java} | 12 +-
...sor.java => QueryParamAnnotationProcessor.java} | 12 +-
.../generator/parser/JaxRsAnnotationParser.java | 25 ++
.../generator/JaxrsAnnotationProcessorTest.java | 112 +++++-
.../toolkit/generator/JaxrsParserTest.java | 1 +
.../toolkit/generator/ServerOperationResource.java | 138 --------
oas-generator/oas-generator-servicecomb/pom.xml | 2 -
.../generator/parser/ServicecombPojoParser.java | 2 +-
.../toolkit/generator/ServiceCombParserTest.java | 1 +
oas-generator/oas-generator-spring/pom.xml | 1 -
...stractHttpMethodMappingAnnotationProcessor.java | 6 +-
.../DeleteMappingMethodAnnotationProcessor.java | 2 +-
.../GetMappingMethodAnnotationProcessor.java | 2 +-
.../PathVariableAnnotationProcessor.java | 10 +-
.../PostMappingMethodAnnotationProcessor.java | 2 +-
.../PutMappingMethodAnnotationProcessor.java | 2 +-
.../annotation/RequestBodyAnnotationProcessor.java | 4 +-
.../RequestHeaderAnnotationProcessor.java | 7 +-
.../RequestMappingClassAnnotationProcessor.java | 4 +-
.../RequestMappingMethodAnnotationProcessor.java | 4 +-
.../RequestParamAnnotationProcessor.java | 5 +-
.../annotation/RequestPartAnnotationProcessor.java | 9 +-
.../parser/SpringmvcAnnotationParser.java | 26 +-
.../generator/SpringAnnotationProcessorTest.java | 13 +-
.../toolkit/generator/SpringParserTest.java | 1 +
oas-generator/pom.xml | 117 +++++--
.../toolkit/goodbye/GoodbyeController.java | 6 +-
.../servicecomb/toolkit/plugin/GenerateUtil.java | 4 +-
64 files changed, 1664 insertions(+), 492 deletions(-)
diff --git a/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java b/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java
index e78abc5..80d6f48 100755
--- a/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java
+++ b/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java
@@ -37,7 +37,7 @@ import org.apache.servicecomb.provider.rest.common.RestSchema;
import org.apache.servicecomb.toolkit.ContractsGenerator;
import org.apache.servicecomb.toolkit.common.ContractFileType;
import org.apache.servicecomb.toolkit.common.ImmediateClassLoader;
-import org.apache.servicecomb.toolkit.generator.OasGenerator;
+import org.apache.servicecomb.toolkit.generator.context.OasGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/oas-generator/oas-generator-core/pom.xml b/oas-generator/oas-generator-core/pom.xml
index 1a7a35c..23d5d02 100644
--- a/oas-generator/oas-generator-core/pom.xml
+++ b/oas-generator/oas-generator-core/pom.xml
@@ -27,41 +27,44 @@
<artifactId>oas-generator-core</artifactId>
- <properties>
- <swagger.version>2.0.9</swagger.version>
- </properties>
<dependencies>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-models</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-core</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.12</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
- <version>7.2</version>
</dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatuses.java
similarity index 96%
copy from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
copy to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatuses.java
index 00a12e3..0064daa 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatuses.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator;
-public class HttpStatus {
+public class HttpStatuses {
public static String OK = "200";
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypeConst.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypes.java
similarity index 98%
rename from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypeConst.java
rename to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypes.java
index 624e143..eb8a587 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypeConst.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/MediaTypes.java
@@ -22,7 +22,7 @@ package org.apache.servicecomb.toolkit.generator;
*
* @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7">HTTP/1.1 section 3.7</a>
*/
-public class MediaTypeConst {
+public class MediaTypes {
public final static String WILDCARD = "*/*";
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/ParameterContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/ParameterContext.java
deleted file mode 100644
index 15e6721..0000000
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/ParameterContext.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.toolkit.generator;
-
-import java.lang.reflect.Parameter;
-import java.lang.reflect.Type;
-
-import org.apache.servicecomb.toolkit.generator.util.ModelConverter;
-import org.apache.servicecomb.toolkit.generator.util.ParamUtils;
-
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.models.Components;
-import io.swagger.v3.oas.models.media.Schema;
-
-public class ParameterContext {
-
- private OperationContext parentContext;
-
- private boolean required;
-
- private String name;
-
- Parameter parameter;
-
- private Object defaultValue;
-
-
- io.swagger.v3.oas.models.parameters.Parameter oasParameter = new io.swagger.v3.oas.models.parameters.Parameter();
-
- public ParameterContext(OperationContext parentContext, Parameter parameter) {
- this.parentContext = parentContext;
- this.parameter = parameter;
- this.parentContext.addParameter(this);
- }
-
-
- public io.swagger.v3.oas.models.parameters.Parameter toOasParameter() {
-
- if (parameter == null) {
- return null;
- }
- ensureName();
- if (oasParameter.getSchema() == null) {
- Schema refSchema = ModelConverter.getSchema(parameter.getType(), getComponents());
- oasParameter.schema(refSchema);
- }
-
- if (oasParameter.getIn() == null) {
- oasParameter.setIn(ParameterIn.QUERY.toString());
- }
-
- if (defaultValue != null) {
- required = false;
- oasParameter.getSchema().setDefault(defaultValue);
- }
-
- oasParameter.setRequired(required);
-
- return oasParameter;
- }
-
- private void ensureName() {
- if (name == null) {
- // 尝试获取实际参数名
- name = ParamUtils.getParamterName(parentContext.getMethod(), parameter);
- }
-
- if (name == null) {
- name = parameter.getName();
- }
-
- oasParameter.setName(name);
- }
-
- public OperationContext getOperationContext() {
- return parentContext;
- }
-
- public Type getActualType() {
- return parameter.getParameterizedType();
- }
-
- public Object getDefaultValue() {
- return defaultValue;
- }
-
- public void setDefaultValue(Object defaultValue) {
- this.defaultValue = defaultValue;
- }
-
- public Components getComponents() {
- return parentContext.getComponents();
- }
-
- public io.swagger.v3.oas.models.parameters.Parameter getOasParameter() {
- return oasParameter;
- }
-
- public Parameter getParameter() {
- return parameter;
- }
-
- public void setParameter(Parameter parameter) {
- this.parameter = parameter;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public boolean isRequired() {
- return required;
- }
-
- public void setRequired(boolean required) {
- this.required = required;
- }
-
- public void setType(String type) {
- oasParameter.setIn(type);
- }
-}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponseMethodAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponseMethodAnnotationProcessor.java
index 3cbbe0a..ea2a748 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponseMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponseMethodAnnotationProcessor.java
@@ -20,7 +20,7 @@ package org.apache.servicecomb.toolkit.generator.annotation;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import io.swagger.v3.oas.annotations.headers.Header;
import io.swagger.v3.oas.annotations.media.Content;
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponsesMethodAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponsesMethodAnnotationProcessor.java
index 54747ae..c6b481b 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponsesMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ApiResponsesMethodAnnotationProcessor.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.toolkit.generator.annotation;
import java.util.Arrays;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OpenApiDefinitionClassAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OpenApiDefinitionClassAnnotationProcessor.java
new file mode 100644
index 0000000..cc0a631
--- /dev/null
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OpenApiDefinitionClassAnnotationProcessor.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.generator.annotation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
+import io.swagger.v3.oas.annotations.info.Info;
+import io.swagger.v3.oas.models.info.Contact;
+import io.swagger.v3.oas.models.info.License;
+import io.swagger.v3.oas.models.servers.Server;
+import io.swagger.v3.oas.models.tags.Tag;
+
+public class OpenApiDefinitionClassAnnotationProcessor implements
+ ClassAnnotationProcessor<OpenAPIDefinition, OasContext> {
+
+ @Override
+ public void process(OpenAPIDefinition openAPIDefinition, OasContext context) {
+
+ Info infoAnnotation = openAPIDefinition.info();
+ io.swagger.v3.oas.models.info.Info info = new io.swagger.v3.oas.models.info.Info();
+ License license = new License();
+ Contact contact = new Contact();
+
+ license.url(infoAnnotation.license().url());
+ license.name(infoAnnotation.license().name());
+ contact.name(infoAnnotation.contact().name());
+ contact.url(infoAnnotation.contact().url());
+ contact.email(infoAnnotation.contact().email());
+
+ info
+ .description(infoAnnotation.description())
+ .title(infoAnnotation.title())
+ .version(infoAnnotation.version())
+ .license(license)
+ .contact(contact);
+ context.getOpenAPI().info(info);
+
+ if (openAPIDefinition.servers() != null) {
+ List<Server> serverList = new ArrayList<>();
+ for (io.swagger.v3.oas.annotations.servers.Server serverAnnotation : openAPIDefinition.servers()) {
+ Server server = new Server();
+ server.url(serverAnnotation.url());
+ server.description(serverAnnotation.description());
+ serverList.add(server);
+ }
+ context.getOpenAPI().servers(serverList);
+ }
+
+ if (openAPIDefinition.tags() != null) {
+ List<Tag> tagList = new ArrayList<>();
+ for (io.swagger.v3.oas.annotations.tags.Tag tagAnnotation : openAPIDefinition.tags()) {
+ Tag tag = new Tag();
+ tag
+ .name(tagAnnotation.name())
+ .description(tagAnnotation.description());
+ tagList.add(tag);
+ }
+
+ context.getOpenAPI().tags(tagList);
+ }
+ }
+}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OperationMethodAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OperationMethodAnnotationProcessor.java
index 517ea5b..52e7977 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OperationMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/OperationMethodAnnotationProcessor.java
@@ -17,16 +17,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Optional;
+
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.util.SwaggerAnnotationUtils;
-import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.extensions.Extension;
-import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.security.SecurityRequirement;
-import io.swagger.v3.oas.annotations.servers.Server;
public class OperationMethodAnnotationProcessor implements MethodAnnotationProcessor<Operation, OperationContext> {
@@ -34,24 +33,25 @@ public class OperationMethodAnnotationProcessor implements MethodAnnotationProce
public void process(Operation annotation, OperationContext context) {
context.setOperationId(annotation.operationId());
- String s = annotation.operationId();
- boolean deprecated = annotation.deprecated();
- String description = annotation.description();
- Extension[] extensions = annotation.extensions();
- ExternalDocumentation externalDocumentation = annotation.externalDocs();
- RequestBody requestBody = annotation.requestBody();
+ context.setDeprecated(annotation.deprecated());
+ context.setDescription(annotation.description());
+
+ Map<String, Object> extensionsFromAnnotation = SwaggerAnnotationUtils
+ .getExtensionsFromAnnotation(annotation.extensions());
+ Optional.ofNullable(extensionsFromAnnotation)
+ .ifPresent(extensions -> extensions.forEach(context::addExtension));
+
ApiResponse[] responses = annotation.responses();
- String method = annotation.method();
- Server[] servers = annotation.servers();
- SecurityRequirement[] security = annotation.security();
- String[] tags = annotation.tags();
- String summary = annotation.summary();
- Parameter[] parameters = annotation.parameters();
-
-// context.getOpenAPI().setPaths();
-
- // responseReference未解析
- // hidden未解析
- // authorizations未解析
+ MethodAnnotationProcessor apiResponseAnnotationProcessor = context.getParser()
+ .findMethodAnnotationProcessor(ApiResponse.class);
+
+ for (ApiResponse response : responses) {
+ Optional.ofNullable(apiResponseAnnotationProcessor)
+ .ifPresent(processor -> processor.process(response, context));
+ }
+
+ context.setHttpMethod(annotation.method());
+ context.setSummary(annotation.summary());
+ Arrays.stream(annotation.tags()).forEach(context::addTag);
}
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ParameterAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ParameterAnnotationProcessor.java
index 139bb0b..9648106 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ParameterAnnotationProcessor.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ParameterAnnotationProcessor.java
@@ -17,37 +17,68 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import java.lang.reflect.Type;
-import java.util.Arrays;
+import java.util.Collections;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
+import org.apache.servicecomb.toolkit.generator.util.SwaggerAnnotationUtils;
-import io.swagger.v3.core.util.ParameterProcessor;
-import io.swagger.v3.core.util.ReflectionUtils;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.Explode;
import io.swagger.v3.oas.annotations.media.Schema;
public class ParameterAnnotationProcessor implements ParamAnnotationProcessor<Parameter, ParameterContext> {
@Override
- public void process(Parameter parameter, ParameterContext parameterContext) {
+ public void process(Parameter parameterAnnotation, ParameterContext paramCtx) {
- Schema schema = parameter.schema();
- Type type = parameterContext.getActualType();
- if (schema != null) {
+ Schema schema = parameterAnnotation.schema();
- if (StringUtils.isNotEmpty(schema.type())) {
- parameterContext.setType(schema.type());
- type = ReflectionUtils.typeFromString(schema.type());
- }
+ io.swagger.v3.oas.models.media.Schema schemaFromAnnotation = SwaggerAnnotationUtils.getSchemaFromAnnotation(schema);
+ if (schemaFromAnnotation != null) {
+ paramCtx.setSchema(schemaFromAnnotation);
}
- ParameterProcessor
- .applyAnnotations(parameterContext.getOasParameter(), type, Arrays.asList(parameter),
- parameterContext.getComponents(),
- null, null, null);
+ paramCtx.setRequired(parameterAnnotation.required());
+ paramCtx.setAllowEmptyValue(parameterAnnotation.allowEmptyValue());
+ paramCtx.setAllowReserved(parameterAnnotation.allowReserved());
+ paramCtx.setDeprecated(parameterAnnotation.deprecated());
+ paramCtx.setExample(parameterAnnotation.example());
+
+ switch (parameterAnnotation.in()) {
+ case HEADER:
+ paramCtx.setIn(InType.HEADER);
+ break;
+ case COOKIE:
+ paramCtx.setIn(InType.COOKIE);
+ break;
+ case PATH:
+ paramCtx.setIn(InType.PATH);
+ break;
+ case QUERY:
+ case DEFAULT:
+ default:
+ paramCtx.setIn(InType.QUERY);
+ }
+
+ paramCtx.setDescription(parameterAnnotation.description());
+ paramCtx.setRef(parameterAnnotation.ref());
+ paramCtx.setName(parameterAnnotation.name());
+ paramCtx.setExplode(getExplode(parameterAnnotation.explode()));
+ paramCtx.applyAnnotations(Collections.singletonList(parameterAnnotation));
+ }
- parameterContext.setRequired(parameter.required());
+ private Boolean getExplode(Explode explode) {
+
+ switch (explode) {
+ case TRUE: {
+ return true;
+ }
+ case FALSE:
+ case DEFAULT:
+ default: {
+ return false;
+ }
+ }
}
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyParamAnnotationProcessor.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyParamAnnotationProcessor.java
new file mode 100644
index 0000000..def5d28
--- /dev/null
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyParamAnnotationProcessor.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.generator.annotation;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
+import org.apache.servicecomb.toolkit.generator.util.SwaggerAnnotationUtils;
+
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+
+public class RequestBodyParamAnnotationProcessor implements ParamAnnotationProcessor<RequestBody, ParameterContext> {
+
+ @Override
+ public void process(RequestBody requestBodyAnnotation, ParameterContext context) {
+
+ context.setIn(InType.BODY);
+ io.swagger.v3.oas.models.parameters.RequestBody requestBody = new io.swagger.v3.oas.models.parameters.RequestBody();
+
+ requestBody.setRequired(requestBodyAnnotation.required());
+ requestBody.setDescription(requestBodyAnnotation.description());
+
+ if (StringUtils.isNotEmpty(requestBodyAnnotation.ref())) {
+ requestBody.set$ref(requestBodyAnnotation.ref());
+ }
+
+ Content[] contentAnnotations = requestBodyAnnotation.content();
+
+ List<io.swagger.v3.oas.models.media.Content> contentsFromAnnotation = SwaggerAnnotationUtils
+ .getContentFromAnnotation(contentAnnotations);
+
+ Optional.ofNullable(contentsFromAnnotation).ifPresent(contents -> {
+ requestBody.content(contents.get(0));
+ });
+
+ context.setRequestBody(requestBody);
+ }
+}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/Context.java
similarity index 79%
copy from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
copy to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/Context.java
index 00a12e3..51a0500 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/Context.java
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
-public class HttpStatus {
-
- public static String OK = "200";
+import org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser;
+public interface Context {
+ OpenApiAnnotationParser getParser();
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/IExtensionsContext.java
similarity index 78%
copy from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
copy to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/IExtensionsContext.java
index 00a12e3..ffb8b81 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/IExtensionsContext.java
@@ -15,10 +15,13 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
-public class HttpStatus {
+import java.util.Map;
- public static String OK = "200";
+public interface IExtensionsContext extends Context {
+ void addExtension(String name, Object value);
+
+ Map<String, Object> getExtensions();
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ISchemaContext.java
similarity index 77%
rename from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
rename to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ISchemaContext.java
index 00a12e3..bc0b1ec 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/HttpStatus.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ISchemaContext.java
@@ -15,10 +15,13 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
-public class HttpStatus {
+import io.swagger.v3.oas.models.media.Schema;
- public static String OK = "200";
+public interface ISchemaContext extends Context, IExtensionsContext {
-}
+ Schema getSchema();
+
+ void setSchema(Schema schema);
+}
\ No newline at end of file
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
similarity index 87%
rename from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasContext.java
rename to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
index 3be7edb..22bc2c7 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser;
@@ -32,7 +33,7 @@ import io.swagger.v3.oas.models.Paths;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.servers.Server;
-public class OasContext {
+public class OasContext implements IExtensionsContext {
private OpenAPI openAPI;
@@ -44,6 +45,8 @@ public class OasContext {
private OpenApiAnnotationParser parser;
+ private List<ISchemaContext> schemaCtxList = new ArrayList<>();
+
public OasContext(OpenApiAnnotationParser parser) {
this(new OpenAPI(), parser);
}
@@ -83,7 +86,7 @@ public class OasContext {
correctComponents();
openAPI.servers(Collections.singletonList(new Server().url(basePath)));
-
+ schemaCtxList.forEach(schemaCtx -> openAPI.schema(schemaCtx.getSchema().getName(), schemaCtx.getSchema()));
return openAPI;
}
@@ -117,6 +120,7 @@ public class OasContext {
}
}
+ @Override
public OpenApiAnnotationParser getParser() {
return parser;
}
@@ -148,4 +152,14 @@ public class OasContext {
public void addOperation(OperationContext operation) {
operationList.add(operation);
}
+
+ @Override
+ public void addExtension(String name, Object value) {
+ openAPI.addExtension(name, value);
+ }
+
+ @Override
+ public Map<String, Object> getExtensions() {
+ return openAPI.getExtensions();
+ }
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasGenerator.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasGenerator.java
similarity index 92%
rename from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasGenerator.java
rename to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasGenerator.java
index 540f320..e31d6d3 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OasGenerator.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasGenerator.java
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.ServiceLoader;
@@ -33,6 +34,7 @@ public class OasGenerator {
static {
ServiceLoader.load(OpenApiAnnotationParser.class).forEach(parserList::add);
+ parserList.sort(Comparator.comparingInt(OpenApiAnnotationParser::getOrder));
}
public OpenAPI generate(Class<?> cls) {
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OperationContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
similarity index 56%
rename from oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OperationContext.java
rename to oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
index d7ad2c7..02d8352 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/OperationContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
@@ -15,14 +15,17 @@
* limitations under the License.
*/
-package org.apache.servicecomb.toolkit.generator;
+package org.apache.servicecomb.toolkit.generator.context;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.toolkit.generator.HttpStatuses;
+import org.apache.servicecomb.toolkit.generator.MediaTypes;
import org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser;
import org.apache.servicecomb.toolkit.generator.util.ModelConverter;
@@ -31,12 +34,16 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
+import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
+import io.swagger.v3.oas.models.parameters.RequestBody;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
-public class OperationContext {
+public class OperationContext implements IExtensionsContext {
+
+ private static final RequestBody nullRequestBody = new RequestBody();
private OasContext parentContext;
@@ -52,10 +59,20 @@ public class OperationContext {
private ApiResponses apiResponses = new ApiResponses();
- private List<ParameterContext> parameterContextList = new ArrayList<>();
+ private List<ParameterContext> parameterContexts = new ArrayList<>();
private OpenApiAnnotationParser parser;
+ private Boolean deprecated = false;
+
+ private String description = null;
+
+ private String summary;
+
+ private List<String> tags;
+
+ private String[] consumers;
+
public OperationContext(Method method, OasContext parentContext) {
this.parentContext = parentContext;
this.method = method;
@@ -63,10 +80,7 @@ public class OperationContext {
this.parentContext.addOperation(this);
}
- public void addParameter(ParameterContext context) {
- parameterContextList.add(context);
- }
-
+ @Override
public OpenApiAnnotationParser getParser() {
return parser;
}
@@ -89,9 +103,45 @@ public class OperationContext {
correctResponse(apiResponses);
operation.setResponses(apiResponses);
+ RequestBody requestBody = new RequestBody();
+ Content content = new Content();
+ MediaType mediaType = new MediaType();
+
// 处理参数
- List<Parameter> parameterList = parameterContextList.stream()
- .map(parameterContext -> parameterContext.toOasParameter())
+ List<Parameter> parameterList = parameterContexts.stream()
+ .map(parameterContext ->
+ {
+ // requestBody
+ if (parameterContext.isRequestBody()) {
+
+ Schema schema = mediaType.getSchema();
+ if (schema == null) {
+ schema = new ObjectSchema();
+ mediaType.schema(schema);
+ }
+ schema.addProperties(parameterContext.getName(), parameterContext.getSchema());
+ if (consumers != null) {
+ for (String consume : getConsumers()) {
+ content.addMediaType(consume, mediaType);
+ }
+ } else {
+ if (parameterContext.getConsumers() != null && parameterContext.getConsumers().size() > 0) {
+ for (String consume : parameterContext.getConsumers()) {
+ content.addMediaType(consume, mediaType);
+ }
+ } else {
+ content.addMediaType(MediaTypes.APPLICATION_JSON, mediaType);
+ }
+ }
+
+ requestBody.setContent(content);
+ requestBody.setRequired(parameterContext.getRequired());
+ return null;
+ }
+
+ // parameter
+ return parameterContext.toParameter();
+ })
.filter(parameter -> parameter != null)
.collect(Collectors.toList());
@@ -99,9 +149,16 @@ public class OperationContext {
operation.parameters(parameterList);
}
+ if (!nullRequestBody.equals(requestBody)) {
+ operation.setRequestBody(requestBody);
+ }
return operation;
}
+ public void setRequestBody(RequestBody requestBody) {
+ operation.requestBody(requestBody);
+ }
+
public void correctResponse(ApiResponses apiResponses) {
if (apiResponses == null) {
@@ -109,7 +166,7 @@ public class OperationContext {
}
// 处理响应
// 没有注解被处理
- if (apiResponses.get(HttpStatus.OK) == null) {
+ if (apiResponses.get(HttpStatuses.OK) == null) {
ApiResponse apiResponse = new ApiResponse();
Class<?> returnType = method.getReturnType();
@@ -123,10 +180,10 @@ public class OperationContext {
mediaType.schema(refSchema);
Content content = new Content();
- content.addMediaType(MediaTypeConst.APPLICATION_JSON, mediaType);
+ content.addMediaType(MediaTypes.APPLICATION_JSON, mediaType);
apiResponse.description("OK");
apiResponse.setContent(content);
- apiResponses.addApiResponse(HttpStatus.OK, apiResponse);
+ apiResponses.addApiResponse(HttpStatuses.OK, apiResponse);
}
}
@@ -188,4 +245,65 @@ public class OperationContext {
}
this.httpMethod = httpMethod.toUpperCase();
}
+
+ public Boolean getDeprecated() {
+ return deprecated;
+ }
+
+ public void setDeprecated(Boolean deprecated) {
+ this.deprecated = deprecated;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public List<String> getTags() {
+ return tags;
+ }
+
+ public void setTags(List<String> tags) {
+ this.tags = tags;
+ }
+
+ public void addTag(String tag) {
+ if (tags == null) {
+ tags = new ArrayList<>();
+ }
+ tags.add(tag);
+ }
+
+ @Override
+ public void addExtension(String name, Object value) {
+ operation.addExtension(name, value);
+ }
+
+ @Override
+ public Map<String, Object> getExtensions() {
+ return operation.getExtensions();
+ }
+
+ public String[] getConsumers() {
+ return consumers;
+ }
+
+ public void setConsumers(String[] consumers) {
+ this.consumers = consumers;
+ }
+
+ public void addParamCtx(ParameterContext ctx) {
+ this.parameterContexts.add(ctx);
+ }
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ParameterContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ParameterContext.java
new file mode 100644
index 0000000..57d66b1
--- /dev/null
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ParameterContext.java
@@ -0,0 +1,379 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.generator.context;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Parameter;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser;
+import org.apache.servicecomb.toolkit.generator.util.ModelConverter;
+import org.apache.servicecomb.toolkit.generator.util.ParamUtils;
+
+import io.swagger.v3.core.util.ParameterProcessor;
+import io.swagger.v3.core.util.ReflectionUtils;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.enums.ParameterStyle;
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.examples.Example;
+import io.swagger.v3.oas.models.media.Content;
+import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.parameters.RequestBody;
+
+public class ParameterContext implements ISchemaContext, IExtensionsContext {
+
+ private final static Schema nullSchema = new Schema();
+
+ private OperationContext parentContext;
+
+ private Parameter parameter;
+
+ private Object defaultValue;
+
+ private io.swagger.v3.oas.models.parameters.Parameter oasParameter = new io.swagger.v3.oas.models.parameters.Parameter();
+
+ private String name = null;
+
+ private InType in = null;
+
+ private String description = null;
+
+ private Boolean required = null;
+
+ private Boolean deprecated = null;
+
+ private Boolean allowEmptyValue = null;
+
+ private ParameterStyle style;
+
+ private Boolean explode = null;
+
+ private Boolean allowReserved = null;
+
+ private Schema schema;
+
+ private Object example = null;
+
+ private Map<String, Example> examples = null;
+
+ private Content content = null;
+
+ private String ref = null;
+
+ private RequestBody requestBody;
+
+ private List<String> consumers;
+
+ public ParameterContext(OperationContext parentContext, Parameter parameter) {
+ this.parentContext = parentContext;
+ this.parameter = parameter;
+ parentContext.addParamCtx(this);
+ }
+
+ public io.swagger.v3.oas.models.parameters.Parameter toParameter() {
+
+ if (parameter == null) {
+ return null;
+ }
+ ensureName();
+ if (schema == null || nullSchema.equals(schema)) {
+ schema = ModelConverter.getSchema(parameter.getType(), getComponents());
+ oasParameter.schema(schema);
+ }
+
+ if (in == null) {
+ oasParameter.setIn(ParameterIn.QUERY.toString());
+ } else {
+ switch (in) {
+ case PATH: {
+ oasParameter.setIn(ParameterIn.PATH.toString());
+ break;
+ }
+ case QUERY: {
+ oasParameter.setIn(ParameterIn.QUERY.toString());
+ break;
+ }
+ case COOKIE: {
+ oasParameter.setIn(ParameterIn.COOKIE.toString());
+ break;
+ }
+ case HEADER: {
+ oasParameter.setIn(ParameterIn.HEADER.toString());
+ break;
+ }
+ default:
+ oasParameter.setIn(ParameterIn.QUERY.toString());
+ }
+ }
+
+ if (defaultValue != null) {
+ required = false;
+ oasParameter.getSchema().setDefault(defaultValue);
+ }
+
+ oasParameter.setRequired(required);
+ return oasParameter;
+ }
+
+ public boolean isRequestBody() {
+ if (in != null && (in.equals(InType.BODY) || in.equals(InType.FORM))) {
+ return true;
+ }
+ return false;
+ }
+
+ public void applyAnnotations(List<Annotation> annotations) {
+ ParameterProcessor
+ .applyAnnotations(oasParameter, getType(), annotations,
+ getComponents(),
+ null, null, null);
+ }
+
+ private void ensureName() {
+ if (StringUtils.isEmpty(name)) {
+ // try get real type
+ name = ParamUtils.getParameterName(parentContext.getMethod(), parameter);
+ }
+
+ if (StringUtils.isEmpty(name)) {
+ name = parameter.getName();
+ }
+
+ oasParameter.setName(name);
+ }
+
+ public OperationContext getOperationContext() {
+ return parentContext;
+ }
+
+ public Object getDefaultValue() {
+ return defaultValue;
+ }
+
+ public void setDefaultValue(Object defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public Components getComponents() {
+ return parentContext.getComponents();
+ }
+
+ public io.swagger.v3.oas.models.parameters.Parameter getOasParameter() {
+ return oasParameter;
+ }
+
+ public Parameter getParameter() {
+ return parameter;
+ }
+
+ public void setParameter(Parameter parameter) {
+ this.parameter = parameter;
+ }
+
+ public boolean isRequired() {
+ return required;
+ }
+
+ public Type getType() {
+
+ if (getRealType() != null) {
+ return getRealType();
+ }
+
+ if (StringUtils.isNotEmpty(oasParameter.getIn())) {
+ return ReflectionUtils.typeFromString(oasParameter.getIn());
+ }
+
+ return null;
+ }
+
+ public void addConsume(String consume) {
+ if (consumers == null) {
+ consumers = new ArrayList<>();
+ }
+ consumers.add(consume);
+ }
+
+ public List<String> getConsumers() {
+ return consumers;
+ }
+
+ public Type getRealType() {
+ return parameter.getParameterizedType();
+ }
+
+ public void setRequestBody(RequestBody requestBody) {
+ required = requestBody.getRequired();
+ description = requestBody.getDescription();
+ this.requestBody = requestBody;
+ }
+
+ public RequestBody getRequestBody() {
+ return requestBody;
+ }
+
+ @Override
+ public Schema getSchema() {
+
+ Schema refSchema = oasParameter.getSchema();
+ if (refSchema == null || nullSchema.equals(refSchema)) {
+ refSchema = ModelConverter.getSchema(parameter.getType(), getComponents());
+ oasParameter.schema(refSchema);
+ }
+
+ return refSchema;
+ }
+
+ @Override
+ public void setSchema(Schema schema) {
+ this.schema = schema;
+ }
+
+ @Override
+ public void addExtension(String name, Object value) {
+ oasParameter.addExtension(name, value);
+ }
+
+ @Override
+ public Map<String, Object> getExtensions() {
+ return oasParameter.getExtensions();
+ }
+
+ @Override
+ public OpenApiAnnotationParser getParser() {
+ return parentContext.getParser();
+ }
+
+ public String getName() {
+ ensureName();
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public InType getIn() {
+ return in;
+ }
+
+ public void setIn(InType in) {
+ this.in = in;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Boolean getRequired() {
+ return required;
+ }
+
+ public void setRequired(Boolean required) {
+ this.required = required;
+ }
+
+ public Boolean getDeprecated() {
+ return deprecated;
+ }
+
+ public void setDeprecated(Boolean deprecated) {
+ this.deprecated = deprecated;
+ }
+
+ public Boolean getAllowEmptyValue() {
+ return allowEmptyValue;
+ }
+
+ public void setAllowEmptyValue(Boolean allowEmptyValue) {
+ this.allowEmptyValue = allowEmptyValue;
+ }
+
+ public ParameterStyle getStyle() {
+ return style;
+ }
+
+ public void setStyle(ParameterStyle style) {
+ this.style = style;
+ }
+
+ public Boolean getExplode() {
+ return explode;
+ }
+
+ public void setExplode(Boolean explode) {
+ this.explode = explode;
+ }
+
+ public Boolean getAllowReserved() {
+ return allowReserved;
+ }
+
+ public void setAllowReserved(Boolean allowReserved) {
+ this.allowReserved = allowReserved;
+ }
+
+ public Object getExample() {
+ return example;
+ }
+
+ public void setExample(Object example) {
+ this.example = example;
+ }
+
+ public Map<String, Example> getExamples() {
+ return examples;
+ }
+
+ public void setExamples(Map<String, Example> examples) {
+ this.examples = examples;
+ }
+
+ public Content getContent() {
+ return content;
+ }
+
+ public void setContent(Content content) {
+ this.content = content;
+ }
+
+ public String getRef() {
+ return ref;
+ }
+
+ public void setRef(String ref) {
+ this.ref = ref;
+ }
+
+ public enum InType {
+ QUERY,
+ PATH,
+ HEADER,
+ COOKIE,
+ FORM,
+ BODY
+ }
+}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/AbstractAnnotationParser.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/AbstractAnnotationParser.java
index 5b3a4fa..0f44a3c 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/AbstractAnnotationParser.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/AbstractAnnotationParser.java
@@ -25,21 +25,25 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apache.servicecomb.toolkit.generator.OasContext;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
import org.apache.servicecomb.toolkit.generator.annotation.AnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ApiResponseMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ApiResponsesMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.MethodAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.OpenApiDefinitionClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.OperationMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ParamAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ParameterAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.RequestBodyParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
import org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser;
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@@ -49,11 +53,11 @@ public abstract class AbstractAnnotationParser implements OpenApiAnnotationParse
private OasContext context;
- protected Map<Class, ClassAnnotationProcessor> classAnnotationMap = new HashMap<>();
+ protected Map<Class<? extends Annotation>, ClassAnnotationProcessor> classAnnotationMap = new HashMap<>();
- protected Map<Class, MethodAnnotationProcessor> methodAnnotationMap = new HashMap<>();
+ protected Map<Class<? extends Annotation>, MethodAnnotationProcessor> methodAnnotationMap = new HashMap<>();
- protected Map<Class, ParamAnnotationProcessor> parameterAnnotationMap = new HashMap<>();
+ protected Map<Class<? extends Annotation>, ParamAnnotationProcessor> parameterAnnotationMap = new HashMap<>();
public AbstractAnnotationParser() {
initMethodAnnotationProcessor();
@@ -128,11 +132,12 @@ public abstract class AbstractAnnotationParser implements OpenApiAnnotationParse
}
public void initClassAnnotationProcessor() {
-
+ classAnnotationMap.put(OpenAPIDefinition.class, new OpenApiDefinitionClassAnnotationProcessor());
}
public void initParameterAnnotationProcessor() {
parameterAnnotationMap.put(Parameter.class, new ParameterAnnotationProcessor());
+ parameterAnnotationMap.put(RequestBody.class, new RequestBodyParamAnnotationProcessor());
}
@Override
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/api/OpenApiAnnotationParser.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/api/OpenApiAnnotationParser.java
index 1fbdd9e..f4f722e 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/api/OpenApiAnnotationParser.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/parser/api/OpenApiAnnotationParser.java
@@ -19,9 +19,9 @@ package org.apache.servicecomb.toolkit.generator.parser.api;
import java.lang.annotation.Annotation;
-import org.apache.servicecomb.toolkit.generator.OasContext;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
import org.apache.servicecomb.toolkit.generator.annotation.ClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.MethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ParamAnnotationProcessor;
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ModelConverter.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ModelConverter.java
index 0370c31..307863d 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ModelConverter.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ModelConverter.java
@@ -60,6 +60,10 @@ public class ModelConverter {
interceptorMgr.sort(Comparator.comparingInt(ModelInterceptor::order));
}
+ public static void unRegisterInterceptor(ModelInterceptor interceptor) {
+ interceptorMgr.remove(interceptor);
+ }
+
public static Schema getSchema(Class<?> cls) {
return getSchema(cls, null);
}
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ParamUtils.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ParamUtils.java
index 9093630..3a2e815 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ParamUtils.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/ParamUtils.java
@@ -36,14 +36,14 @@ public class ParamUtils {
private static final String STATIC_CLASS_INIT = "<clinit>";
- public static final Map<Method, String[]> paramterCache = new HashMap();
+ public static final Map<Method, String[]> parameterCache = new HashMap();
- public static String getParamterName(Method method, Parameter parameter) {
+ public static String getParameterName(Method method, Parameter parameter) {
- String[] parameterNames = paramterCache.get(method);
+ String[] parameterNames = parameterCache.get(method);
if (parameterNames == null) {
- parameterNames = initParamterNames(method);
+ parameterNames = initParameterNames(method);
if (parameterNames == null) {
return null;
}
@@ -67,10 +67,10 @@ public class ParamUtils {
return -1;
}
- private static String[] initParamterNames(Method m) {
+ private static String[] initParameterNames(Method m) {
boolean isStatic = Modifier.isStatic(m.getModifiers());
- String[] paramterNames = new String[m.getParameterCount()];
+ String[] parameterNames = new String[m.getParameterCount()];
try {
@@ -101,7 +101,7 @@ public class ParamUtils {
}
if (!isSyntheticOrBridged(access) && !STATIC_CLASS_INIT.equals(name)) {
- return new LocalVariableVisitor(this.api, descriptor, isStatic, paramterNames);
+ return new LocalVariableVisitor(this.api, descriptor, isStatic, parameterNames);
}
return methodVisitor;
@@ -111,9 +111,9 @@ public class ParamUtils {
e.printStackTrace();
}
- paramterCache.put(m, paramterNames);
+ parameterCache.put(m, parameterNames);
- return paramterNames;
+ return parameterNames;
}
private static boolean isSyntheticOrBridged(int access) {
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/SwaggerAnnotationUtils.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/SwaggerAnnotationUtils.java
new file mode 100644
index 0000000..0058d1b
--- /dev/null
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/util/SwaggerAnnotationUtils.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.generator.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import io.swagger.v3.oas.annotations.extensions.Extension;
+import io.swagger.v3.oas.annotations.extensions.ExtensionProperty;
+import io.swagger.v3.oas.annotations.media.Encoding;
+import io.swagger.v3.oas.models.media.Content;
+import io.swagger.v3.oas.models.media.MediaType;
+import io.swagger.v3.oas.models.media.Schema;
+
+public class SwaggerAnnotationUtils {
+
+ public static List<Content> getContentFromAnnotation(
+ io.swagger.v3.oas.annotations.media.Content... contentAnnotations) {
+
+ if (contentAnnotations == null || contentAnnotations.length < 1) {
+ return null;
+ }
+
+ List<Content> contents = new ArrayList<>();
+
+ for (io.swagger.v3.oas.annotations.media.Content contentAnnotation : contentAnnotations) {
+ io.swagger.v3.oas.models.media.Content content = new io.swagger.v3.oas.models.media.Content();
+ MediaType mediaType = new MediaType();
+ Encoding[] encodingAnnotations = contentAnnotation.encoding();
+ Optional.ofNullable(encodingAnnotations).ifPresent(encodings -> {
+ for (Encoding encodingAnnotation : encodings) {
+ io.swagger.v3.oas.models.media.Encoding encoding = new io.swagger.v3.oas.models.media.Encoding();
+ encoding.contentType(encodingAnnotation.contentType());
+ encoding.allowReserved(encodingAnnotation.allowReserved());
+ encoding.explode(encodingAnnotation.explode());
+ mediaType.addEncoding(encodingAnnotation.name(), encoding);
+ }
+ });
+ content.addMediaType(contentAnnotation.mediaType(), mediaType);
+ contents.add(content);
+ }
+ return contents;
+ }
+
+ public static Schema getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema) {
+ if (schema == null) {
+ return null;
+ }
+ Schema schemaObj = new Schema();
+ schemaObj.setName(schema.name());
+ schemaObj.setDescription(schema.description());
+ schemaObj.setType(schema.type());
+ schemaObj.setTitle(schema.title());
+ schemaObj.setNullable(schema.nullable());
+ schemaObj.setDefault(schema.defaultValue());
+ schemaObj.setFormat(schema.format());
+ schemaObj.setDeprecated(schema.deprecated());
+ Map<String, Object> extensionsFromAnnotation = getExtensionsFromAnnotation(schema.extensions());
+ schemaObj.extensions(extensionsFromAnnotation);
+ return schemaObj;
+ }
+
+ public static Map<String, Object> getExtensionsFromAnnotation(Extension... extensions) {
+ if (extensions == null || extensions.length < 1) {
+ return null;
+ }
+
+ Map<String, Object> extensionMap = new HashMap<>();
+ for (Extension extension : extensions) {
+ ExtensionProperty[] properties = extension.properties();
+ Optional.ofNullable(properties).ifPresent(props -> {
+ for (ExtensionProperty prop : props) {
+ extensionMap.put(prop.name(), prop.value());
+ }
+ });
+ }
+
+ return extensionMap;
+ }
+}
diff --git a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/AnnotationProcessorTest.java b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/AnnotationProcessorTest.java
index c6bbf56..a46854d 100644
--- a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/AnnotationProcessorTest.java
+++ b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/AnnotationProcessorTest.java
@@ -23,16 +23,38 @@ import org.apache.servicecomb.toolkit.generator.annotation.ApiResponseMethodAnno
import org.apache.servicecomb.toolkit.generator.annotation.ApiResponsesMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.OperationMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.ParameterAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
import org.apache.servicecomb.toolkit.generator.parser.AbstractAnnotationParser;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
+import io.swagger.v3.oas.annotations.ExternalDocumentation;
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.Explode;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.enums.ParameterStyle;
+import io.swagger.v3.oas.annotations.extensions.Extension;
+import io.swagger.v3.oas.annotations.extensions.ExtensionProperty;
+import io.swagger.v3.oas.annotations.headers.Header;
+import io.swagger.v3.oas.annotations.info.Contact;
+import io.swagger.v3.oas.annotations.info.Info;
+import io.swagger.v3.oas.annotations.info.License;
+import io.swagger.v3.oas.annotations.links.Link;
import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.ExampleObject;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.servers.Server;
+import io.swagger.v3.oas.annotations.servers.ServerVariable;
+import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.models.media.StringSchema;
public class AnnotationProcessorTest {
@@ -46,7 +68,7 @@ public class AnnotationProcessorTest {
ApiResponse apiResponse = Mockito.mock(ApiResponse.class);
Content[] contents = new Content[1];
contents[0] = Mockito.mock(Content.class);
- Mockito.when(contents[0].mediaType()).thenReturn(MediaTypeConst.APPLICATION_JSON);
+ Mockito.when(contents[0].mediaType()).thenReturn(MediaTypes.APPLICATION_JSON);
Mockito.when(apiResponse.content()).thenReturn(contents);
Mockito.when(apiResponse.responseCode()).thenReturn("200");
apiResProcessor.process(apiResponse, context);
@@ -75,7 +97,7 @@ public class AnnotationProcessorTest {
ApiResponses apiResponses = Mockito.mock(ApiResponses.class);
Content[] contents = new Content[1];
contents[0] = Mockito.mock(Content.class);
- Mockito.when(contents[0].mediaType()).thenReturn(MediaTypeConst.APPLICATION_JSON);
+ Mockito.when(contents[0].mediaType()).thenReturn(MediaTypes.APPLICATION_JSON);
ApiResponse apiResponse = Mockito.mock(ApiResponse.class);
Mockito.when(apiResponse.content()).thenReturn(contents);
Mockito.when(apiResponse.responseCode()).thenReturn("200");
@@ -88,12 +110,28 @@ public class AnnotationProcessorTest {
}
@Test
- public void processOperationAnnotation() {
+ public void processOperationAnnotation() throws NoSuchMethodException {
OasContext oasContext = new OasContext(null);
OperationContext context = new OperationContext(null, oasContext);
OperationMethodAnnotationProcessor operationMethodAnnotationProcessor = new OperationMethodAnnotationProcessor();
- Operation operation = Mockito.mock(Operation.class);
+// Operation operation = Mockito.mock(Operation.class);
+// operationMethodAnnotationProcessor.process(operation, context);
+
+ Method helloMethod = OpenapiDef.class.getDeclaredMethod("hello", String.class, Object.class);
+ Operation operation = helloMethod.getAnnotation(Operation.class);
+ oasContext = new OasContext(new AbstractAnnotationParser() {
+ @Override
+ public int getOrder() {
+ return 0;
+ }
+
+ @Override
+ public boolean canProcess(Class<?> cls) {
+ return true;
+ }
+ });
+ context = new OperationContext(helloMethod, oasContext);
operationMethodAnnotationProcessor.process(operation, context);
}
@@ -114,7 +152,7 @@ public class AnnotationProcessorTest {
ParameterAnnotationProcessor parameterAnnotationProcessor = new ParameterAnnotationProcessor();
parameterAnnotationProcessor.process(parameterDeclaredAnnotation, parameterContext);
- io.swagger.v3.oas.models.parameters.Parameter oasParameter = parameterContext.toOasParameter();
+ io.swagger.v3.oas.models.parameters.Parameter oasParameter = parameterContext.toParameter();
Assert.assertEquals("param", oasParameter.getName());
Assert.assertEquals(StringSchema.class, oasParameter.getSchema().getClass());
Assert.assertTrue(parameterContext.isRequired());
@@ -126,4 +164,219 @@ public class AnnotationProcessorTest {
public void parameter(@Parameter(required = true) String param) {
}
}
+
+ @OpenAPIDefinition(
+ info = @Info(
+ title = "openapi definition",
+ description = "test openapi definition",
+ termsOfService = "",
+ contact = @Contact(
+ name = "developer",
+ url = "developer.com",
+ email = "developer@developer.com",
+ extensions = {
+ @Extension(
+ name = "ext1",
+ properties = {
+ @ExtensionProperty(
+ name = "k1",
+ value = "v1",
+ parseValue = true
+ )
+ })
+ }
+ ),
+ license = @License(
+ name = "Apache License v2.0",
+ url = "",
+ extensions = {
+ @Extension(
+ name = "ext2",
+ properties = {
+ @ExtensionProperty(
+ name = "k1",
+ value = "v1",
+ parseValue = true
+ )
+ }
+ )
+ }
+ ),
+ version = "0.2.0",
+ extensions = {
+ @Extension(
+ name = "ext3",
+ properties = {
+ @ExtensionProperty(
+ name = "k1",
+ value = "v2"
+ )
+ }
+ )
+ }
+ ),
+ tags = {
+ @Tag(
+ name = "",
+ description = "",
+ externalDocs = @ExternalDocumentation(
+ description = "",
+ url = "",
+ extensions = {
+ @Extension(
+ name = "ext4",
+ properties = {
+ @ExtensionProperty(
+ name = "k1",
+ value = "v2"
+ )
+ }
+ )
+ }
+ )
+ )
+ },
+ servers = {
+ @Server(
+ url = "http://localhost",
+ description = "",
+ variables = {
+ @ServerVariable(
+ name = "",
+ description = "",
+ defaultValue = "",
+ allowableValues = {},
+ extensions = {
+ @Extension(
+ name = "",
+ properties = @ExtensionProperty(
+ name = "",
+ value = "",
+ parseValue = true
+ )
+ )
+ }
+ )
+ }
+ )
+ },
+ security = {},
+ externalDocs = @ExternalDocumentation(
+ description = "",
+ url = "",
+ extensions = {
+ @Extension(
+ name = "",
+ properties = @ExtensionProperty(
+ name = "",
+ value = "",
+ parseValue = true
+ )
+ )
+ }
+ ),
+ extensions = {
+ @Extension(
+ name = "",
+ properties = @ExtensionProperty(
+ name = "",
+ value = "",
+ parseValue = true
+ )
+ )
+ }
+ )
+ class OpenapiDef {
+
+ @Operation(
+ operationId = "hello-operation",
+ method = "GET",
+ tags = {
+ "OpenapiDef"
+ },
+ summary = "",
+ requestBody = @RequestBody(
+
+ ),
+ externalDocs = @ExternalDocumentation(),
+ parameters = {
+ @Parameter(
+ name = "name123",
+ in = ParameterIn.QUERY,
+ description = "user name",
+ required = true,
+ deprecated = false,
+ allowEmptyValue = true,
+ style = ParameterStyle.SIMPLE,
+ explode = Explode.DEFAULT,
+ allowReserved = true,
+ // Ignored if the properties content or array are specified
+ schema = @Schema(
+ type = "string"
+ ),
+ hidden = false,
+ example = "",
+ examples = {
+ @ExampleObject
+ },
+ extensions = {},
+ ref = ""
+ )
+ },
+ responses = {
+ @ApiResponse(
+ description = "success",
+ responseCode = "200",
+ headers = {
+ @Header(name = "Content-Type",
+ description = "content type",
+ schema = @Schema(
+ implementation = String.class
+ ),
+ required = true,
+ deprecated = false
+ )
+ },
+ links = {
+ @Link()
+ },
+ content = {
+ @Content()
+ },
+ extensions = {
+ @Extension(
+ name = "",
+ properties = {}
+ )
+ }
+
+ )
+ },
+ deprecated = false,
+ security = {
+ @SecurityRequirement(
+ name = "oauth2",
+ scopes = {
+ "app1"
+ }
+ )
+ },
+ servers = {
+ @Server(
+ url = "http://localhost:8080/hello"
+ )
+ },
+ extensions = {
+ @Extension(
+ name = "",
+ properties = {}
+ )
+ },
+ hidden = false,
+ ignoreJsonView = false
+ )
+ public String hello(String name, Object notParameter) {
+ return "hello";
+ }
+ }
}
diff --git a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ContextTest.java b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ContextTest.java
new file mode 100644
index 0000000..efce736
--- /dev/null
+++ b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ContextTest.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.generator;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+import java.util.Collections;
+
+import org.apache.servicecomb.toolkit.generator.AnnotationProcessorTest.OpenapiDef;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
+import org.junit.Test;
+
+import io.swagger.v3.oas.models.PathItem.HttpMethod;
+
+public class ContextTest {
+
+ @Test
+ public void realParameterContext() throws NoSuchMethodException {
+ Method method = OpenapiDef.class.getDeclaredMethod("hello", String.class, Object.class);
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(method, oasContext);
+
+ Parameter parameter = method.getParameters()[0];
+ ParameterContext context = new ParameterContext(operationContext, parameter);
+ context.setRequired(true);
+ context.setSchema(null);
+
+ assertTrue(context.isRequired());
+ context.setDefaultValue("default");
+ context.setIn(InType.QUERY);
+ context.setName("param1");
+ context.addExtension("extension-key", "extension-value");
+
+ assertFalse(context.isRequestBody());
+
+ context.toParameter();
+ context.applyAnnotations(Collections.emptyList());
+
+ assertEquals("param1", context.getName());
+ assertEquals(InType.QUERY, context.getIn());
+ assertEquals(String.class, context.getRealType());
+ assertEquals(String.class, context.getType());
+ assertEquals(operationContext.getComponents(), context.getComponents());
+ assertEquals(operationContext, context.getOperationContext());
+ assertNull(context.getExtensions());
+ assertNotNull(context.getOasParameter());
+ assertNull(context.getParser());
+ assertEquals(parameter, context.getParameter());
+ assertNotNull(context.getSchema());
+ assertEquals("default", context.getDefaultValue());
+ assertFalse(context.isRequired());
+
+ context.setIn(InType.COOKIE);
+ assertFalse(context.isRequestBody());
+ context.toParameter();
+
+ context.setIn(InType.HEADER);
+ assertFalse(context.isRequestBody());
+ context.toParameter();
+
+ context.setIn(InType.PATH);
+ assertFalse(context.isRequestBody());
+ context.toParameter();
+
+ context.setIn(InType.FORM);
+ assertTrue(context.isRequestBody());
+ context.toParameter();
+
+ context.setIn(InType.BODY);
+ context.toParameter();
+ assertTrue(context.isRequestBody());
+ }
+
+ @Test
+ public void operationContext() throws NoSuchMethodException {
+ Method method = OpenapiDef.class.getDeclaredMethod("hello", String.class, Object.class);
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(method, oasContext);
+ Parameter parameter = method.getParameters()[0];
+ ParameterContext context = new ParameterContext(operationContext, parameter);
+ context.setIn(InType.FORM);
+
+ operationContext.setHttpMethod(HttpMethod.GET.name());
+ operationContext.toOperation();
+
+ assertEquals(HttpMethod.GET.name(), operationContext.getHttpMethod());
+ }
+}
diff --git a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/OasGeneratorTest.java b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/OasGeneratorTest.java
index d454d7d..66f4a72 100644
--- a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/OasGeneratorTest.java
+++ b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/OasGeneratorTest.java
@@ -22,10 +22,14 @@ import java.lang.reflect.Parameter;
import java.util.HashSet;
import java.util.Set;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OasGenerator;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.junit.Assert;
import org.junit.Test;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
@@ -70,7 +74,7 @@ public class OasGeneratorTest {
ParameterContext parameterContext = new ParameterContext(operationContext, parameter);
parameterContext.setName(parameter.getName());
parameterContext.setRequired(true);
- parameterContext.setType(ParameterIn.QUERY.toString());
+ parameterContext.setIn(InType.QUERY);
Assert.assertEquals(parameter.getName(), parameterContext.getName());
diff --git a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ParserTest.java b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ParserTest.java
index c0b37e3..e85c205 100644
--- a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ParserTest.java
+++ b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/ParserTest.java
@@ -17,6 +17,7 @@
package org.apache.servicecomb.toolkit.generator;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.apache.servicecomb.toolkit.generator.parser.AbstractAnnotationParser;
import org.junit.Test;
diff --git a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/UtilsTest.java b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/UtilsTest.java
index 224dbf9..1ef65d1 100644
--- a/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/UtilsTest.java
+++ b/oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/UtilsTest.java
@@ -17,15 +17,22 @@
package org.apache.servicecomb.toolkit.generator;
+import static org.mockito.Mockito.when;
+
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
+import java.util.List;
import org.apache.servicecomb.toolkit.generator.annotation.ModelInterceptor;
import org.apache.servicecomb.toolkit.generator.util.ModelConverter;
import org.apache.servicecomb.toolkit.generator.util.ParamUtils;
+import org.apache.servicecomb.toolkit.generator.util.SwaggerAnnotationUtils;
import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Encoding;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
@@ -38,8 +45,8 @@ public class UtilsTest {
Method method = ParameterClass.class.getMethod("method", String.class);
Parameter parameter = method.getParameters()[0];
- String paramterName = ParamUtils.getParamterName(method, parameter);
- Assert.assertEquals("param", paramterName);
+ String parameterName = ParamUtils.getParameterName(method, parameter);
+ Assert.assertEquals("param", parameterName);
}
@Test
@@ -60,7 +67,7 @@ public class UtilsTest {
schema = ModelConverter.getSchema(ParameterClass.class, components);
Assert.assertNotNull(schema.get$ref());
- ModelConverter.registerInterceptor(new ModelInterceptor() {
+ ModelInterceptor mockModelInterceptor = new ModelInterceptor() {
@Override
public int order() {
return 0;
@@ -70,10 +77,22 @@ public class UtilsTest {
public Schema process(Class<?> cls, Components components) {
return new Schema().name("unknown");
}
- });
+ };
+ ModelConverter.registerInterceptor(mockModelInterceptor);
schema = ModelConverter.getSchema(ParameterClass.class);
Assert.assertEquals("unknown", schema.getName());
+ ModelConverter.unRegisterInterceptor(mockModelInterceptor);
+ }
+
+ @Test
+ public void getContentFromAnnotation() {
+ Content contents = Mockito.mock(Content.class);
+ when(contents.encoding()).thenReturn(new Encoding[] {Mockito.mock(Encoding.class)});
+ List<io.swagger.v3.oas.models.media.Content> contentFromAnnotation = SwaggerAnnotationUtils
+ .getContentFromAnnotation(contents);
+
+ Assert.assertEquals(1, contentFromAnnotation.size());
}
class ParameterClass {
diff --git a/oas-generator/oas-generator-jaxrs/pom.xml b/oas-generator/oas-generator-jaxrs/pom.xml
index b634cb0..807d9cf 100644
--- a/oas-generator/oas-generator-jaxrs/pom.xml
+++ b/oas-generator/oas-generator-jaxrs/pom.xml
@@ -36,7 +36,19 @@
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
- <version>2.1</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ConsumesAnnotationProcessor.java
similarity index 72%
copy from oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ConsumesAnnotationProcessor.java
index 42c5f72..66a7f80 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/ConsumesAnnotationProcessor.java
@@ -17,13 +17,13 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import javax.ws.rs.Path;
+import javax.ws.rs.Consumes;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
-public class PathClassAnnotationProcessor implements ClassAnnotationProcessor<Path, OasContext> {
+public class ConsumesAnnotationProcessor implements MethodAnnotationProcessor<Consumes, OperationContext> {
@Override
- public void process(Path path, OasContext context) {
- context.setBasePath(path.value());
+ public void process(Consumes consumes, OperationContext operationContext) {
+ operationContext.setConsumers(consumes.value());
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/CookieParamAnnotationProcessor.java
similarity index 66%
copy from oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/CookieParamAnnotationProcessor.java
index 1fdcc55..c03a2f9 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/CookieParamAnnotationProcessor.java
@@ -17,12 +17,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
-import org.springframework.web.bind.annotation.RequestPart;
+import javax.ws.rs.CookieParam;
-public class RequestPartAnnotationProcessor implements ParamAnnotationProcessor<RequestPart, ParameterContext> {
- @Override
- public void process(RequestPart requestPart, ParameterContext parameterContext) {
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
+public class CookieParamAnnotationProcessor implements ParamAnnotationProcessor<CookieParam, ParameterContext> {
+ @Override
+ public void process(CookieParam cookieParam, ParameterContext parameterContext) {
+ parameterContext.setIn(InType.COOKIE);
+ parameterContext.setName(cookieParam.value());
}
}
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/FormParamAnnotationProcessor.java
similarity index 65%
copy from oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/FormParamAnnotationProcessor.java
index 42c5f72..fc2723b 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/FormParamAnnotationProcessor.java
@@ -17,13 +17,16 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import javax.ws.rs.Path;
+import javax.ws.rs.FormParam;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
-public class PathClassAnnotationProcessor implements ClassAnnotationProcessor<Path, OasContext> {
+public class FormParamAnnotationProcessor implements ParamAnnotationProcessor<FormParam, ParameterContext> {
@Override
- public void process(Path path, OasContext context) {
- context.setBasePath(path.value());
+ public void process(FormParam formParam, ParameterContext parameterContext) {
+
+ parameterContext.setIn(InType.FORM);
+ parameterContext.setName(formParam.value());
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HeaderParamAnnotationProcessor.java
similarity index 66%
copy from oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HeaderParamAnnotationProcessor.java
index 1fdcc55..fa9baf9 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HeaderParamAnnotationProcessor.java
@@ -1,3 +1,4 @@
+
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -17,12 +18,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
-import org.springframework.web.bind.annotation.RequestPart;
+import javax.ws.rs.HeaderParam;
-public class RequestPartAnnotationProcessor implements ParamAnnotationProcessor<RequestPart, ParameterContext> {
- @Override
- public void process(RequestPart requestPart, ParameterContext parameterContext) {
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
+public class HeaderParamAnnotationProcessor implements ParamAnnotationProcessor<HeaderParam, ParameterContext> {
+ @Override
+ public void process(HeaderParam headerParam, ParameterContext parameterContext) {
+ parameterContext.setIn(InType.HEADER);
+ parameterContext.setName(headerParam.value());
}
}
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HttpMethodAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HttpMethodAnnotationProcessor.java
index fbe0e83..6e46240 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HttpMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/HttpMethodAnnotationProcessor.java
@@ -21,7 +21,7 @@ import java.lang.annotation.Annotation;
import javax.ws.rs.HttpMethod;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
public class HttpMethodAnnotationProcessor implements MethodAnnotationProcessor<Annotation, OperationContext> {
@Override
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
index 42c5f72..783389c 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.toolkit.generator.annotation;
import javax.ws.rs.Path;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
public class PathClassAnnotationProcessor implements ClassAnnotationProcessor<Path, OasContext> {
@Override
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathMethodAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathMethodAnnotationProcessor.java
index 187006c..9743c99 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathMethodAnnotationProcessor.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.toolkit.generator.annotation;
import javax.ws.rs.Path;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
public class PathMethodAnnotationProcessor implements MethodAnnotationProcessor<Path, OperationContext> {
@Override
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathParamAnnotationProcessor.java
similarity index 66%
copy from oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathParamAnnotationProcessor.java
index 42c5f72..24b8cff 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathParamAnnotationProcessor.java
@@ -17,13 +17,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
-public class PathClassAnnotationProcessor implements ClassAnnotationProcessor<Path, OasContext> {
+public class PathParamAnnotationProcessor implements ParamAnnotationProcessor<PathParam, ParameterContext> {
@Override
- public void process(Path path, OasContext context) {
- context.setBasePath(path.value());
+ public void process(PathParam pathParam, ParameterContext context) {
+ context.setIn(InType.PATH);
+ context.setName(pathParam.value());
}
}
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/QueryParamAnnotationProcessor.java
similarity index 65%
copy from oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
copy to oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/QueryParamAnnotationProcessor.java
index 42c5f72..01d3c08 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/QueryParamAnnotationProcessor.java
@@ -17,13 +17,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
-public class PathClassAnnotationProcessor implements ClassAnnotationProcessor<Path, OasContext> {
+public class QueryParamAnnotationProcessor implements ParamAnnotationProcessor<QueryParam, ParameterContext> {
@Override
- public void process(Path path, OasContext context) {
- context.setBasePath(path.value());
+ public void process(QueryParam queryParam, ParameterContext parameterContext) {
+ parameterContext.setIn(InType.QUERY);
+ parameterContext.setName(queryParam.value());
}
}
diff --git a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/parser/JaxRsAnnotationParser.java b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/parser/JaxRsAnnotationParser.java
index a5b0b12..a623e91 100644
--- a/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/parser/JaxRsAnnotationParser.java
+++ b/oas-generator/oas-generator-jaxrs/src/main/java/org/apache/servicecomb/toolkit/generator/parser/JaxRsAnnotationParser.java
@@ -17,7 +17,10 @@
package org.apache.servicecomb.toolkit.generator.parser;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.HEAD;
import javax.ws.rs.OPTIONS;
@@ -25,10 +28,20 @@ import javax.ws.rs.PATCH;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+import org.apache.servicecomb.toolkit.generator.annotation.ConsumesAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.CookieParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.FormParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.HeaderParamAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.HttpMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PathClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PathMethodAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.PathParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.QueryParamAnnotationProcessor;
+
+import io.swagger.v3.oas.annotations.headers.Header;
public class JaxRsAnnotationParser extends AbstractAnnotationParser {
@@ -51,6 +64,18 @@ public class JaxRsAnnotationParser extends AbstractAnnotationParser {
methodAnnotationMap.put(PUT.class, httpMethodAnnotationProcessor);
methodAnnotationMap.put(OPTIONS.class, httpMethodAnnotationProcessor);
methodAnnotationMap.put(HEAD.class, httpMethodAnnotationProcessor);
+ methodAnnotationMap.put(Consumes.class, new ConsumesAnnotationProcessor());
+ }
+
+ @Override
+ public void initParameterAnnotationProcessor() {
+ super.initParameterAnnotationProcessor();
+
+ parameterAnnotationMap.put(QueryParam.class, new QueryParamAnnotationProcessor());
+ parameterAnnotationMap.put(CookieParam.class, new CookieParamAnnotationProcessor());
+ parameterAnnotationMap.put(FormParam.class, new FormParamAnnotationProcessor());
+ parameterAnnotationMap.put(PathParam.class, new PathParamAnnotationProcessor());
+ parameterAnnotationMap.put(Header.class, new HeaderParamAnnotationProcessor());
}
@Override
diff --git a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsAnnotationProcessorTest.java b/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsAnnotationProcessorTest.java
index 72f49e5..be36790 100644
--- a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsAnnotationProcessorTest.java
+++ b/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsAnnotationProcessorTest.java
@@ -17,13 +17,29 @@
package org.apache.servicecomb.toolkit.generator;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path;
-
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+
+import org.apache.servicecomb.toolkit.generator.annotation.AnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.ConsumesAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.CookieParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.FormParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.HeaderParamAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.HttpMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PathClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PathMethodAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.PathParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.QueryParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
@@ -70,6 +86,100 @@ public class JaxrsAnnotationProcessorTest {
Assert.assertEquals("/path", operationContext.getPath());
}
+ @Test
+ public void processConsumersAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ AnnotationProcessor annotationProcessor = new ConsumesAnnotationProcessor();
+
+ Consumes consumes = Mockito.mock(Consumes.class);
+ Mockito.when(consumes.value()).thenReturn(new String[] {MediaTypes.APPLICATION_JSON});
+ annotationProcessor.process(consumes, operationContext);
+
+ Assert.assertEquals(MediaTypes.APPLICATION_JSON, operationContext.getConsumers()[0]);
+ }
+
+ @Test
+ public void processCookieParamAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ ParameterContext parameterContext = new ParameterContext(operationContext, null);
+ AnnotationProcessor annotationProcessor = new CookieParamAnnotationProcessor();
+
+ CookieParam cookieParam = Mockito.mock(CookieParam.class);
+ Mockito.when(cookieParam.value()).thenReturn("param");
+ annotationProcessor.process(cookieParam, parameterContext);
+
+ Assert.assertEquals("param", parameterContext.getName());
+ }
+
+ @Test
+ public void processFormParamAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ ParameterContext parameterContext = new ParameterContext(operationContext, null);
+ AnnotationProcessor annotationProcessor = new FormParamAnnotationProcessor();
+
+ FormParam formParam = Mockito.mock(FormParam.class);
+ Mockito.when(formParam.value()).thenReturn("param");
+ annotationProcessor.process(formParam, parameterContext);
+
+ Assert.assertEquals("param", parameterContext.getName());
+ Assert.assertTrue(parameterContext.isRequestBody());
+ }
+
+ @Test
+ public void processHeaderParamAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ ParameterContext parameterContext = new ParameterContext(operationContext, null);
+ AnnotationProcessor annotationProcessor = new HeaderParamAnnotationProcessor();
+
+ HeaderParam headerParam = Mockito.mock(HeaderParam.class);
+ Mockito.when(headerParam.value()).thenReturn("param");
+ annotationProcessor.process(headerParam, parameterContext);
+
+ Assert.assertEquals("param", parameterContext.getName());
+ Assert.assertFalse(parameterContext.isRequestBody());
+ }
+
+ @Test
+ public void processPathParamAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ ParameterContext parameterContext = new ParameterContext(operationContext, null);
+ AnnotationProcessor annotationProcessor = new PathParamAnnotationProcessor();
+
+ PathParam pathParam = Mockito.mock(PathParam.class);
+ Mockito.when(pathParam.value()).thenReturn("param");
+ annotationProcessor.process(pathParam, parameterContext);
+
+ Assert.assertEquals("param", parameterContext.getName());
+ Assert.assertFalse(parameterContext.isRequestBody());
+ }
+
+
+ @Test
+ public void processQueryParamAnnotation() {
+
+ OasContext oasContext = new OasContext(null);
+ OperationContext operationContext = new OperationContext(null, oasContext);
+ ParameterContext parameterContext = new ParameterContext(operationContext, null);
+ AnnotationProcessor annotationProcessor = new QueryParamAnnotationProcessor();
+
+ QueryParam queryParam = Mockito.mock(QueryParam.class);
+ Mockito.when(queryParam.value()).thenReturn("param");
+ annotationProcessor.process(queryParam, parameterContext);
+
+ Assert.assertEquals("param", parameterContext.getName());
+ Assert.assertFalse(parameterContext.isRequestBody());
+ }
+
class GetClass {
@GET
public String get() {
diff --git a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsParserTest.java b/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsParserTest.java
index cef30d2..2591de4 100644
--- a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsParserTest.java
+++ b/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/JaxrsParserTest.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.toolkit.generator;
import javax.ws.rs.Path;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.apache.servicecomb.toolkit.generator.parser.JaxRsAnnotationParser;
import org.junit.Assert;
import org.junit.Test;
diff --git a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/ServerOperationResource.java b/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/ServerOperationResource.java
deleted file mode 100644
index 604e4f5..0000000
--- a/oas-generator/oas-generator-jaxrs/src/test/java/org/apache/servicecomb/toolkit/generator/ServerOperationResource.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.toolkit.generator;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.QueryParam;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.media.Content;
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-
-@Path("")
-public class ServerOperationResource {
-
- @Path("/serversoperation")
- @GET
- @ApiResponse(
- responseCode = "500",
- description = "voila!",
- content = {
- @Content(
- mediaType = "application/json",
- schema = @Schema(implementation = String.class)
- ),
- @Content(
- mediaType = "application/xml",
- schema = @Schema(implementation = String.class)
- )
- })
- @ApiResponse(responseCode = "400")
- @ApiResponse(responseCode = "404", description = "User not found")
- @Operation(operationId = "getPet", description = "Pets Example")
- public ResponseBean getPet() {
- return new ResponseBean();
- }
-
-
- @Path("/serversoperation2")
- @POST
- @Operation(operationId = "getPet2", description = "Pets Example")
- public String getPet2(@Parameter(required = true) @QueryParam("pet") String pet) {
- return "";
- }
-
-
- @Path("/serversoperation3")
- @POST
- @Operation(operationId = "getPet3", description = "Pets Example")
- public String getPet3(String[] pet1, String pet2, RequestBean[] requestBean) {
- return "";
- }
-
- @Path("/serversoperation4")
- @POST
- @Operation(operationId = "getPet4", description = "Pets Example")
- public String getPet4(String[] pet1, RequestBean responseBean) {
- return "";
- }
-
- public String noResource() {
- return "no resource";
- }
-
- class RequestBean {
-
- private String name;
-
- private String content;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getContent() {
- return content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
- }
-
- class ResponseBean {
-
- private String status;
-
- private String content;
-
- private RequestBean request;
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getContent() {
- return content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public RequestBean getRequest() {
- return request;
- }
-
- public void setRequest(RequestBean request) {
- this.request = request;
- }
- }
-}
diff --git a/oas-generator/oas-generator-servicecomb/pom.xml b/oas-generator/oas-generator-servicecomb/pom.xml
index 55cf0c9..1b250c4 100644
--- a/oas-generator/oas-generator-servicecomb/pom.xml
+++ b/oas-generator/oas-generator-servicecomb/pom.xml
@@ -41,13 +41,11 @@
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>provider-rest-common</artifactId>
- <version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>provider-pojo</artifactId>
- <version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>commons-lang</groupId>
diff --git a/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java
index beb42d5..bf26c42 100644
--- a/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java
+++ b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java
@@ -21,7 +21,7 @@ import java.lang.reflect.Method;
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.provider.pojo.RpcSchema;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
diff --git a/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java b/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java
index 78c6bfc..d9cf795 100644
--- a/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java
+++ b/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java
@@ -21,6 +21,7 @@ import javax.ws.rs.Path;
import org.apache.servicecomb.provider.pojo.RpcSchema;
import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.apache.servicecomb.toolkit.generator.parser.ServicecombJaxrsParser;
import org.apache.servicecomb.toolkit.generator.parser.ServicecombPojoParser;
import org.apache.servicecomb.toolkit.generator.parser.ServicecombSpringmvcParser;
diff --git a/oas-generator/oas-generator-spring/pom.xml b/oas-generator/oas-generator-spring/pom.xml
index c2d70f0..7e832f5 100644
--- a/oas-generator/oas-generator-spring/pom.xml
+++ b/oas-generator/oas-generator-spring/pom.xml
@@ -35,7 +35,6 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
- <version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/AbstractHttpMethodMappingAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/AbstractHttpMethodMappingAnnotationProcessor.java
index fe795ea..753f84e 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/AbstractHttpMethodMappingAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/AbstractHttpMethodMappingAnnotationProcessor.java
@@ -21,8 +21,8 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import org.apache.servicecomb.toolkit.generator.HttpStatus;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.HttpStatuses;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.apache.servicecomb.toolkit.generator.util.ModelConverter;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -78,7 +78,7 @@ public abstract class AbstractHttpMethodMappingAnnotationProcessor<Annotation, C
content.addMediaType(produce, mediaType);
}
apiResponse.setContent(content);
- operationContext.addResponse(HttpStatus.OK, apiResponse);
+ operationContext.addResponse(HttpStatuses.OK, apiResponse);
}
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/DeleteMappingMethodAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/DeleteMappingMethodAnnotationProcessor.java
index a53736f..ffa871f 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/DeleteMappingMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/DeleteMappingMethodAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/GetMappingMethodAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/GetMappingMethodAnnotationProcessor.java
index 7bbf769..43f9dc9 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/GetMappingMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/GetMappingMethodAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathVariableAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathVariableAnnotationProcessor.java
index bc752f3..1c6de47 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathVariableAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PathVariableAnnotationProcessor.java
@@ -18,24 +18,22 @@
package org.apache.servicecomb.toolkit.generator.annotation;
import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.apache.servicecomb.toolkit.generator.util.ParamUtils;
import org.springframework.web.bind.annotation.PathVariable;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-
public class PathVariableAnnotationProcessor implements ParamAnnotationProcessor<PathVariable, ParameterContext> {
@Override
public void process(PathVariable pathVariable, ParameterContext parameterContext) {
-
String paramName = pathVariable.name();
if (StringUtils.isEmpty(paramName)) {
paramName = ParamUtils
- .getParamterName(parameterContext.getOperationContext().getMethod(), parameterContext.getParameter());
+ .getParameterName(parameterContext.getOperationContext().getMethod(), parameterContext.getParameter());
}
+ parameterContext.setIn(InType.PATH);
parameterContext.setName(paramName);
parameterContext.setRequired(pathVariable.required());
- parameterContext.setType(ParameterIn.PATH.toString());
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PostMappingMethodAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PostMappingMethodAnnotationProcessor.java
index 9848cca..9131c50 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PostMappingMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PostMappingMethodAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PutMappingMethodAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PutMappingMethodAnnotationProcessor.java
index 53f4738..fc03129 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PutMappingMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/PutMappingMethodAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyAnnotationProcessor.java
index 2b0a114..a132596 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestBodyAnnotationProcessor.java
@@ -17,13 +17,15 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.springframework.web.bind.annotation.RequestBody;
public class RequestBodyAnnotationProcessor implements ParamAnnotationProcessor<RequestBody, ParameterContext> {
@Override
public void process(RequestBody requestBody, ParameterContext parameterContext) {
+ parameterContext.setIn(InType.BODY);
parameterContext.setRequired(requestBody.required());
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestHeaderAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestHeaderAnnotationProcessor.java
index ece07cc..4c04628 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestHeaderAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestHeaderAnnotationProcessor.java
@@ -18,18 +18,17 @@
package org.apache.servicecomb.toolkit.generator.annotation;
import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.ValueConstants;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-
public class RequestHeaderAnnotationProcessor implements ParamAnnotationProcessor<RequestHeader, ParameterContext> {
@Override
public void process(RequestHeader requestHeader, ParameterContext parameterContext) {
- parameterContext.setType(ParameterIn.HEADER.toString());
+ parameterContext.setIn(InType.HEADER);
parameterContext.setRequired(requestHeader.required());
if (!ObjectUtils.isEmpty(requestHeader.defaultValue()) && !ValueConstants.DEFAULT_NONE
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingClassAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingClassAnnotationProcessor.java
index a44bb0d..ad01f16 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingClassAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingClassAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.springframework.web.bind.annotation.RequestMapping;
public class RequestMappingClassAnnotationProcessor implements
@@ -31,7 +31,7 @@ public class RequestMappingClassAnnotationProcessor implements
return;
}
- // swagger仅支持配一个basePath
+ // swagger only support one basePath
if (paths.length > 1) {
throw new Error("not support multi path for " + oasContext.getCls().getName());
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingMethodAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingMethodAnnotationProcessor.java
index bdcc3fc..040f559 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingMethodAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestMappingMethodAnnotationProcessor.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
import org.springframework.web.bind.annotation.RequestMapping;
public class RequestMappingMethodAnnotationProcessor implements
@@ -31,7 +31,7 @@ public class RequestMappingMethodAnnotationProcessor implements
return;
}
- // swagger仅支持配一个basePath
+ // swagger only support one basePath
if (paths.length > 1) {
throw new Error("not support multi path for " + operationContext.getMethod().getName());
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestParamAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestParamAnnotationProcessor.java
index 8a127c3..7db9897 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestParamAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestParamAnnotationProcessor.java
@@ -18,7 +18,8 @@
package org.apache.servicecomb.toolkit.generator.annotation;
import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ValueConstants;
@@ -27,6 +28,8 @@ public class RequestParamAnnotationProcessor implements ParamAnnotationProcessor
@Override
public void process(RequestParam requestParam, ParameterContext parameterContext) {
+
+ parameterContext.setIn(InType.QUERY);
String name = requestParam.value();
if (StringUtils.isEmpty(name)) {
name = requestParam.name();
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
index 1fdcc55..68c88d2 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/RequestPartAnnotationProcessor.java
@@ -17,12 +17,17 @@
package org.apache.servicecomb.toolkit.generator.annotation;
-import org.apache.servicecomb.toolkit.generator.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.MediaTypes;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext.InType;
import org.springframework.web.bind.annotation.RequestPart;
public class RequestPartAnnotationProcessor implements ParamAnnotationProcessor<RequestPart, ParameterContext> {
@Override
public void process(RequestPart requestPart, ParameterContext parameterContext) {
-
+ parameterContext.setIn(InType.BODY);
+ parameterContext.addConsume(MediaTypes.MULTIPART_FORM_DATA);
+ parameterContext.setRequired(requestPart.required());
+ parameterContext.setName(requestPart.name());
}
}
diff --git a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/parser/SpringmvcAnnotationParser.java b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/parser/SpringmvcAnnotationParser.java
index 59a65c3..d35621f 100644
--- a/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/parser/SpringmvcAnnotationParser.java
+++ b/oas-generator/oas-generator-spring/src/main/java/org/apache/servicecomb/toolkit/generator/parser/SpringmvcAnnotationParser.java
@@ -17,20 +17,30 @@
package org.apache.servicecomb.toolkit.generator.parser;
-import org.apache.servicecomb.toolkit.generator.OasContext;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
import org.apache.servicecomb.toolkit.generator.annotation.GetMappingMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PathVariableAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PostMappingMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.PutMappingMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.RequestBodyAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.RequestHeaderAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.RequestMappingClassAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.RequestMappingMethodAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.RequestParamAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.annotation.RequestPartAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
public class SpringmvcAnnotationParser extends AbstractAnnotationParser {
@@ -73,6 +83,20 @@ public class SpringmvcAnnotationParser extends AbstractAnnotationParser {
super.initParameterAnnotationProcessor();
parameterAnnotationMap.put(PathVariable.class, new PathVariableAnnotationProcessor());
parameterAnnotationMap.put(RequestBody.class, new RequestBodyAnnotationProcessor());
+ parameterAnnotationMap.put(RequestPart.class, new RequestPartAnnotationProcessor());
+ parameterAnnotationMap.put(RequestParam.class, new RequestParamAnnotationProcessor());
+ parameterAnnotationMap.put(RequestHeader.class, new RequestHeaderAnnotationProcessor());
+ }
+
+ public static void main(String[] args) {
+ List<Integer> integers = new ArrayList<>();
+ integers.add(1);
+ integers.add(2);
+ integers.add(5);
+ integers.add(3);
+ integers.sort(Comparator.comparingInt(Integer::intValue));
+
+ integers.forEach(System.out::println);
}
}
diff --git a/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringAnnotationProcessorTest.java b/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringAnnotationProcessorTest.java
index de047f9..adfd48a 100644
--- a/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringAnnotationProcessorTest.java
+++ b/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringAnnotationProcessorTest.java
@@ -31,6 +31,9 @@ import org.apache.servicecomb.toolkit.generator.annotation.RequestMappingClassAn
import org.apache.servicecomb.toolkit.generator.annotation.RequestMappingMethodAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.RequestParamAnnotationProcessor;
import org.apache.servicecomb.toolkit.generator.annotation.RequestPartAnnotationProcessor;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
+import org.apache.servicecomb.toolkit.generator.context.OperationContext;
+import org.apache.servicecomb.toolkit.generator.context.ParameterContext;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -117,7 +120,7 @@ public class SpringAnnotationProcessorTest {
operationContext = new OperationContext(requestParamMethod, oasContext);
parameterContext = new ParameterContext(operationContext, requestParamMethodParam);
requestParamAnnotationProcessor.process(requestParamAnnotation, parameterContext);
- io.swagger.v3.oas.models.parameters.Parameter oasParameter = parameterContext.toOasParameter();
+ io.swagger.v3.oas.models.parameters.Parameter oasParameter = parameterContext.toParameter();
Assert.assertNull(parameterContext.getDefaultValue());
Assert.assertNull(oasParameter.getSchema().getDefault());
@@ -129,7 +132,7 @@ public class SpringAnnotationProcessorTest {
operationContext = new OperationContext(pathVariableMethod, oasContext);
parameterContext = new ParameterContext(operationContext, pathVariableMethodParam);
pathVariableAnnotationProcessor.process(pathVariableAnnotation, parameterContext);
- parameterContext.toOasParameter();
+ parameterContext.toParameter();
Assert.assertTrue(parameterContext.isRequired());
RequestPartAnnotationProcessor requestPartAnnotationProcessor = new RequestPartAnnotationProcessor();
@@ -140,7 +143,7 @@ public class SpringAnnotationProcessorTest {
operationContext = new OperationContext(requestPartMethod, oasContext);
parameterContext = new ParameterContext(operationContext, requestPartMethodParam);
requestPartAnnotationProcessor.process(requestPartParamAnnotation, parameterContext);
- oasParameter = parameterContext.toOasParameter();
+ oasParameter = parameterContext.toParameter();
Assert.assertNull(parameterContext.getDefaultValue());
Assert.assertEquals(FileSchema.class, oasParameter.getSchema().getClass());
@@ -152,7 +155,7 @@ public class SpringAnnotationProcessorTest {
operationContext = new OperationContext(requestPartMethod, oasContext);
parameterContext = new ParameterContext(operationContext, requestHeaderMethodParam);
requestHeaderAnnotationProcessor.process(requestHeaderParamAnnotation, parameterContext);
- oasParameter = parameterContext.toOasParameter();
+ oasParameter = parameterContext.toParameter();
Assert.assertNull(parameterContext.getDefaultValue());
Assert.assertNull(oasParameter.getSchema().getDefault());
@@ -164,7 +167,7 @@ public class SpringAnnotationProcessorTest {
operationContext = new OperationContext(requestBodyMethod, oasContext);
parameterContext = new ParameterContext(operationContext, requestBodyMethodParam);
requestBodyAnnotationProcessor.process(requestBodyParamAnnotation, parameterContext);
- parameterContext.toOasParameter();
+ parameterContext.toParameter();
Assert.assertTrue(parameterContext.isRequired());
}
diff --git a/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringParserTest.java b/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringParserTest.java
index fd8dfb2..3acce3d 100644
--- a/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringParserTest.java
+++ b/oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringParserTest.java
@@ -17,6 +17,7 @@
package org.apache.servicecomb.toolkit.generator;
+import org.apache.servicecomb.toolkit.generator.context.OasContext;
import org.apache.servicecomb.toolkit.generator.parser.SpringmvcAnnotationParser;
import org.junit.Assert;
import org.junit.Test;
diff --git a/oas-generator/pom.xml b/oas-generator/pom.xml
index 9603fdb..3477019 100644
--- a/oas-generator/pom.xml
+++ b/oas-generator/pom.xml
@@ -34,34 +34,99 @@
<artifactId>oas-generator</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
- <version>1.6.2</version>
- <scope>test</scope>
- </dependency>
+ <properties>
+ <swagger.version>2.0.10</swagger.version>
+ <junit.version>4.12</junit.version>
+ <asm.version>7.2</asm.version>
+ <powermock.version>1.6.2</powermock.version>
+ <javachassis.version>1.2.0</javachassis.version>
+ <spring.version>5.1.6.RELEASE</spring.version>
+ </properties>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>io.swagger.core.v3</groupId>
+ <artifactId>swagger-models</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-mockito</artifactId>
- <version>1.6.2</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
+ <dependency>
+ <groupId>io.swagger.core.v3</groupId>
+ <artifactId>swagger-annotations</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>io.swagger.core.v3</groupId>
+ <artifactId>swagger-core</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <version>${asm.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ <version>2.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>provider-rest-common</artifactId>
+ <version>${javachassis.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>provider-pojo</artifactId>
+ <version>${javachassis.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <version>${powermock.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>${powermock.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
<build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.1</version>
- <configuration>
- <target>1.8</target>
- <source>1.8</source>
- </configuration>
- </plugin>
- </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.3</version>
+ <configuration>
+ <target>1.8</target>
+ <source>1.8</source>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
</build>
-
</project>
\ No newline at end of file
diff --git a/samples/generate-from-code-sample/GoodbyeService/src/main/java/org/apache/servicecomb/toolkit/goodbye/GoodbyeController.java b/samples/generate-from-code-sample/GoodbyeService/src/main/java/org/apache/servicecomb/toolkit/goodbye/GoodbyeController.java
index a9ed58a..8d627a5 100644
--- a/samples/generate-from-code-sample/GoodbyeService/src/main/java/org/apache/servicecomb/toolkit/goodbye/GoodbyeController.java
+++ b/samples/generate-from-code-sample/GoodbyeService/src/main/java/org/apache/servicecomb/toolkit/goodbye/GoodbyeController.java
@@ -17,15 +17,19 @@
package org.apache.servicecomb.toolkit.goodbye;
+import javax.servlet.http.Part;
+
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
@RestController
public class GoodbyeController {
@GetMapping("/goodbye/{name}")
- public String sayGoodbye(@PathVariable("name") String name) {
+ public String sayGoodbye(@PathVariable("name") String name, @RequestPart MultipartFile file, @RequestPart Part part) {
return "Goodbye," + name;
}
}
diff --git a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java
index f0dbb00..81f7e93 100755
--- a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java
+++ b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java
@@ -68,7 +68,7 @@ class GenerateUtil {
contractConfig.put("outputDir", contractOutput);
contractConfig.put("contractFileType", contractFileType);
- // TODO: support users to add other getGenerator type soon
+ // TODO: support users to addParamCtx other getGenerator type soon
ContractsGenerator contractGenerator = GeneratorFactory.getGenerator(ContractsGenerator.class, type);
Objects.requireNonNull(contractGenerator).configure(contractConfig);
@@ -77,7 +77,7 @@ class GenerateUtil {
static void generateDocument(String contractLocation, String documentOutput, String type) throws IOException {
- // TODO: support users to add other getGenerator type soon
+ // TODO: support users to addParamCtx other getGenerator type soon
DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, type);
if (docGenerator == null) {
throw new RuntimeException("Cannot found document generator's implementation");