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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8020637  [SCB-2087] change swagger generator process type to JavaType 
to support generic easier
8020637 is described below

commit 8020637a026c463cb8102aca6d26c192e76ea24a
Author: wujimin <[email protected]>
AuthorDate: Thu Sep 24 20:38:21 2020 +0800

    [SCB-2087] change swagger generator process type to JavaType to support 
generic easier
---
 .../demo/jaxrs/client/TestDynamicConfig.java       |   4 +-
 .../dynamicconfig/test/DynamicConfigurationIT.java |   1 -
 .../provider/pojo/definition/PojoConsumerMeta.java |   5 +-
 .../pojo/definition/PojoConsumerOperationMeta.java |  17 +--
 .../apache/servicecomb/swagger/SwaggerUtils.java   |   4 +-
 .../swagger/generator/ParameterGenerator.java      |  15 ++-
 .../swagger/generator/ParameterProcessor.java      |  14 ++-
 .../swagger/generator/SwaggerGeneratorUtils.java   |  18 ++-
 .../generator/core/AbstractOperationGenerator.java |  20 +--
 .../AbstractSerializableParameterProcessor.java    |   6 +-
 .../parameter/ApiImplicitParamProcessor.java       |   3 +-
 .../processor/parameter/ApiParamProcessor.java     |   7 +-
 .../processor/parameter/JsonViewProcessor.java     |   3 +-
 .../processor/parameter/PartArrayProcessor.java    |   4 +-
 .../core/processor/parameter/PartProcessor.java    |   4 +-
 .../parameter/RawJsonRequestBodyProcessor.java     |   6 +-
 .../swagger/generator/core/utils/ParamUtils.java   | 103 ---------------
 .../generator/pojo/PojoOperationGenerator.java     |   5 +-
 .../generator/core/utils/TestParamUtils.java       | 140 ---------------------
 .../generator/jaxrs/JaxrsOperationGenerator.java   |   8 +-
 ...actSpringmvcSerializableParameterProcessor.java |   6 +-
 .../annotation/RequestBodyAnnotationProcessor.java |   4 +-
 .../consumer/ConsumerArgumentsMapperCreator.java   |   1 +
 .../producer/ProducerArgumentsMapperCreator.java   |  15 +--
 24 files changed, 101 insertions(+), 312 deletions(-)

diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
index 2f275a2..9dfa234 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
@@ -28,9 +28,8 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class TestDynamicConfig implements BootListener {
-
   @InjectProperties(prefix = "jaxrstest.jaxrsclient")
-  public class Configuration {
+  public static class Configuration {
     /*
      * 方法的 prefix 属性值 "override" 会覆盖标注在类定义的 @InjectProperties
      * 注解的 prefix 属性值。
@@ -101,6 +100,7 @@ public class TestDynamicConfig implements BootListener {
     public String strDef;
   }
 
+  @Override
   public void onAfterRegistry(BootEvent event) {
     Configuration configuration = 
SCBEngine.getInstance().getPriorityPropertyManager()
         .createConfigObject(Configuration.class,
diff --git 
a/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
 
b/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
index fbe557b..daa0f40 100644
--- 
a/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
+++ 
b/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
@@ -45,7 +45,6 @@ public class DynamicConfigurationIT {
     vertx.close();
   }
 
-
   @Test
   public void testDynamicConfiguration() {
     Assert.assertEquals(6666, 
DynamicPropertyFactory.getInstance().getIntProperty("timeout", 0).get());
diff --git 
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
 
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
index 987eebe..ee68858 100644
--- 
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
+++ 
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
@@ -55,10 +55,9 @@ public class PojoConsumerMeta {
           
.createOperationGenerator(swaggerConsumerOperation.getConsumerMethod());
       intfOperationGenerator.generateResponse();
       PojoConsumerOperationMeta pojoConsumerOperationMeta = new 
PojoConsumerOperationMeta(this, operationMeta,
-          swaggerConsumerOperation, intfSwaggerGenerator.getSwagger(), 
intfOperationGenerator.getOperation());
+          swaggerConsumerOperation);
 
-      operationMetas.put(swaggerConsumerOperation.getConsumerMethod(),
-          pojoConsumerOperationMeta);
+      operationMetas.put(swaggerConsumerOperation.getConsumerMethod(), 
pojoConsumerOperationMeta);
     }
   }
 
diff --git 
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
 
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
index 68d3b65..7199efe 100644
--- 
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
+++ 
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
@@ -24,13 +24,10 @@ import javax.servlet.http.Part;
 
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.swagger.engine.SwaggerConsumerOperation;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
-
-import io.swagger.models.Operation;
-import io.swagger.models.Swagger;
+import com.google.common.reflect.TypeToken;
 
 public class PojoConsumerOperationMeta {
   private PojoConsumerMeta pojoConsumerMeta;
@@ -42,17 +39,15 @@ public class PojoConsumerOperationMeta {
   private JavaType responseType;
 
   public PojoConsumerOperationMeta(PojoConsumerMeta pojoConsumerMeta, 
OperationMeta operationMeta,
-      SwaggerConsumerOperation swaggerConsumerOperation,
-      Swagger intfSwagger, Operation intfOperation) {
+      SwaggerConsumerOperation swaggerConsumerOperation) {
     this.pojoConsumerMeta = pojoConsumerMeta;
     this.operationMeta = operationMeta;
     this.swaggerConsumerOperation = swaggerConsumerOperation;
 
-    Type intfResponseType = ParamUtils
-        .getGenericParameterType(swaggerConsumerOperation.getConsumerClass(),
-            swaggerConsumerOperation.getConsumerMethod().getDeclaringClass(),
-            
swaggerConsumerOperation.getConsumerMethod().getGenericReturnType());
-
+    Type intfResponseType =
+        TypeToken.of(swaggerConsumerOperation.getConsumerClass())
+            
.resolveType(swaggerConsumerOperation.getConsumerMethod().getGenericReturnType())
+            .getType();
     if (intfResponseType instanceof Class && 
Part.class.isAssignableFrom((Class<?>) intfResponseType)) {
       responseType = TypeFactory.defaultInstance().constructType(Part.class);
       return;
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 30831ab..29fdb87 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
@@ -218,14 +218,14 @@ public final class SwaggerUtils {
     }
   }
 
-  public static void setParameterType(Swagger swagger, Type type, 
AbstractSerializableParameter<?> parameter) {
+  public static void setParameterType(Swagger swagger, JavaType type, 
AbstractSerializableParameter<?> parameter) {
     addDefinitions(swagger, type);
     Property property = ModelConverters.getInstance().readAsProperty(type);
 
     if (isComplexProperty(property)) {
       // cannot set a simple parameter(header, query, etc.) as complex type
       String msg = String
-          .format("not allow complex type for %s parameter, type=%s.", 
parameter.getIn(), type.getTypeName());
+          .format("not allow complex type for %s parameter, type=%s.", 
parameter.getIn(), type.toCanonical());
       throw new IllegalStateException(msg);
     }
     parameter.setProperty(property);
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
index d291b6c..59a25c9 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
@@ -24,6 +24,9 @@ import java.util.Map;
 
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
 import io.swagger.models.parameters.Parameter;
 
 public class ParameterGenerator {
@@ -34,13 +37,13 @@ public class ParameterGenerator {
   /**
    * when wrap parameters to body, genericType is null
    */
-  private Type genericType;
+  private JavaType genericType;
 
   private HttpParameterType httpParameterType;
 
   private Parameter generatedParameter;
 
-  public ParameterGenerator(String parameterName, List<Annotation> 
annotations, Type genericType,
+  public ParameterGenerator(String parameterName, List<Annotation> 
annotations, JavaType genericType,
       HttpParameterType httpParameterType, Parameter generatedParameter) {
     this.parameterName = parameterName;
     this.annotations = annotations;
@@ -57,7 +60,8 @@ public class ParameterGenerator {
     this.annotations = 
SwaggerGeneratorUtils.collectParameterAnnotations(parameterAnnotations,
         methodAnnotationMap,
         parameterName);
-    this.genericType = SwaggerGeneratorUtils.collectGenericType(annotations, 
genericType);
+    this.genericType = TypeFactory.defaultInstance()
+        .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, 
genericType));
     this.httpParameterType = 
SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
   }
 
@@ -73,7 +77,8 @@ public class ParameterGenerator {
   public ParameterGenerator(String parameterName, List<Annotation> 
annotations) {
     this.parameterName = parameterName;
     this.annotations = annotations;
-    this.genericType = SwaggerGeneratorUtils.collectGenericType(annotations, 
null);
+    this.genericType = TypeFactory.defaultInstance()
+        .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, 
null));
     this.httpParameterType = 
SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
   }
 
@@ -85,7 +90,7 @@ public class ParameterGenerator {
     return annotations;
   }
 
-  public Type getGenericType() {
+  public JavaType getGenericType() {
     return genericType;
   }
 
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
index 7bb6610..8e3e7a0 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
@@ -20,12 +20,19 @@ import java.lang.reflect.Type;
 
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 
 public interface ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
   Type getProcessType();
 
+  default JavaType getProcessJavaType() {
+    return TypeFactory.defaultInstance().constructType(getProcessType());
+  }
+
   String getParameterName(ANNOTATION parameterAnnotation);
 
   default Type getGenericType(ANNOTATION parameterAnnotation) {
@@ -34,6 +41,11 @@ public interface ParameterProcessor<SWAGGER_PARAMETER, 
ANNOTATION> {
 
   HttpParameterType getHttpParameterType(ANNOTATION parameterAnnotation);
 
-  void fillParameter(Swagger swagger, Operation operation, SWAGGER_PARAMETER 
parameter, Type type,
+  void fillParameter(Swagger swagger, Operation operation, SWAGGER_PARAMETER 
parameter, JavaType type,
       ANNOTATION annotation);
+
+  default void fillParameter(Swagger swagger, Operation operation, 
SWAGGER_PARAMETER parameter, Type type,
+      ANNOTATION annotation) {
+    fillParameter(swagger, operation, parameter, 
TypeFactory.defaultInstance().constructType(type), annotation);
+  }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
index 4d8e136..9d9a3b0 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
@@ -36,8 +36,10 @@ import 
org.apache.servicecomb.swagger.generator.core.processor.response.DefaultR
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
+import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.parameters.Parameter;
 import io.swagger.util.Json;
@@ -46,15 +48,17 @@ public final class SwaggerGeneratorUtils {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(SwaggerGeneratorUtils.class);
 
   // all static fields load from SPI and stateless
-  private static Set<Type> contextTypes = 
SPIServiceUtils.getOrLoadSortedService(SwaggerContextRegister.class).stream()
-      .map(SwaggerContextRegister::getContextType)
+  private static Set<JavaType> contextTypes = 
SPIServiceUtils.getOrLoadSortedService(SwaggerContextRegister.class)
+      .stream()
+      .map(swaggerContextRegister -> TypeFactory.defaultInstance()
+          .constructType(swaggerContextRegister.getContextType()))
       .collect(Collectors.toSet());
 
   private static Map<Type, ClassAnnotationProcessor<?>> 
classAnnotationProcessors = new HashMap<>();
 
   private static Map<Type, MethodAnnotationProcessor<?>> 
methodAnnotationProcessors = new HashMap<>();
 
-  private static Map<Type, ParameterProcessor<?, ?>> parameterProcessors = new 
HashMap<>();
+  private static Map<JavaType, ParameterProcessor<?, ?>> parameterProcessors = 
new HashMap<>();
 
   private static Map<Type, ResponseTypeProcessor> responseTypeProcessors = new 
HashMap<>();
 
@@ -79,9 +83,10 @@ public final class SwaggerGeneratorUtils {
     }
 
     for (ParameterProcessor<?, ?> processor : 
SPIServiceUtils.getOrLoadSortedService(ParameterProcessor.class)) {
-      if (parameterProcessors.putIfAbsent(processor.getProcessType(), 
processor) != null) {
+      JavaType javaType = processor.getProcessJavaType();
+      if (parameterProcessors.putIfAbsent(javaType, processor) != null) {
         LOGGER.info("ignore duplicated ParameterProcessor, type={}, 
processor={}.",
-            processor.getProcessType().getTypeName(), 
processor.getClass().getName());
+            javaType.toCanonical(), processor.getClass().getName());
       }
     }
 
@@ -112,6 +117,7 @@ public final class SwaggerGeneratorUtils {
   @SuppressWarnings("unchecked")
   public static <SWAGGER_PARAMETER, ANNOTATION> 
ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> findParameterProcessors(
       Type type) {
+    type = TypeFactory.defaultInstance().constructType(type);
     return (ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION>) 
parameterProcessors.get(type);
   }
 
@@ -128,7 +134,7 @@ public final class SwaggerGeneratorUtils {
     return defaultResponseTypeProcessor;
   }
 
-  public static boolean isContextParameter(Type type) {
+  public static boolean isContextParameter(JavaType type) {
     return contextTypes.contains(type);
   }
 
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
index 0e38027..8d846e1 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
@@ -48,12 +48,12 @@ import 
org.apache.servicecomb.swagger.generator.ResponseTypeProcessor;
 import org.apache.servicecomb.swagger.generator.SwaggerConst;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 import org.apache.servicecomb.swagger.generator.core.utils.MethodUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 
 import com.fasterxml.jackson.databind.BeanDescription;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
 import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.google.common.reflect.TypeToken;
 
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -226,7 +226,9 @@ public abstract class AbstractOperationGenerator implements 
OperationGenerator {
 
   protected void initMethodParameterGenerators(Map<String, List<Annotation>> 
methodAnnotationMap) {
     for (java.lang.reflect.Parameter methodParameter : method.getParameters()) 
{
-      Type genericType = ParamUtils.getGenericParameterType(clazz, method, 
methodParameter);
+      Type genericType = TypeToken.of(clazz)
+          .resolveType(methodParameter.getParameterizedType())
+          .getType();
       ParameterGenerator parameterGenerator = new ParameterGenerator(method, 
methodAnnotationMap, methodParameter,
           genericType);
       validateParameter(parameterGenerator.getGenericType());
@@ -264,7 +266,7 @@ public abstract class AbstractOperationGenerator implements 
OperationGenerator {
           methodAnnotationMap,
           propertyDefinition.getName(),
           annotations,
-          propertyDefinition.getPrimaryType().getRawClass());
+          propertyDefinition.getPrimaryType());
       parameterGenerators.add(propertyParameterGenerator);
     }
   }
@@ -306,8 +308,8 @@ public abstract class AbstractOperationGenerator implements 
OperationGenerator {
         .add(annotation);
   }
 
-  protected void validateParameter(Type type) {
-    if (type instanceof HttpServletResponse) {
+  protected void validateParameter(JavaType type) {
+    if (type.isTypeOrSubTypeOf(HttpServletResponse.class)) {
       // not support, log the reason
       throw new IllegalStateException(
           "all input/output of ServiceComb operation are models, not allow to 
use HttpServletResponse.");
@@ -359,7 +361,7 @@ public abstract class AbstractOperationGenerator implements 
OperationGenerator {
     }
   }
 
-  protected void fillParameter(Swagger swagger, Parameter parameter, String 
parameterName, Type type,
+  protected void fillParameter(Swagger swagger, Parameter parameter, String 
parameterName, JavaType type,
       List<Annotation> annotations) {
     for (Annotation annotation : annotations) {
       ParameterProcessor<Parameter, Annotation> processor = 
findParameterProcessors(annotation.annotationType());
@@ -492,8 +494,10 @@ public abstract class AbstractOperationGenerator 
implements OperationGenerator {
   }
 
   protected Model createResponseModel() {
-    Type responseType = ParamUtils
-        .getGenericParameterType(clazz, method.getDeclaringClass(), 
method.getGenericReturnType());
+    Type responseType =
+        TypeToken.of(clazz)
+            .resolveType(method.getGenericReturnType())
+            .getType();
     if (ReflectionUtils.isVoid(responseType)) {
       return null;
     }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
index b9781b8..bc57b41 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
@@ -17,12 +17,12 @@
 
 package org.apache.servicecomb.swagger.generator.core.processor.parameter;
 
-import java.lang.reflect.Type;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.swagger.SwaggerUtils;
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.AbstractSerializableParameter;
@@ -30,7 +30,7 @@ import 
io.swagger.models.parameters.AbstractSerializableParameter;
 public abstract class AbstractSerializableParameterProcessor<SWAGGER_PARAMETER 
extends AbstractSerializableParameter<?>, ANNOTATION> implements
     ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
SWAGGER_PARAMETER parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
SWAGGER_PARAMETER parameter, JavaType type,
       ANNOTATION annotation) {
     SwaggerUtils.setParameterType(swagger, type, parameter);
 
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
index 484f006..b4528ae 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
@@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
 import com.google.inject.util.Types;
 
 import io.swagger.annotations.ApiImplicitParam;
@@ -65,7 +66,7 @@ public class ApiImplicitParamProcessor implements 
ParameterProcessor<Parameter,
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, JavaType type,
       ApiImplicitParam apiImplicitParam) {
     // no need fill, will process by 
io.swagger.util.ParameterProcessor.applyAnnotations
   }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
index a2b780e..dcd1d74 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
@@ -16,11 +16,11 @@
  */
 package org.apache.servicecomb.swagger.generator.core.processor.parameter;
 
-import java.lang.reflect.Type;
-
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.annotations.ApiParam;
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
@@ -43,7 +43,8 @@ public class ApiParamProcessor implements 
ParameterProcessor<Parameter, ApiParam
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, Type type, ApiParam annotation) {
+  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, JavaType type,
+      ApiParam annotation) {
     // no need fill, will process by 
io.swagger.util.ParameterProcessor.applyAnnotations
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
index 1f5e817..acbe566 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
@@ -24,6 +24,7 @@ import org.apache.servicecomb.swagger.generator.SwaggerConst;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
 import com.fasterxml.jackson.annotation.JsonView;
+import com.fasterxml.jackson.databind.JavaType;
 
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
@@ -47,7 +48,7 @@ public class JsonViewProcessor implements 
ParameterProcessor<Parameter, Annotati
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, Parameter 
parameter, JavaType type,
       Annotation annotation) {
     if (!(annotation instanceof JsonView)) {
       throw new IllegalArgumentException(
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
index a6acd6b..4156287 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
@@ -24,6 +24,8 @@ import javax.servlet.http.Part;
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.FormParameter;
@@ -48,7 +50,7 @@ public class PartArrayProcessor implements 
ParameterProcessor<FormParameter, Ann
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
FormParameter parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
FormParameter parameter, JavaType type,
       Annotation annotation) {
     Property property = new ArrayProperty(new FileProperty());
     parameter.setProperty(property);
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
index ac3703a..b09c11c 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
@@ -24,6 +24,8 @@ import javax.servlet.http.Part;
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.FormParameter;
@@ -46,7 +48,7 @@ public class PartProcessor implements 
ParameterProcessor<FormParameter, Annotati
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
FormParameter parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
FormParameter parameter, JavaType type,
       Annotation annotation) {
     parameter.setType(new FileProperty().getType());
   }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
index 6cfa07f..71ee994 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
@@ -17,13 +17,13 @@
 
 package org.apache.servicecomb.swagger.generator.core.processor.parameter;
 
-import java.lang.reflect.Type;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.swagger.extend.annotations.RawJsonRequestBody;
 import org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
@@ -51,7 +51,7 @@ public class RawJsonRequestBodyProcessor implements 
ParameterProcessor<BodyParam
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
BodyParameter parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
BodyParameter parameter, JavaType type,
       RawJsonRequestBody annotation) {
     parameter.setVendorExtension("x-raw-json", true);
     parameter.setRequired(annotation.required());
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
deleted file mode 100644
index 0864045..0000000
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.swagger.generator.core.utils;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
-import org.apache.commons.lang3.reflect.TypeUtils;
-
-public final class ParamUtils {
-  private ParamUtils() {
-
-  }
-
-  public static Type getGenericParameterType(Class<?> mainClass, Method 
method, Parameter param) {
-    Type type = param.getParameterizedType();
-    return getGenericParameterType(mainClass, method.getDeclaringClass(), 
type);
-  }
-
-  public static Type getGenericParameterType(Class<?> mainClass, Class<?> 
declaringClass, Type type) {
-    if (type instanceof Class<?> || mainClass == declaringClass) {
-      return type;
-    }
-
-    if (type instanceof TypeVariable) {
-      TypeVariable<?>[] typeVariables = declaringClass.getTypeParameters();
-      Type[] actualTypes;
-      if (mainClass.getGenericSuperclass() != null) {
-        actualTypes = getActualTypes(mainClass.getGenericSuperclass());
-      } else {
-        actualTypes = new Type[0];
-        Type[] interfaceTypes = mainClass.getGenericInterfaces();
-        for (Type t : interfaceTypes) {
-          Type[] ttTypes = getActualTypes(t);
-          Type[] tempTypes = new Type[actualTypes.length + ttTypes.length];
-          System.arraycopy(actualTypes, 0, tempTypes, 0, actualTypes.length);
-          System.arraycopy(ttTypes, 0, tempTypes, actualTypes.length, 
ttTypes.length);
-          actualTypes = tempTypes;
-        }
-      }
-      if (typeVariables.length != actualTypes.length) {
-        throw new IllegalArgumentException(String
-            .format("not implement (%s) (%s) (%s), "
-                    + "e.g. extends multiple typed interface or too deep 
inheritance.",
-                mainClass.getName(), declaringClass.getName(), 
type.getTypeName()));
-      }
-      for (int i = 0; i < typeVariables.length; i++) {
-        if (typeVariables[i] == type) {
-          return actualTypes[i];
-        }
-      }
-    } else if (type instanceof GenericArrayType) {
-      Class<?> t = (Class<?>) getGenericParameterType(mainClass, 
declaringClass,
-          ((GenericArrayType) type).getGenericComponentType());
-      return Array.newInstance(t, 0).getClass();
-    } else if (type instanceof ParameterizedType) {
-      ParameterizedType parameterizedType = (ParameterizedType) type;
-      Type[] targetTypes = new 
Type[parameterizedType.getActualTypeArguments().length];
-      for (int i = 0; i < parameterizedType.getActualTypeArguments().length; 
i++) {
-        targetTypes[i] = getGenericParameterType(mainClass, declaringClass,
-            parameterizedType.getActualTypeArguments()[i]);
-      }
-      return TypeUtils.parameterize((Class) parameterizedType.getRawType(), 
targetTypes);
-    }
-    throw new IllegalArgumentException(String
-        .format("not implement (%s) (%s) (%s)",
-            mainClass.getName(), declaringClass.getName(), 
type.getTypeName()));
-  }
-
-  private static Type[] getActualTypes(Type type) {
-    if (type instanceof Class<?>) {
-      if (((Class<?>) type).getSuperclass() != null) {
-        return getActualTypes(((Class<?>) type).getSuperclass());
-      } else {
-        return getActualTypes(((Class<?>) type).getGenericInterfaces()[0]);
-      }
-    }
-    if (type instanceof ParameterizedType) {
-      return ((ParameterizedType) type).getActualTypeArguments();
-    }
-    return new Type[0];
-  }
-}
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 141d2ea..eb6b8de 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
@@ -18,7 +18,6 @@ package org.apache.servicecomb.swagger.generator.pojo;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
-import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -37,6 +36,8 @@ import 
org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 import org.apache.servicecomb.swagger.generator.core.utils.MethodUtils;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.converter.ModelConverters;
 import io.swagger.models.ModelImpl;
 import io.swagger.models.RefModel;
@@ -133,7 +134,7 @@ public class PojoOperationGenerator extends 
AbstractOperationGenerator {
   }
 
   @Override
-  protected void fillParameter(Swagger swagger, Parameter parameter, String 
parameterName, Type type,
+  protected void fillParameter(Swagger swagger, Parameter parameter, String 
parameterName, JavaType type,
       List<Annotation> annotations) {
     if (isWrapBody(parameter)) {
       return;
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
deleted file mode 100644
index 87c28a0..0000000
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.swagger.generator.core.utils;
-
-import static org.junit.Assert.assertEquals;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.apache.commons.lang3.reflect.TypeUtils;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.AbstractBaseService;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.AbstractBean;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.IBaseService;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.IMyService;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.MyEndpoint;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.MyEndpoint2;
-import 
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.PersonBean;
-import org.junit.Assert;
-import org.junit.Test;
-import org.springframework.web.multipart.MultipartFile;
-
-public class TestParamUtils {
-
-  @Test
-  public void testGenericTypeInheritance() throws Exception {
-    Method hello = IMyService.class.getMethod("hello", AbstractBean.class);
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(IMyService.class, 
IBaseService.class, hello.getGenericReturnType()));
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(IMyService.class, hello, 
hello.getParameters()[0]));
-
-    hello = MyEndpoint.class.getMethod("hello", AbstractBean.class);
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(MyEndpoint.class, 
AbstractBaseService.class, hello.getGenericReturnType()));
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(MyEndpoint.class, hello, 
hello.getParameters()[0]));
-
-    hello = MyEndpoint2.class.getMethod("hello", PersonBean.class);
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(MyEndpoint2.class, 
MyEndpoint2.class, hello.getGenericReturnType()));
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(MyEndpoint2.class, hello, 
hello.getParameters()[0]));
-
-    Method helloBody = IMyService.class.getMethod("helloBody", 
AbstractBean[].class);
-    assertEquals(PersonBean[].class,
-        ParamUtils.getGenericParameterType(IMyService.class, 
IBaseService.class, helloBody.getGenericReturnType()));
-    assertEquals(PersonBean[].class,
-        ParamUtils.getGenericParameterType(MyEndpoint.class, helloBody, 
helloBody.getParameters()[0]));
-
-    helloBody = MyEndpoint.class.getMethod("helloBody", AbstractBean[].class);
-    assertEquals(PersonBean[].class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, AbstractBaseService.class, 
helloBody.getGenericReturnType()));
-    assertEquals(PersonBean[].class,
-        ParamUtils.getGenericParameterType(MyEndpoint.class, helloBody, 
helloBody.getParameters()[0]));
-
-    Method helloList = IMyService.class.getMethod("helloList", List.class);
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
-        ParamUtils.getGenericParameterType(IMyService.class, 
IBaseService.class, helloList.getGenericReturnType()));
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
-        ParamUtils.getGenericParameterType(IMyService.class, helloList, 
helloList.getParameters()[0]));
-
-    helloList = MyEndpoint.class.getMethod("helloList", List.class);
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class), 
ParamUtils
-        .getGenericParameterType(MyEndpoint.class, AbstractBaseService.class, 
helloList.getGenericReturnType()));
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
-        ParamUtils.getGenericParameterType(MyEndpoint.class, helloList, 
helloList.getParameters()[0]));
-
-    Method actual = IMyService.class.getMethod("actual", PersonBean.class);
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(IMyService.class, 
IBaseService.class, actual.getGenericReturnType()));
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(IMyService.class, actual, 
actual.getParameters()[0]));
-
-    helloList = MyEndpoint.class.getMethod("actual", PersonBean.class);
-    assertEquals(PersonBean.class,
-        ParamUtils
-            .getGenericParameterType(MyEndpoint.class, 
AbstractBaseService.class, helloList.getGenericReturnType()));
-    assertEquals(PersonBean.class,
-        ParamUtils.getGenericParameterType(MyEndpoint.class, helloList, 
helloList.getParameters()[0]));
-
-    Method parentHello = IMyService.class.getMethod("parentHello", List.class);
-    assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
-        ParamUtils
-            .getGenericParameterType(IMyService.class, IMyService.class, 
parentHello.getGenericReturnType()));
-    assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
-        ParamUtils
-            .getGenericParameterType(IMyService.class, parentHello, 
parentHello.getParameters()[0]));
-  }
-
-  @Test
-  public void testGenericTypeInheritanceWithMethodUtils() throws Exception {
-    List<Method> methods = MethodUtils.findSwaggerMethods(MyEndpoint.class);
-    Assert.assertEquals(5, methods.size());
-    assertEquals(PersonBean.class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, 
methods.get(0).getDeclaringClass(),
-            methods.get(0).getGenericReturnType())); // actual
-    assertEquals(PersonBean.class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, methods.get(0),
-            methods.get(0).getParameters()[0])); // actual
-    assertEquals(PersonBean.class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, 
methods.get(1).getDeclaringClass(),
-            methods.get(1).getGenericReturnType())); // hello
-    assertEquals(PersonBean.class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, methods.get(1),
-            methods.get(1).getParameters()[0])); // hello
-    assertEquals(PersonBean[].class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, 
methods.get(2).getDeclaringClass(),
-            methods.get(2).getGenericReturnType())); // helloBody
-    assertEquals(PersonBean[].class, ParamUtils
-        .getGenericParameterType(MyEndpoint.class, methods.get(2),
-            methods.get(2).getParameters()[0])); // helloBody
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class), 
ParamUtils
-        .getGenericParameterType(MyEndpoint.class, 
methods.get(3).getDeclaringClass(),
-            methods.get(3).getGenericReturnType())); // helloList
-    assertEquals(TypeUtils.parameterize(List.class, PersonBean.class), 
ParamUtils
-        .getGenericParameterType(MyEndpoint.class, methods.get(3),
-            methods.get(3).getParameters()[0])); // helloList
-    assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class), 
ParamUtils
-        .getGenericParameterType(MyEndpoint.class, 
methods.get(4).getDeclaringClass(),
-            methods.get(4).getGenericReturnType())); // parentHello
-    assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class), 
ParamUtils
-        .getGenericParameterType(MyEndpoint.class, methods.get(4),
-            methods.get(4).getParameters()[0])); // parentHello
-  }
-}
diff --git 
a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
 
