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

liubao pushed a commit to branch weak-contract-type
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/weak-contract-type by this 
push:
     new a64d200  [SCB-1336][WIP][WEAK] should not lost @ApiParam description 
when wrap parameter to body at swagger generator pojo mode
a64d200 is described below

commit a64d20093f321c67444434e2aa7f8c28425414af
Author: wujimin <[email protected]>
AuthorDate: Sun Jun 30 21:25:18 2019 +0800

    [SCB-1336][WIP][WEAK] should not lost @ApiParam description when wrap 
parameter to body at swagger generator pojo mode
---
 .../apache/servicecomb/swagger/SwaggerUtils.java   | 27 ++++++------
 .../generator/pojo/PojoOperationGenerator.java     |  7 +++-
 .../swagger/generator/core/TestSwaggerUtils.java   |  5 +++
 .../swagger/generator/core/schema/Schema.java      |  5 +++
 .../src/test/resources/schemas/allMethod.yaml      | 19 +++++++++
 .../test/resources/schemas/wrapToBodyWithDesc.yaml | 49 ++++++++++++++++++++++
 6 files changed, 99 insertions(+), 13 deletions(-)

diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
index 509c982..7cab421 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
@@ -115,18 +115,21 @@ public final class SwaggerUtils {
    */
   public static void validateSwagger(Swagger swagger) {
     Map<String, Path> paths = swagger.getPaths();
-    if (paths != null) {
-      for (Path path : paths.values()) {
-        Operation operation = path.getPost();
-        if (operation != null) {
-          List<Parameter> parameters = operation.getParameters();
-          for (Parameter parameter : parameters) {
-            if (BodyParameter.class.isInstance(parameter)) {
-              if (((BodyParameter) parameter).getSchema() == null) {
-                throw new ServiceCombException("swagger validator: body 
parameter schema is empty.");
-              }
-            }
-          }
+    if (paths == null) {
+      return;
+    }
+
+    for (Path path : paths.values()) {
+      Operation operation = path.getPost();
+      if (operation == null) {
+        continue;
+      }
+
+      for (Parameter parameter : operation.getParameters()) {
+        if (BodyParameter.class.isInstance(parameter) &&
+            !isRawJsonType(parameter) &&
+            ((BodyParameter) parameter).getSchema() == null) {
+          throw new ServiceCombException("swagger validator: body parameter 
schema is empty.");
         }
       }
     }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
index 9ed8568..e3aa409 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
@@ -83,9 +83,14 @@ public class PojoOperationGenerator extends 
AbstractOperationGenerator {
     bodyModel = new ModelImpl();
     bodyModel.setType(ModelImpl.OBJECT);
     for (ParameterGenerator parameterGenerator : bodyFields) {
-      SwaggerUtils.addDefinitions(swagger, 
parameterGenerator.getGenericType());
+      parameterGenerator.setHttpParameterType(HttpParameterType.BODY);
+      scanMethodParameter(parameterGenerator);
+
       Property property = 
ModelConverters.getInstance().readAsProperty(parameterGenerator.getGenericType());
+      
property.setDescription(parameterGenerator.getGeneratedParameter().getDescription());
       bodyModel.addProperty(parameterGenerator.getParameterName(), property);
+
+      parameterGenerator.setHttpParameterType(null);
     }
     swagger.addDefinition(simpleRef, bodyModel);
 
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
index 95a456d..3e8ea49 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
@@ -86,6 +86,11 @@ public class TestSwaggerUtils {
   }
 
   @Test
+  public void 
should_not_lost_ApiParam_description_when_wrap_parameter_to_body() {
+    testSchemaMethod("wrapToBodyWithDesc", "wrapToBodyWithDesc");
+  }
+
+  @Test
   public void testEnum() {
     testSchemaMethod("enum", "testEnum");
   }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/schema/Schema.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/schema/Schema.java
index 8176361..9ef232a 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/schema/Schema.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/schema/Schema.java
@@ -32,6 +32,7 @@ import 
org.apache.servicecomb.foundation.test.scaffolding.model.Color;
 import org.apache.servicecomb.foundation.test.scaffolding.model.User;
 
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ResponseHeader;
 
@@ -214,6 +215,10 @@ public class Schema {
 
   }
 
+  public void wrapToBodyWithDesc(@ApiParam(value = "desc") int value) {
+
+  }
+
   public void ignoreRequest(HttpServletRequest request, int value) {
 
   }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
 
b/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
index c8fcdc3..a2a2e24 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
+++ 
b/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
@@ -509,6 +509,18 @@ paths:
       responses:
         200:
           description: "response of 200"
+  /wrapToBodyWithDesc:
+    post:
+      operationId: "wrapToBodyWithDesc"
+      parameters:
+      - in: "body"
+        name: "value"
+        required: false
+        schema:
+          $ref: "#/definitions/wrapToBodyWithDescBody"
+      responses:
+        200:
+          description: "response of 200"
 definitions:
   ignoreRequestBody:
     type: "object"
@@ -828,3 +840,10 @@ definitions:
       value:
         type: "integer"
         format: "int16"
+  wrapToBodyWithDescBody:
+    type: "object"
+    properties:
+      value:
+        type: "integer"
+        format: "int32"
+        description: "desc"
diff --git 
a/swagger/swagger-generator/generator-core/src/test/resources/schemas/wrapToBodyWithDesc.yaml
 
b/swagger/swagger-generator/generator-core/src/test/resources/schemas/wrapToBodyWithDesc.yaml
new file mode 100644
index 0000000..1e4a9db
--- /dev/null
+++ 
b/swagger/swagger-generator/generator-core/src/test/resources/schemas/wrapToBodyWithDesc.yaml
@@ -0,0 +1,49 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+---
+swagger: "2.0"
+info:
+  version: "1.0.0"
+  title: "swagger definition for 
org.apache.servicecomb.swagger.generator.core.schema.Schema"
+  x-java-interface: "gen.cse.ms.ut.SchemaIntf"
+basePath: "/Schema"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+  /wrapToBodyWithDesc:
+    post:
+      operationId: "wrapToBodyWithDesc"
+      parameters:
+      - in: "body"
+        name: "value"
+        required: false
+        schema:
+          $ref: "#/definitions/wrapToBodyWithDescBody"
+      responses:
+        200:
+          description: "response of 200"
+definitions:
+  wrapToBodyWithDescBody:
+    type: "object"
+    properties:
+      value:
+        type: "integer"
+        format: "int32"
+        description: "desc"

Reply via email to