liubao68 closed pull request #980: [SCB-1007] not support 
CustomGeneric<Map<String,String>>
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/980
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/Generic.java
 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/Generic.java
new file mode 100644
index 000000000..085b2d1da
--- /dev/null
+++ 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/Generic.java
@@ -0,0 +1,21 @@
+/*
+ * 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.it.schema;
+
+public class Generic<T> {
+  public T value;
+}
diff --git 
a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/User.java
 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/User.java
new file mode 100644
index 000000000..3f87a9473
--- /dev/null
+++ 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/User.java
@@ -0,0 +1,76 @@
+/*
+ * 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.it.schema;
+
+import org.apache.servicecomb.foundation.common.utils.JsonUtils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+public class User {
+  private String name = "nameA";
+
+  private int age = 100;
+
+  private int index;
+
+  private String[] names;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String[] getNames() {
+    return names;
+  }
+
+  public void setNames(String[] names) {
+    this.names = names;
+  }
+
+  public int getAge() {
+    return age;
+  }
+
+  public void setAge(int age) {
+    this.age = age;
+  }
+
+  public int getIndex() {
+    return index;
+  }
+
+  public void setIndex(int index) {
+    this.index = index;
+  }
+
+  @Override
+  public String toString() {
+    return "User [name=" + name + ", age=" + age + ", index=" + index + "]";
+  }
+
+  public String jsonString() {
+    try {
+      return JsonUtils.writeValueAsString(this);
+    } catch (JsonProcessingException e) {
+      throw new IllegalStateException(e);
+    }
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
index cbc00d707..2209583cb 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
@@ -30,6 +30,7 @@
 import org.apache.servicecomb.it.testcase.TestDefaultValue;
 import org.apache.servicecomb.it.testcase.TestDownload;
 import org.apache.servicecomb.it.testcase.TestDownloadSlowStreamEdge;
+import org.apache.servicecomb.it.testcase.TestGenericEdge;
 import org.apache.servicecomb.it.testcase.TestIgnoreMethod;
 import org.apache.servicecomb.it.testcase.TestIgnoreStaticMethod;
 import org.apache.servicecomb.it.testcase.TestParamCodec;
@@ -40,6 +41,7 @@
 import org.apache.servicecomb.it.testcase.TestRestServerConfigEdge;
 import org.apache.servicecomb.it.testcase.TestTrace;
 import org.apache.servicecomb.it.testcase.TestTraceEdge;
+import org.apache.servicecomb.it.testcase.base.TestGeneric;
 import org.apache.servicecomb.it.testcase.thirdparty.Test3rdPartyInvocation;
 
 public class ConsumerMain {
@@ -112,6 +114,10 @@ private static void runShareTestCases() throws Throwable {
     ITJUnitUtils.runWithHighwayAndRest(TestParamCodec.class);
     ITJUnitUtils.run(TestParamCodecEdge.class);
 
+    //generic
+    ITJUnitUtils.runWithRest(TestGeneric.class);
+    ITJUnitUtils.run(TestGenericEdge.class);
+
     ITJUnitUtils.run(TestRequestBodySpringMvcSchema.class);
     ITJUnitUtils.run(TestDefaultJsonValueJaxrsSchema.class);
     ITJUnitUtils.run(TestRestController.class);
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestGenericEdge.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestGenericEdge.java
new file mode 100644
index 000000000..f20380b8a
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestGenericEdge.java
@@ -0,0 +1,88 @@
+/*
+ * 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.it.testcase;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.servicecomb.it.extend.engine.GateRestTemplate;
+import org.apache.servicecomb.it.schema.Generic;
+import org.apache.servicecomb.it.schema.User;
+import org.junit.Test;
+
+public class TestGenericEdge {
+  private static GateRestTemplate client = 
GateRestTemplate.createEdgeRestTemplate("generic");
+
+  @Test
+  public void testGenericMap() {
+    Generic<Map<String, String>> mapGeneric = new Generic<>();
+    Map<String, String> map = new HashMap<>();
+    map.put("test", "hello");
+    mapGeneric.value = map;
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, String>> result = client.postForObject("/genericMap", 
mapGeneric, Generic.class);
+    String test = result.value.get("test");
+    assertEquals(test, "hello");
+  }
+
+  @Test
+  public void testGenericMapList() {
+    Generic<Map<String, List<String>>> mapListGeneric = new Generic<>();
+    Map<String, List<String>> map = new HashMap<>();
+    List<String> list = new ArrayList<>();
+    list.add("hello");
+    map.put("test", list);
+    mapListGeneric.value = map;
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, List<String>>> result = 
client.postForObject("/genericMapList", mapListGeneric, Generic.class);
+    String test = result.value.get("test").get(0);
+    assertEquals("hello", test);
+  }
+
+  @Test
+  public void testGenericUser() {
+    Generic<User> generic = new Generic<>();
+    generic.value = new User();
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, Object>> result = client.postForObject("/genericUser", 
generic, Generic.class);
+    Map<String, Object> resultUser = result.value;
+    assertEquals("nameA", resultUser.get("name"));
+    assertEquals(100, resultUser.get("age"));
+  }
+
+  @Test
+  @SuppressWarnings("unchecked")
+  public void testGenericMapListUser() {
+    Generic<Map<String, List<User>>> mapListUserGeneric = new Generic<>();
+    Map<String, List<User>> map = new HashMap<>();
+    List<User> list = new ArrayList<>();
+    list.add(new User());
+    map.put("test", list);
+    mapListUserGeneric.value = map;
+
+    Generic<Map<String, List<Map<String, Object>>>> result = client
+        .postForObject("/genericMapListUser", mapListUserGeneric, 
Generic.class);
+    Map<String, Object> resultUser = result.value.get("test").get(0);
+
+    assertEquals("nameA", resultUser.get("name"));
+    assertEquals(100, resultUser.get("age"));
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestGeneric.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestGeneric.java
index 4c85af160..276bd3721 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestGeneric.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestGeneric.java
@@ -16,11 +16,243 @@
  */
 package org.apache.servicecomb.it.testcase.base;
 
