You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/08/17 02:23:54 UTC

[incubator-servicecomb-java-chassis] 05/10: [SCB-847]fix default value feature for primitive bugs.

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

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

commit 8b9ea359760624c086f1e5fa373b7cc6f944334a
Author: liubao <ba...@huawei.com>
AuthorDate: Thu Aug 16 13:27:03 2018 +0800

    [SCB-847]fix default value feature for primitive bugs.
---
 .../servicecomb/demo/jaxrs/client/JaxrsClient.java | 11 ++++---
 .../demo/jaxrs/server/JaxRSDefaultValues.java      | 22 ++++++++++++++
 .../demo/springmvc/client/SpringmvcClient.java     |  5 +++-
 .../springmvc/server/SpringMvcDefaultValues.java   | 34 ++++++++++++++++++----
 .../swagger/generator/core/OperationGenerator.java | 31 +++++++++-----------
 5 files changed, 76 insertions(+), 27 deletions(-)

diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
index ac13405..71407ef 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
@@ -296,7 +296,7 @@ public class JaxrsClient {
       // Message dependends on locale, so just check the short part.
       // 'must be greater than or equal to 20', propertyPath=add.arg1, rootBeanClass=class org.apache.servicecomb.demo.jaxrs.server.Validator, messageTemplate='{javax.validation.constraints.Min.message}'}]]
       // ignored
-      Map data = (Map)e.getErrorData();
+      Map data = (Map) e.getErrorData();
       TestMgr.check(
           "[ConstraintViolationImpl{interpolatedMessage=",
           data.get("message").toString().substring(0,
@@ -324,7 +324,7 @@ public class JaxrsClient {
       TestMgr.check(400, e.getStatus().getStatusCode());
       TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase());
       // Message dependends on locale, so just check the short part.
-      Map data = (Map)e.getErrorData();
+      Map data = (Map) e.getErrorData();
       TestMgr.check(
           "[ConstraintViolationImpl{interpolatedMessage=",
           data.get("message").toString().substring(0,
@@ -359,7 +359,7 @@ public class JaxrsClient {
       TestMgr.check(400, e.getStatus().getStatusCode());
       TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase());
       // Message dependends on locale, so just check the short part.
-      Map data = (Map)e.getErrorData();
+      Map data = (Map) e.getErrorData();
       TestMgr.check(
           "[ConstraintViolationImpl{interpolatedMessage",
           data.get("message").toString().substring(0,
@@ -438,6 +438,9 @@ public class JaxrsClient {
     TestMgr.check("Hello", result);
 
     result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", request, String.class);
-    TestMgr.check("Hello 00.0", result);
+    TestMgr.check("Hello nullnull", result);
+
+    result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", null, String.class);
+    TestMgr.check("Hello false,0,0,0,0,0,0.0,0.0,null", result);
   }
 }
diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java
index aa8f461..5a2788e 100644
--- a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java
+++ b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java
@@ -118,4 +118,26 @@ public class JaxRSDefaultValues {
   public String jaxRsJavaPrimitiveCombnation(@QueryParam("a") Integer a, @QueryParam("b") Float b) {
     return "Hello " + a + b;
   }
+
+  @Path("/allprimitivetypes")
+  @POST
+  public String allprimitivetypes(@QueryParam("pBoolean") boolean pBoolean,
+      @QueryParam("pChar") char pChar,
+      @QueryParam("pByte") byte pByte,
+      @QueryParam("pShort") short pShort,
+      @QueryParam("pInt") int pInt,
+      @QueryParam("pLong") long pLong,
+      @QueryParam("pFloat") float pFloat,
+      @QueryParam("pDouble") double pDouble,
+      @QueryParam("pDoubleWrap") Double pDoubleWrap) {
+    return "Hello " + pBoolean + ","
+        + pChar + ","
+        + pByte + ","
+        + pShort + ","
+        + pInt + ","
+        + pLong + ","
+        + pFloat + ","
+        + pDouble + ","
+        + pDoubleWrap;
+  }
 }
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index d9bd62c..37aa870 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -363,6 +363,9 @@ public class SpringmvcClient {
     TestMgr.check("Hello", result);
 
     result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", null, String.class);
-    TestMgr.check("Hello 00.0", result);
+    TestMgr.check("Hello nullnull", result);
+
+    result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", null, String.class);
+    TestMgr.check("Hello false,0,0,0,0,0,0.0,0.0,null", result);
   }
 }
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
index 1c99505..d6b33eb 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
@@ -52,7 +52,8 @@ public class SpringMvcDefaultValues {
   }
 
   @GetMapping("/query2")
-  public String query2(@RequestParam(name = "e", required = false) int e, @RequestParam(name = "a", defaultValue = "20") int a,
+  public String query2(@RequestParam(name = "e", required = false) int e,
+      @RequestParam(name = "a", defaultValue = "20") int a,
       @RequestParam(name = "b", defaultValue = "bobo") String b,
       @RequestParam(name = "c", defaultValue = "40") Integer c,
       @Min(value = 20) @Max(value = 30) @RequestParam(name = "d", required = false) int d) {
@@ -71,21 +72,44 @@ public class SpringMvcDefaultValues {
   }
 
   @PostMapping("/javaprimitivenumber")
-  public String springJavaPrimitiveNumber(@RequestParam(name = "a", required = false) float a, @RequestParam(name = "b", required = false) boolean b) {
+  public String springJavaPrimitiveNumber(@RequestParam(name = "a", required = false) float a,
+      @RequestParam(name = "b", required = false) boolean b) {
     return "Hello " + a + b;
   }
 
   @PostMapping("/javaprimitivestr")
-  public String springJavaPrimitiveStr(@RequestParam(name = "a", required = false) int a, @RequestParam(name = "b", required = false) String b) {
+  public String springJavaPrimitiveStr(@RequestParam(name = "a", required = false) int a,
+      @RequestParam(name = "b", required = false) String b) {
     if (b == null || b.equals("")) {
       return "Hello";
     }
     return "Hello " + b + a;
-
   }
 
   @PostMapping("/javaprimitivecomb")
-  public String springJavaPrimitiveCombination(@RequestParam(name = "a", required = false) Integer a, @RequestParam(name = "b", required = false) Float b) {
+  public String springJavaPrimitiveCombination(@RequestParam(name = "a", required = false) Integer a,
+      @RequestParam(name = "b", required = false) Float b) {
     return "Hello " + a + b;
   }
+
+  @PostMapping("/allprimitivetypes")
+  public String allprimitivetypes(@RequestParam(name = "pBoolean", required = false) boolean pBoolean,
+      @RequestParam(name = "pChar", required = false) char pChar,
+      @RequestParam(name = "pByte", required = false) byte pByte,
+      @RequestParam(name = "pShort", required = false) short pShort,
+      @RequestParam(name = "pInt", required = false) int pInt,
+      @RequestParam(name = "pLong", required = false) long pLong,
+      @RequestParam(name = "pFloat", required = false) float pFloat,
+      @RequestParam(name = "pDouble", required = false) double pDouble,
+      @RequestParam(name = "pDoubleWrap", required = false) Double pDoubleWrap) {
+    return "Hello " + pBoolean + ","
+        + pChar + ","
+        + pByte + ","
+        + pShort + ","
+        + pInt + ","
+        + pLong + ","
+        + pFloat + ","
+        + pDouble + ","
+        + pDoubleWrap;
+  }
 }
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
index f8251f9..376a1b3 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
@@ -277,13 +277,13 @@ public class OperationGenerator {
     Type[] parameterTypes = providerMethod.getGenericParameterTypes();
     for (int paramIdx = 0; paramIdx < parameterTypes.length; paramIdx++) {
       int swaggerParamCount = providerParameters.size();
+      Type type = parameterTypes[paramIdx];
 
       // 根据annotation处理
       Annotation[] paramAnnotations = allAnnotations[paramIdx];
-      processByParameterAnnotation(paramAnnotations, paramIdx);
+      processByParameterAnnotation(paramAnnotations, paramIdx, type);
 
       if (isArgumentNotProcessed(swaggerParamCount)) {
-        Type type = parameterTypes[paramIdx];
         // 是否需要根据参数类型处理,目标场景:httpRequest之类
         processByParameterType(type, paramIdx);
       }
@@ -299,7 +299,8 @@ public class OperationGenerator {
     return swaggerParamCount == providerParameters.size();
   }
 
-  protected void processByParameterAnnotation(Annotation[] paramAnnotations, int paramIdx) {
+  @SuppressWarnings({"rawtypes", "unckecked"})
+  protected void processByParameterAnnotation(Annotation[] paramAnnotations, int paramIdx, Type parameterType) {
     String defaultValue = null;
     Parameter parameter = null;
     for (Annotation annotation : paramAnnotations) {
@@ -319,20 +320,16 @@ public class OperationGenerator {
       if (defaultValue != null) {
         ((AbstractSerializableParameter<?>) parameter).setDefaultValue(defaultValue);
       } else if ((((AbstractSerializableParameter<?>) parameter).getDefaultValue() == null)
-          && (!((AbstractSerializableParameter<?>) parameter).getRequired())) { //if required false then only take java primitive values as defaults
-        String type = ((AbstractSerializableParameter<?>) parameter).getType();
-        switch (type) {
-          case "integer":
-            defaultValue = "0";
-            break;
-          case "number":
-            defaultValue = "0.0";
-            break;
-          case "boolean":
-            defaultValue = "false";
-            break;
-          default:
-            defaultValue = null;
+          && (!((AbstractSerializableParameter<?>) parameter)
+          .getRequired())) { //if required false then only take java primitive values as defaults
+        if (parameterType instanceof Class && ((Class) parameterType).isPrimitive()) {
+          switch (parameterType.getTypeName()) {
+            case "boolean":
+              defaultValue = "false";
+              break;
+            default:
+              defaultValue = "0";
+          }
         }
         ((AbstractSerializableParameter<?>) parameter).setDefaultValue(defaultValue);
       }