You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ch...@apache.org on 2019/12/30 08:29:23 UTC

[servicecomb-toolkit] branch master updated (41ac32f -> da3b3b6)

This is an automated email from the ASF dual-hosted git repository.

chanjarster pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git.


    from 41ac32f  [SCB-1676] optimizing the acquisition of bean properties
     new 7ad21ee  [SCB-1673] parse the remaining information of RequestMapping
     new 05972ce  [SCB-1673] add response description
     new da3b3b6  [SCB-1673] fix the problem according code review suggestion

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../ApiResponseMethodAnnotationProcessor.java      |   2 +
 .../toolkit/generator/context/OasContext.java      |  40 ++++++++
 .../generator/context/OperationContext.java        |  94 +++++++++++++++--
 .../generator/context/ParameterContext.java        |  10 +-
 ...stractHttpMethodMappingAnnotationProcessor.java |  36 ++-----
 .../RequestMappingClassAnnotationProcessor.java    |  41 ++++++++
 .../RequestMappingMethodAnnotationProcessor.java   |  25 +++--
 .../generator/SpringAnnotationProcessorTest.java   | 111 +++++++++++++++++++--
 8 files changed, 304 insertions(+), 55 deletions(-)


[servicecomb-toolkit] 03/03: [SCB-1673] fix the problem according code review suggestion

Posted by ch...@apache.org.
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 da3b3b6333e1c776d4e39513e39e328596d9b40f
Author: kakulisen <18...@163.com>
AuthorDate: Fri Dec 27 17:56:02 2019 +0800

    [SCB-1673] fix the problem according code review suggestion
    
    Signed-off-by: kakulisen <18...@163.com>
---
 .../toolkit/generator/context/OasContext.java      |  8 +-
 .../generator/context/OperationContext.java        | 32 +++----
 .../generator/context/ParameterContext.java        | 10 +--
 .../generator/SpringAnnotationProcessorTest.java   | 98 +++++++++++++++++++---
 4 files changed, 114 insertions(+), 34 deletions(-)

diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
index 90e1c47..ae2a549 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
@@ -49,7 +49,7 @@ public class OasContext implements IExtensionsContext {
 
   private String httpMethod;
 
-  private String[] consumers;
+  private String[] consumes;
 
   private String[] produces;
 
@@ -180,11 +180,11 @@ public class OasContext implements IExtensionsContext {
   }
 
   public String[] getConsumers() {
-    return consumers;
+    return consumes;
   }
 
-  public void setConsumers(String[] consumers) {
-    this.consumers = consumers;
+  public void setConsumers(String[] consumes) {
+    this.consumes = consumes;
   }
 
   public String[] getProduces() {
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
index 58d1b01..89bb6e5 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
@@ -76,7 +76,7 @@ public class OperationContext implements IExtensionsContext {
 
   private List<String> tags;
 
-  private String[] consumers;
+  private String[] consumes;
 
   private String[] produces;
 
@@ -131,7 +131,7 @@ public class OperationContext implements IExtensionsContext {
               mediaType.schema(schema);
             }
             schema.addProperties(parameterContext.getName(), parameterContext.getSchema());
-            if (consumers != null) {
+            if (consumes != null) {
               for (String consume : getConsumers()) {
                 content.addMediaType(consume, mediaType);
               }
@@ -168,11 +168,7 @@ public class OperationContext implements IExtensionsContext {
 
   private void processHeaders() {
 
-    if (headers == null) {
-      headers = parentContext.getHeaders();
-    }
-
-    if (headers == null) {
+    if (getHeaders() == null) {
       return;
     }
 
@@ -191,11 +187,7 @@ public class OperationContext implements IExtensionsContext {
 
   private void processProduces() {
 
-    if (produces == null) {
-      produces = parentContext.getProduces();
-    }
-
-    if (produces == null) {
+    if (getProduces() == null) {
       return;
     }
 
@@ -360,11 +352,11 @@ public class OperationContext implements IExtensionsContext {
   }
 
   public String[] getConsumers() {
-    return consumers;
+    return consumes;
   }
 
-  public void setConsumers(String[] consumers) {
-    this.consumers = consumers;
+  public void setConsumers(String[] consumes) {
+    this.consumes = consumes;
   }
 
   public void addParamCtx(ParameterContext ctx) {
@@ -372,6 +364,11 @@ public class OperationContext implements IExtensionsContext {
   }
 
   public String[] getProduces() {
+
+    if (produces == null) {
+      produces = parentContext.getProduces();
+    }
+
     return produces;
   }
 
@@ -380,6 +377,11 @@ public class OperationContext implements IExtensionsContext {
   }
 
   public String[] getHeaders() {
+
+    if (headers == null) {
+      headers = parentContext.getHeaders();
+    }
+
     return headers;
   }
 
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
index ca9046a..a743afa 100644
--- 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
@@ -82,7 +82,7 @@ public class ParameterContext implements ISchemaContext, IExtensionsContext {
 
   private RequestBody requestBody;
 
-  private List<String> consumers;
+  private List<String> consumes;
 
   public ParameterContext(OperationContext parentContext, Parameter parameter) {
     this.parentContext = parentContext;
@@ -208,14 +208,14 @@ public class ParameterContext implements ISchemaContext, IExtensionsContext {
   }
 
   public void addConsume(String consume) {
-    if (consumers == null) {
-      consumers = new ArrayList<>();
+    if (consumes == null) {
+      consumes = new ArrayList<>();
     }
-    consumers.add(consume);
+    consumes.add(consume);
   }
 
   public List<String> getConsumers() {
-    return consumers;
+    return consumes;
   }
 
   public Type getRealType() {
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 3cad49b..fc8b84a 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
@@ -56,35 +56,90 @@ import io.swagger.v3.oas.models.media.FileSchema;
 public class SpringAnnotationProcessorTest {
 
   @Test
-  public void getHttpMethod() throws NoSuchMethodException {
-    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+  public void methodOfRequestMapping() throws NoSuchMethodException {
 
+    // class level
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
     OasContext oasContext = new OasContext(parser);
     Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
     RequestMapping requestMappingClassAnnotation = httpMethodResourceClass.getAnnotation(RequestMapping.class);
     RequestMappingClassAnnotationProcessor requestMappingClassAnnotationProcessor = new RequestMappingClassAnnotationProcessor();
     requestMappingClassAnnotationProcessor.process(requestMappingClassAnnotation, oasContext);
-    Assert.assertEquals(requestMappingClassAnnotation.value()[0], oasContext.getBasePath());
     Assert.assertEquals(RequestMethod.GET.name(), oasContext.getHttpMethod());
 
+    // method level
     RequestMappingMethodAnnotationProcessor requestMappingMethodAnnotationProcessor = new RequestMappingMethodAnnotationProcessor();
     Method requestMethod = httpMethodResourceClass.getMethod("request");
     RequestMapping requestMappingMethodAnnotation = requestMethod.getAnnotation(RequestMapping.class);
     OperationContext requestOperationContext = new OperationContext(requestMethod, oasContext);
     requestMappingMethodAnnotationProcessor.process(requestMappingMethodAnnotation, requestOperationContext);
-    Assert
-        .assertEquals(requestMappingMethodAnnotation.value()[0],
-            requestOperationContext.getPath());
     Assert.assertEquals(RequestMethod.POST.name(), requestOperationContext.getHttpMethod());
 
+    // default
     Method getRequestMethod = httpMethodResourceClass.getMethod("getRequest");
     RequestMapping getRequestMappingMethodAnnotation = getRequestMethod.getAnnotation(RequestMapping.class);
     OperationContext getRequestOperationContext = new OperationContext(getRequestMethod, oasContext);
     requestMappingMethodAnnotationProcessor.process(getRequestMappingMethodAnnotation, getRequestOperationContext);
-    Assert
-        .assertEquals(getRequestMappingMethodAnnotation.value()[0],
-            getRequestOperationContext.getPath());
     Assert.assertEquals(RequestMethod.GET.name(), getRequestOperationContext.getHttpMethod());
+  }
+
+  @Test
+  public void pathOfRequestMapping() {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
+    RequestMapping requestMappingClassAnnotation = httpMethodResourceClass.getAnnotation(RequestMapping.class);
+    RequestMappingClassAnnotationProcessor requestMappingClassAnnotationProcessor = new RequestMappingClassAnnotationProcessor();
+    requestMappingClassAnnotationProcessor.process(requestMappingClassAnnotation, oasContext);
+    Assert.assertEquals(requestMappingClassAnnotation.value()[0], oasContext.getBasePath());
+  }
+
+  @Test
+  public void headersOfRequestMapping() throws NoSuchMethodException {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
+    RequestMappingMethodAnnotationProcessor requestMappingMethodAnnotationProcessor = new RequestMappingMethodAnnotationProcessor();
+    Method requestMethod = httpMethodResourceClass.getMethod("request");
+    RequestMapping requestMappingMethodAnnotation = requestMethod.getAnnotation(RequestMapping.class);
+    OperationContext requestOperationContext = new OperationContext(requestMethod, oasContext);
+    requestMappingMethodAnnotationProcessor.process(requestMappingMethodAnnotation, requestOperationContext);
+    Assert.assertArrayEquals(requestMappingMethodAnnotation.headers(), requestOperationContext.getHeaders());
+  }
+
+  @Test
+  public void consumesOfRequestMapping() throws NoSuchMethodException {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
+    RequestMappingMethodAnnotationProcessor requestMappingMethodAnnotationProcessor = new RequestMappingMethodAnnotationProcessor();
+    Method requestMethod = httpMethodResourceClass.getMethod("request");
+    RequestMapping requestMappingMethodAnnotation = requestMethod.getAnnotation(RequestMapping.class);
+    OperationContext requestOperationContext = new OperationContext(requestMethod, oasContext);
+    requestMappingMethodAnnotationProcessor.process(requestMappingMethodAnnotation, requestOperationContext);
+    Assert.assertArrayEquals(requestMappingMethodAnnotation.consumes(), requestOperationContext.getConsumers());
+  }
+
+  @Test
+  public void producesOfRequestMapping() throws NoSuchMethodException {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
+    RequestMappingMethodAnnotationProcessor requestMappingMethodAnnotationProcessor = new RequestMappingMethodAnnotationProcessor();
+    Method requestMethod = httpMethodResourceClass.getMethod("request");
+    RequestMapping requestMappingMethodAnnotation = requestMethod.getAnnotation(RequestMapping.class);
+    OperationContext requestOperationContext = new OperationContext(requestMethod, oasContext);
+    requestMappingMethodAnnotationProcessor.process(requestMappingMethodAnnotation, requestOperationContext);
+    Assert.assertArrayEquals(requestMappingMethodAnnotation.produces(), requestOperationContext.getProduces());
+  }
+
+
+  @Test
+  public void methodOfGetMapping() throws NoSuchMethodException {
+
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
 
     GetMappingMethodAnnotationProcessor getMappingMethodAnnotationProcessor = new GetMappingMethodAnnotationProcessor();
     Method getMethod = httpMethodResourceClass.getMethod("get");
@@ -93,6 +148,14 @@ public class SpringAnnotationProcessorTest {
     getMappingMethodAnnotationProcessor.process(getMappingAnnotation, getOperationContext);
     Assert
         .assertEquals(getMappingAnnotation.value()[0], getOperationContext.getPath());
+  }
+
+  @Test
+  public void methodOfPostMapping() throws NoSuchMethodException {
+
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
 
     PostMappingMethodAnnotationProcessor postMappingMethodAnnotationProcessor = new PostMappingMethodAnnotationProcessor();
     Method postMethod = httpMethodResourceClass.getMethod("post");
@@ -101,6 +164,14 @@ public class SpringAnnotationProcessorTest {
     postMappingMethodAnnotationProcessor.process(postMappingAnnotation, postOperationContext);
     Assert
         .assertEquals(postMappingAnnotation.value()[0], postOperationContext.getPath());
+  }
+
+  @Test
+  public void methodOfPutMapping() throws NoSuchMethodException {
+
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
 
     PutMappingMethodAnnotationProcessor putMappingMethodAnnotationProcessor = new PutMappingMethodAnnotationProcessor();
     Method putMethod = httpMethodResourceClass.getMethod("put");
@@ -109,6 +180,13 @@ public class SpringAnnotationProcessorTest {
     putMappingMethodAnnotationProcessor.process(putMappingAnnotation, putOperationContext);
     Assert
         .assertEquals(putMappingAnnotation.value()[0], putOperationContext.getPath());
+  }
+
+  @Test
+  public void methodOfDeleteMapping() throws NoSuchMethodException {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
+    OasContext oasContext = new OasContext(parser);
+    Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
 
     DeleteMappingMethodAnnotationProcessor deleteMappingMethodAnnotationProcessor = new DeleteMappingMethodAnnotationProcessor();
     Method deleteMethod = httpMethodResourceClass.getMethod("delete");
@@ -195,7 +273,7 @@ public class SpringAnnotationProcessorTest {
   @RequestMapping(value = "/path", method = RequestMethod.GET)
   class HttpMethodResource {
 
-    @RequestMapping(value = "/request", method = RequestMethod.POST, headers = "cookie=1")
+    @RequestMapping(value = "/request", method = RequestMethod.POST, headers = "cookie=1", consumes = "application/json", produces = "application/json")
     public String request() {
       return "request";
     }


[servicecomb-toolkit] 01/03: [SCB-1673] parse the remaining information of RequestMapping

Posted by ch...@apache.org.
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 7ad21eedcbd22c028be3704e63a05b905a49b8cc
Author: kakulisen <18...@163.com>
AuthorDate: Thu Dec 19 16:26:10 2019 +0800

    [SCB-1673] parse the remaining information of RequestMapping
    
    Signed-off-by: kakulisen <18...@163.com>
---
 .../toolkit/generator/context/OasContext.java      | 40 +++++++++++
 .../generator/context/OperationContext.java        | 81 +++++++++++++++++++++-
 ...stractHttpMethodMappingAnnotationProcessor.java | 36 +++-------
 .../RequestMappingClassAnnotationProcessor.java    | 41 +++++++++++
 .../RequestMappingMethodAnnotationProcessor.java   | 25 ++++---
 .../generator/SpringAnnotationProcessorTest.java   | 25 ++++++-
 6 files changed, 207 insertions(+), 41 deletions(-)

diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
index d1a80ff..90e1c47 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java
@@ -47,6 +47,14 @@ public class OasContext implements IExtensionsContext {
 
   private List<ISchemaContext> schemaCtxList = new ArrayList<>();
 
+  private String httpMethod;
+
+  private String[] consumers;
+
+  private String[] produces;
+
+  private String[] headers;
+
   public OasContext(OpenApiAnnotationParser parser) {
     this(new OpenAPI(), parser);
   }
@@ -162,4 +170,36 @@ public class OasContext implements IExtensionsContext {
   public Map<String, Object> getExtensions() {
     return openAPI.getExtensions();
   }
+
+  public String getHttpMethod() {
+    return httpMethod;
+  }
+
+  public void setHttpMethod(String httpMethod) {
+    this.httpMethod = httpMethod;
+  }
+
+  public String[] getConsumers() {
+    return consumers;
+  }
+
+  public void setConsumers(String[] consumers) {
+    this.consumers = consumers;
+  }
+
+  public String[] getProduces() {
+    return produces;
+  }
+
+  public void setProduces(String[] produces) {
+    this.produces = produces;
+  }
+
+  public String[] getHeaders() {
+    return headers;
+  }
+
+  public void setHeaders(String[] headers) {
+    this.headers = headers;
+  }
 }
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
index 6d36ccb..7941e54 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
@@ -19,8 +19,10 @@ package org.apache.servicecomb.toolkit.generator.context;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
@@ -37,6 +39,8 @@ 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.media.StringSchema;
+import io.swagger.v3.oas.models.parameters.HeaderParameter;
 import io.swagger.v3.oas.models.parameters.Parameter;
 import io.swagger.v3.oas.models.parameters.RequestBody;
 import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -74,6 +78,10 @@ public class OperationContext implements IExtensionsContext {
 
   private String[] consumers;
 
+  private String[] produces;
+
+  private String[] headers;
+
   public OperationContext(Method method, OasContext parentContext) {
     this.parentContext = parentContext;
     this.method = method;
@@ -87,7 +95,7 @@ public class OperationContext implements IExtensionsContext {
   }
 
   public boolean hasOperation() {
-    return httpMethod != null && method != null;
+    return getHttpMethod() != null && method != null;
   }
 
   public Operation toOperation() {
@@ -101,6 +109,8 @@ public class OperationContext implements IExtensionsContext {
     }
 
     operation.operationId(operationId);
+    processHeaders();
+    processProduces();
     correctResponse(apiResponses);
     operation.setResponses(apiResponses);
 
@@ -156,6 +166,57 @@ public class OperationContext implements IExtensionsContext {
     return operation;
   }
 
+  private void processHeaders() {
+
+    if (headers == null) {
+      headers = parentContext.getHeaders();
+    }
+
+    if (headers == null) {
+      return;
+    }
+
+    Arrays.stream(headers).forEach(header -> {
+      String[] headMap = header.split("=");
+      if (headMap.length == 2) {
+        HeaderParameter headerParameter = new HeaderParameter();
+        headerParameter.setName(headMap[0]);
+        StringSchema value = new StringSchema();
+        value.setDefault(headMap[1]);
+        headerParameter.setSchema(value);
+        operation.addParametersItem(headerParameter);
+      }
+    });
+  }
+
+  private void processProduces() {
+
+    if (produces == null) {
+      produces = parentContext.getProduces();
+    }
+
+    if (produces == null) {
+      return;
+    }
+
+    List<String> produceList = Arrays.stream(produces).filter(s -> !StringUtils.isEmpty(s))
+        .collect(Collectors.toList());
+
+    if (!produceList.isEmpty()) {
+      ApiResponse apiResponse = new ApiResponse();
+      Content content = new Content();
+      MediaType mediaType = new MediaType();
+      Schema schema = ModelConverter
+          .getSchema(getMethod().getReturnType(), getComponents(), RequestResponse.RESPONSE);
+      mediaType.schema(schema);
+      for (String produce : produceList) {
+        content.addMediaType(produce, mediaType);
+      }
+      apiResponse.setContent(content);
+      addResponse(HttpStatuses.OK, apiResponse);
+    }
+  }
+
   public void setRequestBody(RequestBody requestBody) {
     operation.requestBody(requestBody);
   }
@@ -238,7 +299,7 @@ public class OperationContext implements IExtensionsContext {
   }
 
   public String getHttpMethod() {
-    return httpMethod;
+    return Optional.ofNullable(httpMethod).orElse(parentContext.getHttpMethod());
   }
 
   public void setHttpMethod(String httpMethod) {
@@ -308,4 +369,20 @@ public class OperationContext implements IExtensionsContext {
   public void addParamCtx(ParameterContext ctx) {
     this.parameterContexts.add(ctx);
   }
+
+  public String[] getProduces() {
+    return produces;
+  }
+
+  public void setProduces(String[] produces) {
+    this.produces = produces;
+  }
+
+  public String[] getHeaders() {
+    return headers;
+  }
+
+  public void setHeaders(String[] headers) {
+    this.headers = headers;
+  }
 }
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 526b3c6..4205b70 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
@@ -17,22 +17,9 @@
 
 package org.apache.servicecomb.toolkit.generator.annotation;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-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.apache.servicecomb.toolkit.generator.util.RequestResponse;
-import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import io.swagger.v3.oas.models.media.Content;
-import io.swagger.v3.oas.models.media.MediaType;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.responses.ApiResponse;
-
 public abstract class AbstractHttpMethodMappingAnnotationProcessor<Annotation, Context> implements
     MethodAnnotationProcessor<Annotation, Context> {
 
@@ -58,6 +45,8 @@ public abstract class AbstractHttpMethodMappingAnnotationProcessor<Annotation, C
     if (null == consumes || consumes.length == 0) {
       return;
     }
+
+    operationContext.setConsumers(consumes);
   }
 
   protected void processProduces(String[] produces, OperationContext operationContext) {
@@ -65,22 +54,13 @@ public abstract class AbstractHttpMethodMappingAnnotationProcessor<Annotation, C
       return;
     }
 
-    List<String> produceList = Arrays.stream(produces).filter(s -> !StringUtils.isEmpty(s))
-        .collect(Collectors.toList());
+    operationContext.setProduces(produces);
+  }
 
-    if (!produceList.isEmpty()) {
-      ApiResponse apiResponse = new ApiResponse();
-      Content content = new Content();
-      MediaType mediaType = new MediaType();
-      Schema schema = ModelConverter
-          .getSchema(operationContext.getMethod().getReturnType(), operationContext.getComponents(),
-              RequestResponse.RESPONSE);
-      mediaType.schema(schema);
-      for (String produce : produceList) {
-        content.addMediaType(produce, mediaType);
-      }
-      apiResponse.setContent(content);
-      operationContext.addResponse(HttpStatuses.OK, apiResponse);
+  protected void processHeaders(String[] headers, OperationContext operationContext) {
+    if (null == headers || headers.length == 0) {
+      return;
     }
+    operationContext.setHeaders(headers);
   }
 }
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 ad01f16..860a11b 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
@@ -19,6 +19,7 @@ package org.apache.servicecomb.toolkit.generator.annotation;
 
 import org.apache.servicecomb.toolkit.generator.context.OasContext;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
 public class RequestMappingClassAnnotationProcessor implements
     ClassAnnotationProcessor<RequestMapping, OasContext> {
@@ -37,5 +38,45 @@ public class RequestMappingClassAnnotationProcessor implements
     }
 
     oasContext.setBasePath(paths[0]);
+
+    processMethod(requestMapping.method(), oasContext);
+    processConsumes(requestMapping.consumes(), oasContext);
+    processProduces(requestMapping.produces(), oasContext);
+    processHeaders(requestMapping.headers(), oasContext);
+  }
+
+  protected void processMethod(RequestMethod[] requestMethods, OasContext oasContext) {
+    if (null == requestMethods || requestMethods.length == 0) {
+      return;
+    }
+
+    if (requestMethods.length > 1) {
+      throw new Error(
+          "not allowed multi http method for " + oasContext.getCls().getName());
+    }
+
+    oasContext.setHttpMethod(requestMethods[0].name());
+  }
+
+  protected void processConsumes(String[] consumes, OasContext oasContext) {
+    if (null == consumes || consumes.length == 0) {
+      return;
+    }
+    oasContext.setConsumers(consumes);
+  }
+
+  protected void processProduces(String[] produces, OasContext oasContext) {
+    if (null == produces || produces.length == 0) {
+      return;
+    }
+    oasContext.setProduces(produces);
+  }
+
+  protected void processHeaders(String[] headers, OasContext oasContext) {
+    if (null == headers || headers.length == 0) {
+      return;
+    }
+    oasContext.setHeaders(headers);
   }
 }
+
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 040f559..06b6e65 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
@@ -19,23 +19,32 @@ package org.apache.servicecomb.toolkit.generator.annotation;
 
 import org.apache.servicecomb.toolkit.generator.context.OperationContext;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
-public class RequestMappingMethodAnnotationProcessor implements
-    MethodAnnotationProcessor<RequestMapping, OperationContext> {
+public class RequestMappingMethodAnnotationProcessor extends
+    AbstractHttpMethodMappingAnnotationProcessor<RequestMapping, OperationContext> {
 
   @Override
   public void process(RequestMapping requestMapping, OperationContext operationContext) {
 
-    String[] paths = requestMapping.value();
-    if (null == paths || paths.length == 0) {
+    this.processPath(requestMapping.path(), operationContext);
+    this.processPath(requestMapping.value(), operationContext);
+    this.processMethod(requestMapping.method(), operationContext);
+    this.processConsumes(requestMapping.consumes(), operationContext);
+    this.processProduces(requestMapping.produces(), operationContext);
+    this.processHeaders(requestMapping.headers(), operationContext);
+  }
+
+  protected void processMethod(RequestMethod[] requestMethods, OperationContext operationContext) {
+    if (null == requestMethods || requestMethods.length == 0) {
       return;
     }
 
-    // swagger only support one basePath
-    if (paths.length > 1) {
-      throw new Error("not support multi path for " + operationContext.getMethod().getName());
+    if (requestMethods.length > 1) {
+      throw new Error(
+          "not allowed multi http method for " + operationContext.getMethod().getName());
     }
 
-    operationContext.setPath(paths[0]);
+    this.processMethod(requestMethods[0], operationContext);
   }
 }
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 adfd48a..3cad49b 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
@@ -34,6 +34,7 @@ import org.apache.servicecomb.toolkit.generator.annotation.RequestPartAnnotation
 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.SpringmvcAnnotationParser;
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -44,6 +45,7 @@ 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.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
@@ -55,13 +57,15 @@ public class SpringAnnotationProcessorTest {
 
   @Test
   public void getHttpMethod() throws NoSuchMethodException {
+    SpringmvcAnnotationParser parser = new SpringmvcAnnotationParser();
 
-    OasContext oasContext = new OasContext(null);
+    OasContext oasContext = new OasContext(parser);
     Class<HttpMethodResource> httpMethodResourceClass = HttpMethodResource.class;
     RequestMapping requestMappingClassAnnotation = httpMethodResourceClass.getAnnotation(RequestMapping.class);
     RequestMappingClassAnnotationProcessor requestMappingClassAnnotationProcessor = new RequestMappingClassAnnotationProcessor();
     requestMappingClassAnnotationProcessor.process(requestMappingClassAnnotation, oasContext);
     Assert.assertEquals(requestMappingClassAnnotation.value()[0], oasContext.getBasePath());
+    Assert.assertEquals(RequestMethod.GET.name(), oasContext.getHttpMethod());
 
     RequestMappingMethodAnnotationProcessor requestMappingMethodAnnotationProcessor = new RequestMappingMethodAnnotationProcessor();
     Method requestMethod = httpMethodResourceClass.getMethod("request");
@@ -71,6 +75,16 @@ public class SpringAnnotationProcessorTest {
     Assert
         .assertEquals(requestMappingMethodAnnotation.value()[0],
             requestOperationContext.getPath());
+    Assert.assertEquals(RequestMethod.POST.name(), requestOperationContext.getHttpMethod());
+
+    Method getRequestMethod = httpMethodResourceClass.getMethod("getRequest");
+    RequestMapping getRequestMappingMethodAnnotation = getRequestMethod.getAnnotation(RequestMapping.class);
+    OperationContext getRequestOperationContext = new OperationContext(getRequestMethod, oasContext);
+    requestMappingMethodAnnotationProcessor.process(getRequestMappingMethodAnnotation, getRequestOperationContext);
+    Assert
+        .assertEquals(getRequestMappingMethodAnnotation.value()[0],
+            getRequestOperationContext.getPath());
+    Assert.assertEquals(RequestMethod.GET.name(), getRequestOperationContext.getHttpMethod());
 
     GetMappingMethodAnnotationProcessor getMappingMethodAnnotationProcessor = new GetMappingMethodAnnotationProcessor();
     Method getMethod = httpMethodResourceClass.getMethod("get");
@@ -178,14 +192,19 @@ public class SpringAnnotationProcessorTest {
   }
 
   @RestController
-  @RequestMapping("/path")
+  @RequestMapping(value = "/path", method = RequestMethod.GET)
   class HttpMethodResource {
 
-    @RequestMapping("/request")
+    @RequestMapping(value = "/request", method = RequestMethod.POST, headers = "cookie=1")
     public String request() {
       return "request";
     }
 
+    @RequestMapping(value = "/getRequest")
+    public String getRequest() {
+      return "getRequest";
+    }
+
     @GetMapping(value = "/get", consumes = {"application/json"}, produces = {"application/json"})
     public String get() {
       return "get";


[servicecomb-toolkit] 02/03: [SCB-1673] add response description

Posted by ch...@apache.org.
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 05972ce685d86e008e5ebe4cb8b25ddb67686358
Author: kakulisen <18...@163.com>
AuthorDate: Mon Dec 23 12:00:12 2019 +0800

    [SCB-1673] add response description
    
    Signed-off-by: kakulisen <18...@163.com>
---
 .../generator/annotation/ApiResponseMethodAnnotationProcessor.java      | 2 ++
 .../apache/servicecomb/toolkit/generator/context/OperationContext.java  | 1 +
 2 files changed, 3 insertions(+)

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 ea2a748..702c2f1 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
@@ -46,6 +46,8 @@ public class ApiResponseMethodAnnotationProcessor implements
 
     if (StringUtils.isNotEmpty(response.description())) {
       apiResponse.setDescription(response.description());
+    } else {
+      apiResponse.description("OK");
     }
 
     Header[] headersAnnotation = response.headers();
diff --git a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
index 7941e54..58d1b01 100644
--- a/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
+++ b/oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java
@@ -212,6 +212,7 @@ public class OperationContext implements IExtensionsContext {
       for (String produce : produceList) {
         content.addMediaType(produce, mediaType);
       }
+      apiResponse.description("OK");
       apiResponse.setContent(content);
       addResponse(HttpStatuses.OK, apiResponse);
     }