+import static org.junit.Assert.assertEquals;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+
+import javax.xml.ws.Holder;
+
+import org.apache.servicecomb.it.Consumers;
+import org.apache.servicecomb.it.schema.Generic;
+import org.apache.servicecomb.it.schema.User;
 import org.junit.Test;
+import org.springframework.http.HttpStatus;
 
 public class TestGeneric {
+  interface GenericIntf {
+    Holder<User> holderUser(Holder<User> input);
+
+    Generic<User> genericUser(Generic<User> input);
+
+    Generic<Long> genericLong(Generic<Long> input);
+
+    Generic<Date> genericDate(Generic<Date> input);
+
+    Generic<HttpStatus> genericEnum(Generic<HttpStatus> input);
+
+    Generic<Generic<User>> genericGenericUser(Generic<Generic<User>> input);
+
+    Generic<Map<String, String>> genericMap(Generic<Map<String, String>> 
mapGeneric);
+
+    Generic<Map<String, List<String>>> genericMapList(Generic<Map<String, 
List<String>>> mapListGeneric);
+
+    Generic<Map<String, List<User>>> genericMapListUser(Generic<Map<String, 
List<User>>> mapListUserGeneric);
+  }
+
+  private static Consumers<GenericIntf> consumers = new Consumers<>("generic", 
GenericIntf.class);
+
+  private String expectUserStr = 
"{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}";
+
+  private SimpleDateFormat simpleDateFormat = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+
   @Test
-  public void test() {
+  public void testHolderUser_intf() {
+    Holder<User> holder = new Holder<>(new User());
+    Holder<User> result = consumers.getIntf().holderUser(holder);
+    assertEquals(result.value.jsonString(), expectUserStr);
+  }
 
+  @Test
+  public void testHolderUser_rt() {
+    Holder<User> holder = new Holder<>(new User());
+    @SuppressWarnings("unchecked")
+    Holder<User> result = 
consumers.getSCBRestTemplate().postForObject("/holderUser", holder, 
Holder.class);
+    assertEquals(result.value.jsonString(), expectUserStr);
+  }
+
+  @Test
+  public void testGenericUser_intf() {
+    Generic<User> generic = new Generic<>();
+    generic.value = new User();
+
+    Generic<User> result = consumers.getIntf().genericUser(generic);
+    assertEquals(result.value.jsonString(), expectUserStr);
+  }
+
+  @Test
+  public void testGenericUser_rt() {
+    Generic<User> generic = new Generic<>();
+    generic.value = new User();
+    @SuppressWarnings("unchecked")
+    Generic<User> result = 
consumers.getSCBRestTemplate().postForObject("/genericUser", generic, 
Generic.class);
+    assertEquals(result.value.jsonString(), expectUserStr);
+  }
+
+  @Test
+  public void testGenericLong_intf() {
+    Generic<Long> generic = new Generic<>();
+    generic.value = 100L;
+    Generic<Long> result = consumers.getIntf().genericLong(generic);
+    assertEquals(Long.class, result.value.getClass());
+    assertEquals(100L, (long) result.value);
+  }
+
+  @Test
+  public void testGenericLong_rt() {
+    Generic<Long> generic = new Generic<>();
+    generic.value = 100L;
+    @SuppressWarnings("unchecked")
+    Generic<Long> result = 
consumers.getSCBRestTemplate().postForObject("/genericLong", generic, 
Generic.class);
+    assertEquals(Long.class, result.value.getClass());
+    assertEquals(100L, (long) result.value);
+  }
+
+  @Test
+  public void testGenericDate_intf() {
+    Generic<Date> generic = new Generic<>();
+    generic.value = new Date(1001);
+    Generic<Date> result = consumers.getIntf().genericDate(generic);
+    assertEquals(result.value.getClass(), Date.class);
+    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+    assertEquals("1970-01-01T00:00:01.001Z", 
simpleDateFormat.format(result.value));
+  }
+
+  @Test
+  public void testGenericDate_rt() {
+    Generic<Date> generic = new Generic<>();
+    generic.value = new Date(1001);
+    @SuppressWarnings("unchecked")
+    Generic<Date> result = 
consumers.getSCBRestTemplate().postForObject("/genericDate", generic, 
Generic.class);
+    assertEquals(result.value.getClass(), Date.class);
+    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+    assertEquals("1970-01-01T00:00:01.001Z", 
simpleDateFormat.format(result.value));
+  }
+
+  @Test
+  public void testGenericEnum_intf() {
+    Generic<HttpStatus> generic = new Generic<>();
+    generic.value = HttpStatus.OK;
+
+    Generic<HttpStatus> result = consumers.getIntf().genericEnum(generic);
+    assertEquals(HttpStatus.class, result.value.getClass());
+    assertEquals(HttpStatus.OK, result.value);
+  }
+
+  @Test
+  public void testGenericEnum_rt() {
+    Generic<HttpStatus> generic = new Generic<>();
+    generic.value = HttpStatus.OK;
+    @SuppressWarnings("unchecked")
+    Generic<HttpStatus> result = 
consumers.getSCBRestTemplate().postForObject("/genericEnum", generic, 
Generic.class);
+    assertEquals(HttpStatus.class, result.value.getClass());
+    assertEquals(HttpStatus.OK, result.value);
+  }
+
+  @Test
+  public void testGenericGenericUser_intf() {
+    Generic<Generic<User>> generic = new Generic<>();
+    generic.value = new Generic<>();
+    generic.value.value = new User();
+
+    Generic<Generic<User>> result = 
consumers.getIntf().genericGenericUser(generic);
+    assertEquals(result.value.value.jsonString(), expectUserStr);
+  }
+
+  @Test
+  public void testGenericGenericUser_rt() {
+    Generic<Generic<User>> generic = new Generic<>();
+    generic.value = new Generic<>();
+    generic.value.value = new User();
+    @SuppressWarnings("unchecked")
+    Generic<Generic<User>> result = consumers.getSCBRestTemplate()
+        .postForObject("/genericGenericUser", generic, Generic.class);
+    assertEquals(result.value.value.jsonString(), expectUserStr);
+  }
+
+  @Test
+  public void testGenericMap_intf() {
+    Generic<Map<String, String>> mapGeneric = new Generic<>();
+    Map<String, String> map = new HashMap<>();
+    map.put("test", "hello");
+    mapGeneric.value = map;
+    Generic<Map<String, String>> result = 
consumers.getIntf().genericMap(mapGeneric);
+    String test = result.value.get("test");
+    assertEquals(test, "hello");
+  }
+
+  @Test
+  public void testGenericMap_rt() {
+    Generic<Map<String, String>> mapGeneric = new Generic<>();
+    Map<String, String> map = new HashMap<>();
+    map.put("test", "hello");
+    mapGeneric.value = map;
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, String>> result = consumers.getSCBRestTemplate()
+        .postForObject("/genericMap", mapGeneric, Generic.class);
+    String test = result.value.get("test");
+    assertEquals(test, "hello");
+  }
+
+  @Test
+  public void testGenericListMap_intf() {
+    Generic<Map<String, List<String>>> mapListGeneric = new Generic<>();
+    Map<String, List<String>> map = new HashMap<>();
+    List<String> list = new ArrayList<>();
+    list.add("hello");
+    map.put("test", list);
+    mapListGeneric.value = map;
+    Generic<Map<String, List<String>>> result = 
consumers.getIntf().genericMapList(mapListGeneric);
+    String test = result.value.get("test").get(0);
+    assertEquals(test, "hello");
+  }
+
+  @Test
+  public void testGenericListMap_rt() {
+    Generic<Map<String, List<String>>> mapListGeneric = new Generic<>();
+    Map<String, List<String>> map = new HashMap<>();
+    List<String> list = new ArrayList<>();
+    list.add("hello");
+    map.put("test", list);
+    mapListGeneric.value = map;
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, List<String>>> result = consumers.getSCBRestTemplate()
+        .postForObject("/genericMapList", mapListGeneric, Generic.class);
+    String test = result.value.get("test").get(0);
+    assertEquals(test, "hello");
+  }
+
+  @Test
+  public void testGenericListUserMap_intf() {
+    Generic<Map<String, List<User>>> mapListUserGeneric = new Generic<>();
+    Map<String, List<User>> map = new HashMap<>();
+    List<User> list = new ArrayList<>();
+    list.add(new User());
+    map.put("test", list);
+    mapListUserGeneric.value = map;
+    Generic<Map<String, List<User>>> result = 
consumers.getIntf().genericMapListUser(mapListUserGeneric);
+    String test = result.value.get("test").get(0).jsonString();
+    assertEquals(test, expectUserStr);
+  }
+
+  @Test
+  public void testGenericListUserMap_rt() {
+    Generic<Map<String, List<User>>> mapListUserGeneric = new Generic<>();
+    Map<String, List<User>> map = new HashMap<>();
+    List<User> list = new ArrayList<>();
+    list.add(new User());
+    map.put("test", list);
+    mapListUserGeneric.value = map;
+    @SuppressWarnings("unchecked")
+    Generic<Map<String, List<User>>> result = consumers.getSCBRestTemplate()
+        .postForObject("/genericMapListUser", mapListUserGeneric, 
Generic.class);
+    String test = result.value.get("test").get(0).jsonString();
+    assertEquals(test, expectUserStr);
   }
 }
diff --git a/integration-tests/it-edge/src/main/resources/microservice.yaml 
b/integration-tests/it-edge/src/main/resources/microservice.yaml
index 888f1dd6f..59b55809b 100644
--- a/integration-tests/it-edge/src/main/resources/microservice.yaml
+++ b/integration-tests/it-edge/src/main/resources/microservice.yaml
@@ -34,6 +34,11 @@ servicecomb:
   #        emptyAsNull: true
   operation:
     it-producer:
+      generic:
+        genericUser:
+          transport: rest
+        genericMapListUser:
+          transport: rest
       download:
         slowInputStream:
           transport: rest
@@ -43,6 +48,11 @@ servicecomb:
         queryInput:
           transport: rest
     it-producer-h2:
+      generic:
+        genericUser:
+          transport: rest
+        genericMapListUser:
+          transport: rest
       download:
         slowInputStream:
           transport: rest
@@ -52,6 +62,11 @@ servicecomb:
         queryInput:
           transport: rest
     it-producer-h2c:
+      generic:
+        genericUser:
+          transport: rest
+        genericMapListUser:
+          transport: rest
       download:
         slowInputStream:
           transport: rest
@@ -61,6 +76,11 @@ servicecomb:
         queryInput:
           transport: rest
     it-producer-deploy-springboot2-servlet:
+      generic:
+        genericUser:
+          transport: rest
+        genericMapListUser:
+          transport: rest
       download:
         slowInputStream:
           transport: rest
@@ -70,6 +90,11 @@ servicecomb:
         queryInput:
           transport: rest
     it-producer-deploy-springboot2-standalone:
+      generic:
+        genericUser:
+          transport: rest
+        genericMapListUser:
+          transport: rest
       download:
         slowInputStream:
           transport: rest
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/GenericSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/GenericSchema.java
new file mode 100644
index 000000000..03bf10f99
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/GenericSchema.java
@@ -0,0 +1,101 @@
+/*
+ * 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.it.schema;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.ws.Holder;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RestSchema(schemaId = "generic")
+@RequestMapping(path = "/v1/generic")
+public class GenericSchema {
+
+  @PostMapping(path = "holderUser")
+  public Holder<User> holderUser(@RequestBody Holder<User> input) {
+    Assert.isInstanceOf(Holder.class, input);
+    Assert.isInstanceOf(User.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericUser")
+  public Generic<User> genericUser(@RequestBody Generic<User> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(User.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericLong")
+  public Generic<Long> genericLong(@RequestBody Generic<Long> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Long.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericDate")
+  public Generic<Date> genericDate(@RequestBody Generic<Date> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Date.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericEnum")
+  public Generic<HttpStatus> genericEnum(@RequestBody Generic<HttpStatus> 
input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(HttpStatus.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericGenericUser")
+  public Generic<Generic<User>> genericGenericUser(@RequestBody 
Generic<Generic<User>> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Generic.class, input.value);
+    Assert.isInstanceOf(User.class, input.value.value);
+    return input;
+  }
+
+  @PostMapping(path = "genericMap")
+  public Generic<Map<String, String>> genericMap(@RequestBody 
Generic<Map<String, String>> mapGeneric) {
+    Assert.isInstanceOf(Generic.class, mapGeneric);
+    Assert.isInstanceOf(Map.class, mapGeneric.value);
+    return mapGeneric;
+  }
+
+  @PostMapping(path = "genericMapList")
+  public Generic<Map<String, List<String>>> genericMapList(
+      @RequestBody Generic<Map<String, List<String>>> mapListGeneric) {
+    Assert.isInstanceOf(Generic.class, mapListGeneric);
+    Assert.isInstanceOf(Map.class, mapListGeneric.value);
+    return mapListGeneric;
+  }
+
+  @PostMapping(path = "genericMapListUser")
+  public Generic<Map<String, List<User>>> genericMapListUser(
+      @RequestBody Generic<Map<String, List<User>>> mapListUserGeneric) {
+    Assert.isInstanceOf(Generic.class, mapListUserGeneric);
+    Assert.isInstanceOf(Map.class, mapListUserGeneric.value);
+    return mapListUserGeneric;
+  }
+}
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ClassUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ClassUtils.java
index ae7b7ada5..1e43c7e17 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ClassUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ClassUtils.java
@@ -166,7 +166,7 @@ public static String correctClassName(String name) {
         continue;
       }
 
-      part = part.replaceAll("[;<>-]", "_").replace("[", "array_");
+      part = part.replaceAll("[,;<>-]", "_").replace("[", "array_");
       if (Character.isDigit(part.charAt(0)) || SourceVersion.isKeyword(part)) {
         part = "_" + part;
       }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to