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 <[email protected]>
AuthorDate: Tue Nov 12 08:02:56 2019 +0800

    add new processor
    
    Signed-off-by: kakulisen <[email protected]>
---
 .../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 = "[email protected]",
+              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");

Reply via email to