b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
index 999d023..b1f23c3 100644
--- 
a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
+++ 
b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.swagger.generator.jaxrs;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Parameter;
-import java.lang.reflect.Type;
 import java.util.List;
 import java.util.Map;
 
@@ -30,6 +29,7 @@ import 
org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 import org.apache.servicecomb.swagger.generator.rest.RestOperationGenerator;
 
+import com.fasterxml.jackson.databind.JavaType;
 import com.google.common.base.Defaults;
 
 import io.swagger.models.Swagger;
@@ -56,20 +56,20 @@ public class JaxrsOperationGenerator extends 
RestOperationGenerator {
 
   @Override
   protected void fillParameter(Swagger swagger, 
io.swagger.models.parameters.Parameter parameter, String parameterName,
-      Type type, List<Annotation> annotations) {
+      JavaType type, List<Annotation> annotations) {
     super.fillParameter(swagger, parameter, parameterName, type, annotations);
 
     if (!(parameter instanceof AbstractSerializableParameter)) {
       return;
     }
 
-    if (!(type instanceof Class && ((Class) type).isPrimitive())) {
+    if (!type.isPrimitive()) {
       return;
     }
 
     AbstractSerializableParameter<?> serializableParameter = 
(AbstractSerializableParameter<?>) parameter;
     if (serializableParameter.getDefault() == null && 
!parameter.getRequired()) {
-      
serializableParameter.setDefaultValue(String.valueOf(Defaults.defaultValue((Class<?>)
 type)));
+      
serializableParameter.setDefaultValue(String.valueOf(Defaults.defaultValue(type.getRawClass())));
     }
   }
 }
diff --git 
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
 
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
index e9ceb24..db3dbed 100644
--- 
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
+++ 
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
@@ -17,13 +17,13 @@
 
 package 
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
 
-import java.lang.reflect.Type;
-
 import org.apache.commons.lang3.StringUtils;
 import 
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractSerializableParameterProcessor;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.ValueConstants;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.AbstractSerializableParameter;
@@ -31,7 +31,7 @@ import 
io.swagger.models.parameters.AbstractSerializableParameter;
 public abstract class 
AbstractSpringmvcSerializableParameterProcessor<SWAGGER_PARAMETER extends 
AbstractSerializableParameter<?>, ANNOTATION> extends
     AbstractSerializableParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
SWAGGER_PARAMETER parameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
SWAGGER_PARAMETER parameter, JavaType type,
       ANNOTATION annotation) {
     super.fillParameter(swagger, operation, parameter, type, annotation);
 
diff --git 
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
 
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
index 83374a6..24fbfa6 100644
--- 
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
+++ 
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
@@ -23,6 +23,8 @@ import 
org.apache.servicecomb.swagger.generator.ParameterProcessor;
 import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import com.fasterxml.jackson.databind.JavaType;
+
 import io.swagger.models.Operation;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
@@ -44,7 +46,7 @@ public class RequestBodyAnnotationProcessor implements 
ParameterProcessor<BodyPa
   }
 
   @Override
