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/01/12 01:19:11 UTC

[incubator-servicecomb-java-chassis] 01/02: SCB-179 support - as paramter name with RequestParam

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 152770705e5b2e315ecd9c838b9db435f8fdcecf
Author: acsukesh <su...@huawei.com>
AuthorDate: Wed Jan 10 15:53:33 2018 +0530

    SCB-179 support - as paramter name with RequestParam
---
 .../codec/protobuf/utils/ProtobufSchemaUtils.java  |  6 ++++--
 .../demo/jaxrs/tests/JaxrsIntegrationTestBase.java | 18 +++++++++++++++++
 .../jaxrs/tests/endpoints/SchemaFirstJaxrs.java    |  2 ++
 .../endpoints/SomeAbstractJaxrsRestEndpoint.java   |  6 ++++++
 .../resources/microservices/jaxrs/schemaFirst.yaml | 18 +++++++++++++++++
 .../swagger/generator/core/utils/ClassUtils.java   | 23 ++++++++++++++++++++--
 6 files changed, 69 insertions(+), 4 deletions(-)

diff --git a/common/common-protobuf/src/main/java/io/servicecomb/codec/protobuf/utils/ProtobufSchemaUtils.java b/common/common-protobuf/src/main/java/io/servicecomb/codec/protobuf/utils/ProtobufSchemaUtils.java
index eb02155..dd5911d 100644
--- a/common/common-protobuf/src/main/java/io/servicecomb/codec/protobuf/utils/ProtobufSchemaUtils.java
+++ b/common/common-protobuf/src/main/java/io/servicecomb/codec/protobuf/utils/ProtobufSchemaUtils.java
@@ -25,6 +25,8 @@ import java.util.Date;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.lang.model.SourceVersion;
+
 import org.springframework.util.ClassUtils;
 
 import com.fasterxml.jackson.databind.JavaType;
@@ -147,8 +149,8 @@ public final class ProtobufSchemaUtils {
       Parameter[] params = method.getParameters();
       for (int idx = 0; idx < params.length; idx++) {
         Parameter param = params[idx];
-        String paramName = operationMeta.getParamName(idx);
-
+        String paramName = io.servicecomb.swagger.generator.core.utils.ClassUtils
+            .correctMethodParameterName(operationMeta.getParamName(idx));
         config.addField(paramName, param.getParameterizedType());
       }
 
diff --git a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/JaxrsIntegrationTestBase.java b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/JaxrsIntegrationTestBase.java
index 4487aef..3d5df3f 100644
--- a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/JaxrsIntegrationTestBase.java
+++ b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/JaxrsIntegrationTestBase.java
@@ -238,6 +238,24 @@ public class JaxrsIntegrationTestBase {
   }
 
   @Test
+  public void ableToPostWithHeaderWithIdentifier() {
+    Person person = new Person();
+    person.setName("person name");
+
+    HttpHeaders headers = new HttpHeaders();
+    headers.setContentType(APPLICATION_JSON);
+    headers.add("prefix-test", "prefix  prefix");
+
+    HttpEntity<Person> requestEntity = new HttpEntity<>(person, headers);
+    for (String url : urls) {
+      ResponseEntity<String> responseEntity = restTemplate
+          .postForEntity(url + "saysomething1", requestEntity, String.class);
+
+      assertEquals("prefix  prefix person name", jsonBodyOf(responseEntity, String.class));
+    }
+  }
+
+  @Test
   public void ableToPostObjectAsJson() {
     Map<String, String> personFieldMap = new HashMap<>();
     personFieldMap.put("name", "person name from map");
diff --git a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SchemaFirstJaxrs.java b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SchemaFirstJaxrs.java
index b13d94a..5e92645 100644
--- a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SchemaFirstJaxrs.java
+++ b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SchemaFirstJaxrs.java
@@ -35,6 +35,8 @@ public interface SchemaFirstJaxrs {
 
   String saySomething(String prefix, Person user);
 
+  String saySomething1(String prefix_test, Person user);
+
   String sayHi(String name);
 
   String sayHi2(String name);
diff --git a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SomeAbstractJaxrsRestEndpoint.java b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SomeAbstractJaxrsRestEndpoint.java
index 796ee7e..a639700 100644
--- a/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SomeAbstractJaxrsRestEndpoint.java
+++ b/integration-tests/jaxrs-tests/src/test/java/io/servicecomb/demo/jaxrs/tests/endpoints/SomeAbstractJaxrsRestEndpoint.java
@@ -106,6 +106,12 @@ public class SomeAbstractJaxrsRestEndpoint {
     return prefix + " " + user.getName();
   }
 
+  @Path("/saysomething1")
+  @POST
+  public String saySomething1(@HeaderParam("prefix-test") String prefix_test, Person user) {
+    return prefix_test + " " + user.getName();
+  }
+
   @Path("/sayhi/{name}")
   @PUT
   public String sayHi(@PathParam("name") String name) {
diff --git a/integration-tests/jaxrs-tests/src/test/resources/microservices/jaxrs/schemaFirst.yaml b/integration-tests/jaxrs-tests/src/test/resources/microservices/jaxrs/schemaFirst.yaml
index 11ff68a..3d23f71 100644
--- a/integration-tests/jaxrs-tests/src/test/resources/microservices/jaxrs/schemaFirst.yaml
+++ b/integration-tests/jaxrs-tests/src/test/resources/microservices/jaxrs/schemaFirst.yaml
@@ -111,6 +111,24 @@ paths:
           description: say something
           schema:
             type: string
+  /saysomething1:
+    post:
+      operationId: saySomething1
+      parameters:
+        - name: prefix-test
+          in: header
+          required: true
+          type: string
+        - name: user
+          in: body
+          required: true
+          schema:
+            $ref: '#/definitions/Person'
+      responses:
+        200:
+          description: say something
+          schema:
+            type: string
   /sayhi/{name}:
     put:
       operationId: sayHi
diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
index d433c3e..4529607 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
@@ -24,6 +24,9 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+
+import javax.lang.model.SourceVersion;
+
 import java.util.Set;
 
 import org.springframework.util.StringUtils;
@@ -279,11 +282,27 @@ public final class ClassUtils {
     return JavassistUtils.createClass(classLoader, classConfig);
   }
 
-  public static String correctMethodParameterName(String name) {
-    return name.replace(".", "_").replace("-", "_");
+  public static String correctMethodParameterName(String paramName) {
+    if (SourceVersion.isName(paramName)) {
+      return paramName;
+    }
+    StringBuffer newParam = new StringBuffer();
+    char tempChar;
+    for (int index = 0; index < paramName.length(); index++) {
+      tempChar = paramName.charAt(index);
+      if (Character.isJavaIdentifierPart(tempChar)) {
+        newParam.append(paramName.charAt(index));
+      } else if (tempChar == '.' || tempChar == '-') {
+        newParam.append('_');
+      }
+    }
+    return newParam.toString();
   }
 
   public static String correctClassName(String name) {
+    if (SourceVersion.isIdentifier(name) && !SourceVersion.isKeyword(name)) {
+      return name;
+    }
     String parts[] = name.split("\\.", -1);
     for (int idx = 0; idx < parts.length; idx++) {
       String part = parts[idx];

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.