-  public void fillParameter(Swagger swagger, Operation operation, 
BodyParameter bodyParameter, Type type,
+  public void fillParameter(Swagger swagger, Operation operation, 
BodyParameter bodyParameter, JavaType type,
       RequestBody requestBody) {
     bodyParameter.setRequired(requestBody.required());
   }
diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
index 53921b1..42b74dc 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
@@ -101,6 +101,7 @@ public class ConsumerArgumentsMapperCreator extends 
AbstractArgumentsMapperCreat
         this.swaggerParameters.get(swaggerBodyIdx).getName(), parameterName);
   }
 
+  @Override
   protected void processBeanParameter(int consumerParamIdx, 
java.lang.reflect.Parameter consumerParameter) {
     ConsumerBeanParamMapper mapper = new ConsumerBeanParamMapper(
         this.providerMethod.getParameters()[consumerParamIdx].getName());
diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
index aec3852..b27aea0 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
@@ -28,7 +28,6 @@ import java.util.Map;
 import org.apache.servicecomb.foundation.common.utils.LambdaMetafactoryUtils;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.swagger.generator.core.model.SwaggerOperation;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 import 
org.apache.servicecomb.swagger.invocation.arguments.AbstractArgumentsMapperCreator;
 import org.apache.servicecomb.swagger.invocation.arguments.ArgumentMapper;
 import 
org.apache.servicecomb.swagger.invocation.arguments.ContextArgumentMapperFactory;
@@ -37,6 +36,7 @@ import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.SerializationConfig;
 import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
 import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.google.common.reflect.TypeToken;
 
 public class ProducerArgumentsMapperCreator extends 
AbstractArgumentsMapperCreator {
   // swagger parameter types relate to producer
@@ -76,8 +76,9 @@ public class ProducerArgumentsMapperCreator extends 
AbstractArgumentsMapperCreat
   @Override
   protected ArgumentMapper createKnownParameterMapper(int providerParamIdx, 
Integer swaggerIdx) {
     String swaggerArgumentName = swaggerParameters.get(swaggerIdx).getName();
-    final Type providerType = 
ParamUtils.getGenericParameterType(this.providerClass, this.providerMethod,
-        this.providerMethod.getParameters()[providerParamIdx]);
+    Type providerType = TypeToken.of(providerClass)
+        
.resolveType(providerMethod.getGenericParameterTypes()[providerParamIdx])
+        .getType();
     swaggerParameterTypes
         .put(swaggerArgumentName, providerType);
     return new 
ProducerArgumentSame(providerMethod.getParameters()[providerParamIdx].getName(),
 swaggerArgumentName);
@@ -87,10 +88,10 @@ public class ProducerArgumentsMapperCreator extends 
AbstractArgumentsMapperCreat
   protected ArgumentMapper createSwaggerBodyFieldMapper(int producerParamIdx, 
String parameterName,
       int swaggerBodyIdx) {
     String swaggerArgumentName = 
swaggerParameters.get(swaggerBodyIdx).getName();
-    swaggerParameterTypes
-        .put(swaggerArgumentName, Object.class);
-    Type parameterType = 
ParamUtils.getGenericParameterType(this.providerClass, this.providerMethod,
-        providerMethod.getParameters()[producerParamIdx]);
+    swaggerParameterTypes.put(swaggerArgumentName, Object.class);
+    Type parameterType = TypeToken.of(providerClass)
+        
.resolveType(providerMethod.getGenericParameterTypes()[producerParamIdx])
+        .getType();
     return new 
SwaggerBodyFieldToProducerArgument(providerMethod.getParameters()[producerParamIdx].getName(),
         swaggerArgumentName,
         parameterName, parameterType);

Reply via email to