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/incubator-servicecomb-java-chassis.git

commit 1658ab17d6ae6a2d58d084dd2c64a31783657639
Author: wujimin <wuji...@huawei.com>
AuthorDate: Fri May 4 16:39:03 2018 +0800

    [SCB-538][WIP] swagger generator core switch to use SwaggerToClassGenerator
---
 .../swagger/converter/AbstractConverter.java       |  17 +--
 .../servicecomb/swagger/converter/Converter.java   |   4 +-
 .../swagger/converter/ConverterMgr.java            |  24 +---
 .../converter/model/ArrayModelConverter.java       |  10 +-
 .../converter/model/ModelImplConverter.java        |  63 +++++-----
 .../swagger/converter/model/RefModelConverter.java |   9 +-
 .../AbstractSerializableParameterConverter.java    |  12 +-
 .../parameter/BodyParameterConverter.java          |   7 +-
 .../converter/property/ArrayPropertyConverter.java |  15 +--
 .../converter/property/MapPropertyConverter.java   |  17 ++-
 .../property/ObjectPropertyConverter.java          |   6 +-
 .../converter/property/RefPropertyConverter.java   |   9 +-
 .../property/StringPropertyConverter.java          |  14 +--
 .../core/unittest/UnitTestSwaggerUtils.java        |   5 +
 .../swagger/generator/core/utils/ClassUtils.java   | 131 +++-----------------
 .../parameter/PendingBodyParameterConverter.java   |   8 +-
 .../swagger/converter/TestAbstractConverter.java   |  13 +-
 .../converter/model/TestModelImplConverter.java    |  98 +++++++++++----
 .../swagger/generator/core/ClassUtilsForTest.java  |  73 +++++++++++
 .../generator/core/TestApiImplicitParams.java      |   3 +-
 .../swagger/generator/core/TestApiResponse.java    |  13 +-
 .../swagger/generator/core/TestArrayType.java      |   3 +-
 .../swagger/generator/core/TestClassUtils.java     | 133 +++++++++++----------
 .../swagger/generator/core/TestProperty.java       |   7 +-
 .../swagger/generator/core/TestSwaggerUtils.java   |  42 +------
 25 files changed, 346 insertions(+), 390 deletions(-)

diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/AbstractConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/AbstractConverter.java
index aca0295..f23f8da 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/AbstractConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/AbstractConverter.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.swagger.converter;
 
 import java.util.Map;
 
-import org.apache.servicecomb.swagger.generator.core.SwaggerConst;
 import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,25 +27,21 @@ import org.springframework.util.StringUtils;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
-
 public abstract class AbstractConverter implements Converter {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractConverter.class);
 
   protected abstract Map<String, Object> findVendorExtensions(Object def);
 
-  protected abstract JavaType doConvert(ClassLoader classLoader, String 
packageName, Swagger swagger, Object def);
+  protected abstract JavaType doConvert(SwaggerToClassGenerator 
swaggerToClassGenerator, Object def);
 
   @Override
-  public JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def) {
-    TypeFactory typeFactory = TypeFactory
-        .defaultInstance()
-        .withClassLoader(classLoader);
+  public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object def) {
+    TypeFactory typeFactory = swaggerToClassGenerator.getTypeFactory();
 
     Map<String, Object> vendorExtensions = findVendorExtensions(def);
-    String canonical = ClassUtils.getVendorExtension(vendorExtensions, 
SwaggerConst.EXT_JAVA_CLASS);
+    String canonical = ClassUtils.getClassName(vendorExtensions);
     if (!StringUtils.isEmpty(canonical)) {
-      Class<?> clsResult = ClassUtils.getClassByName(classLoader, canonical);
+      Class<?> clsResult = 
ClassUtils.getClassByName(swaggerToClassGenerator.getClassLoader(), canonical);
       if (clsResult != null) {
         return typeFactory.constructType(clsResult);
       }
@@ -54,7 +49,7 @@ public abstract class AbstractConverter implements Converter {
 
     // ensure all depend model exist
     // maybe create dynamic class by canonical
-    JavaType result = doConvert(classLoader, packageName, swagger, def);
+    JavaType result = doConvert(swaggerToClassGenerator, def);
 
     String rawClassName = ClassUtils.getRawClassName(canonical);
     if (StringUtils.isEmpty(rawClassName)) {
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/Converter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/Converter.java
index d2e5af9..8a07c56 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/Converter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/Converter.java
@@ -19,10 +19,8 @@ package org.apache.servicecomb.swagger.converter;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Swagger;
-
 public interface Converter {
   // def可能是property或model
   // def不可能为null
-  JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def);
+  JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, Object 
def);
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
index 672693a..a70907e 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
@@ -38,17 +38,14 @@ import 
org.apache.servicecomb.swagger.converter.property.RefPropertyConverter;
 import 
org.apache.servicecomb.swagger.converter.property.StringPropertyConverter;
 import org.apache.servicecomb.swagger.extend.property.ByteProperty;
 import org.apache.servicecomb.swagger.extend.property.ShortProperty;
-import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.SimpleType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.ArrayModel;
-import io.swagger.models.Model;
 import io.swagger.models.ModelImpl;
 import io.swagger.models.RefModel;
-import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
 import io.swagger.models.parameters.CookieParameter;
 import io.swagger.models.parameters.FormParameter;
@@ -167,7 +164,7 @@ public final class ConverterMgr {
       throw new Error("not support inner property class: " + 
propertyCls.getName());
     }
 
-    converterMap.put(propertyCls, (classLoader, packageName, swagger, def) -> 
javaType);
+    converterMap.put(propertyCls, (context, def) -> javaType);
   }
 
   public static void addConverter(Class<?> cls, Converter converter) {
@@ -179,16 +176,9 @@ public final class ConverterMgr {
     return TYPE_FORMAT_MAP.get(key);
   }
 
-  public static JavaType findJavaType(SwaggerGenerator generator, Object def) {
-    return findJavaType(generator.getClassLoader(),
-        generator.ensureGetPackageName(),
-        generator.getSwagger(),
-        def);
-  }
-
   // def为null是void的场景
   // def可能是model、property、parameter
-  public static JavaType findJavaType(ClassLoader classLoader, String 
packageName, Swagger swagger, Object def) {
+  public static JavaType findJavaType(SwaggerToClassGenerator 
swaggerToClassGenerator, Object def) {
     if (def == null) {
       return VOID_JAVA_TYPE;
     }
@@ -197,14 +187,6 @@ public final class ConverterMgr {
       throw new Error("not support def type: " + def.getClass());
     }
 
-    return converter.convert(classLoader, packageName, swagger, def);
-  }
-
-  public static JavaType findByRef(ClassLoader classLoader, String 
packageName, Swagger swagger, String refName) {
-    Model ref = swagger.getDefinitions().get(refName);
-    if (ModelImpl.class.isInstance(ref) && ((ModelImpl) ref).getName() == 
null) {
-      ((ModelImpl) ref).setName(refName);
-    }
-    return findJavaType(classLoader, packageName, swagger, ref);
+    return converter.convert(swaggerToClassGenerator, def);
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ArrayModelConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ArrayModelConverter.java
index 38a0321..dca3ca8 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ArrayModelConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ArrayModelConverter.java
@@ -17,24 +17,20 @@
 
 package org.apache.servicecomb.swagger.converter.model;
 
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import 
org.apache.servicecomb.swagger.converter.property.ArrayPropertyConverter;
 
 import com.fasterxml.jackson.databind.JavaType;
 
 import io.swagger.models.ArrayModel;
-import io.swagger.models.Swagger;
 
 public class ArrayModelConverter extends AbstractModelConverter {
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object model) {
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object model) {
     ArrayModel arrayModel = (ArrayModel) model;
 
     if (arrayModel.getItems() != null) {
-      return ArrayPropertyConverter.findJavaType(classLoader,
-          packageName,
-          swagger,
-          arrayModel.getItems(),
-          false);
+      return ArrayPropertyConverter.findJavaType(swaggerToClassGenerator, 
arrayModel.getItems(), false);
     }
 
     // don't know when will this happen.
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ModelImplConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ModelImplConverter.java
index d802005..827c07b 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ModelImplConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/ModelImplConverter.java
@@ -17,22 +17,26 @@
 
 package org.apache.servicecomb.swagger.converter.model;
 
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.servicecomb.common.javassist.ClassConfig;
+import org.apache.servicecomb.common.javassist.JavassistUtils;
 import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import org.apache.servicecomb.swagger.converter.property.MapPropertyConverter;
-import org.apache.servicecomb.swagger.generator.core.SwaggerConst;
 import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
-import org.springframework.util.StringUtils;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.ModelImpl;
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.ObjectProperty;
+import io.swagger.models.properties.Property;
 
 public class ModelImplConverter extends AbstractModelConverter {
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object model) {
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object model) {
     ModelImpl modelImpl = (ModelImpl) model;
 
     JavaType javaType = ConverterMgr.findJavaType(modelImpl.getType(), 
modelImpl.getFormat());
@@ -41,14 +45,11 @@ public class ModelImplConverter extends 
AbstractModelConverter {
     }
 
     if (modelImpl.getReference() != null) {
-      return ConverterMgr.findByRef(classLoader, packageName, swagger, 
modelImpl.getReference());
+      return swaggerToClassGenerator.convertRef(modelImpl.getReference());
     }
 
     if (modelImpl.getAdditionalProperties() != null) {
-      return MapPropertyConverter.findJavaType(classLoader,
-          packageName,
-          swagger,
-          modelImpl.getAdditionalProperties());
+      return MapPropertyConverter.findJavaType(swaggerToClassGenerator, 
modelImpl.getAdditionalProperties());
     }
 
     if (ObjectProperty.TYPE.equals(modelImpl.getType())
@@ -57,30 +58,36 @@ public class ModelImplConverter extends 
AbstractModelConverter {
       return TypeFactory.defaultInstance().constructType(Object.class);
     }
 
-    return getOrCreateType(classLoader, packageName, swagger, modelImpl);
+    return getOrCreateType(swaggerToClassGenerator, modelImpl);
+  }
+
+  protected JavaType getOrCreateType(SwaggerToClassGenerator 
swaggerToClassGenerator, ModelImpl modelImpl) {
+    String clsName = ClassUtils.getClassName(findVendorExtensions(modelImpl));
+    clsName = ClassUtils.correctClassName(clsName);
+
+    Class<?> cls = getOrCreateClass(swaggerToClassGenerator, 
modelImpl.getProperties(), clsName);
+    return TypeFactory.defaultInstance().constructType(cls);
   }
 
-  protected String getOrCreateClassName(String packageName, ModelImpl 
modelImpl) throws Error {
-    // dynamic create class by name and property
-    // try to use x-java-class first
-    // if not defined then use new class name
-    String canonical = 
ClassUtils.getVendorExtension(findVendorExtensions(modelImpl), 
SwaggerConst.EXT_JAVA_CLASS);
-    if (!StringUtils.isEmpty(canonical)) {
-      return canonical;
+  protected Class<?> getOrCreateClass(SwaggerToClassGenerator 
swaggerToClassGenerator,
+      Map<String, Property> properties,
+      String clsName) {
+    Class<?> cls = 
ClassUtils.getClassByName(swaggerToClassGenerator.getClassLoader(), clsName);
+    if (cls != null) {
+      return cls;
     }
 
-    if (packageName == null) {
-      throw new IllegalStateException("packageName should not be null");
+    ClassConfig classConfig = new ClassConfig();
+    classConfig.setClassName(clsName);
+
+    if (null != properties) {
+      for (Entry<String, Property> entry : properties.entrySet()) {
+        JavaType propertyJavaType = 
swaggerToClassGenerator.convert(entry.getValue());
+        classConfig.addField(entry.getKey(), propertyJavaType);
+      }
     }
-    return packageName + "." + modelImpl.getName();
-  }
 
-  protected JavaType getOrCreateType(ClassLoader classLoader, String 
packageName, Swagger swagger, ModelImpl modelImpl)
-      throws Error {
-    String clsName = getOrCreateClassName(packageName, modelImpl);
-    clsName = ClassUtils.correctClassName(clsName);
-    Class<?> cls =
-        ClassUtils.getOrCreateClass(classLoader, packageName, swagger, 
modelImpl.getProperties(), clsName);
-    return TypeFactory.defaultInstance().constructType(cls);
+    cls = JavassistUtils.createClass(swaggerToClassGenerator.getClassLoader(), 
classConfig);
+    return cls;
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/RefModelConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/RefModelConverter.java
index fd38b44..f646cbc 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/RefModelConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/model/RefModelConverter.java
@@ -17,18 +17,15 @@
 
 package org.apache.servicecomb.swagger.converter.model;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 
 import io.swagger.models.RefModel;
-import io.swagger.models.Swagger;
 
 public class RefModelConverter extends AbstractModelConverter {
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object model) {
-    RefModel refModel = (RefModel) model;
-
-    return ConverterMgr.findByRef(classLoader, packageName, swagger, 
refModel.getSimpleRef());
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object refModel) {
+    return swaggerToClassGenerator.convertRef(((RefModel) 
refModel).getSimpleRef());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/AbstractSerializableParameterConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/AbstractSerializableParameterConverter.java
index a9bf303..7573e4a 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/AbstractSerializableParameterConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/AbstractSerializableParameterConverter.java
@@ -19,12 +19,12 @@ package org.apache.servicecomb.swagger.converter.parameter;
 
 import org.apache.servicecomb.swagger.converter.Converter;
 import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import 
org.apache.servicecomb.swagger.converter.property.ArrayPropertyConverter;
 import 
org.apache.servicecomb.swagger.converter.property.StringPropertyConverter;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.parameters.AbstractSerializableParameter;
 import io.swagger.models.properties.ArrayProperty;
 import io.swagger.models.properties.StringProperty;
@@ -32,20 +32,16 @@ import io.swagger.models.properties.StringProperty;
 public class AbstractSerializableParameterConverter implements Converter {
 
   @Override
-  public JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def) {
+  public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object def) {
     AbstractSerializableParameter<?> param = 
(AbstractSerializableParameter<?>) def;
 
     switch (param.getType()) {
       case ArrayProperty.TYPE:
-        return ArrayPropertyConverter.findJavaType(classLoader,
-            packageName,
-            swagger,
+        return ArrayPropertyConverter.findJavaType(swaggerToClassGenerator,
             param.getItems(),
             param.isUniqueItems());
       case StringProperty.TYPE:
-        return StringPropertyConverter.findJavaType(classLoader,
-            packageName,
-            swagger,
+        return StringPropertyConverter.findJavaType(swaggerToClassGenerator,
             param.getType(),
             param.getFormat(),
             param.getEnum());
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/BodyParameterConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/BodyParameterConverter.java
index ba16eeb..909ead8 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/BodyParameterConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/parameter/BodyParameterConverter.java
@@ -18,18 +18,17 @@
 package org.apache.servicecomb.swagger.converter.parameter;
 
 import org.apache.servicecomb.swagger.converter.Converter;
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
 
 public class BodyParameterConverter implements Converter {
 
   @Override
-  public JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def) {
+  public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object def) {
     BodyParameter param = (BodyParameter) def;
-    return ConverterMgr.findJavaType(classLoader, packageName, swagger, 
param.getSchema());
+    return swaggerToClassGenerator.convert(param.getSchema());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ArrayPropertyConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ArrayPropertyConverter.java
index ef29297..fb0631c 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ArrayPropertyConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ArrayPropertyConverter.java
@@ -21,20 +21,19 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.ArrayProperty;
 import io.swagger.models.properties.Property;
 
 public class ArrayPropertyConverter extends AbstractPropertyConverter {
-  public static JavaType findJavaType(ClassLoader classLoader, String 
packageName, Swagger swagger,
+  public static JavaType findJavaType(SwaggerToClassGenerator 
swaggerToClassGenerator,
       Property itemProperty,
       Boolean uniqueItems) {
-    JavaType itemJavaType = ConverterMgr.findJavaType(classLoader, 
packageName, swagger, itemProperty);
+    JavaType itemJavaType = swaggerToClassGenerator.convert(itemProperty);
 
     @SuppressWarnings("rawtypes")
     Class<? extends Collection> collectionClass = List.class;
@@ -45,13 +44,9 @@ public class ArrayPropertyConverter extends 
AbstractPropertyConverter {
   }
 
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object property) {
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object property) {
     ArrayProperty arrayProperty = (ArrayProperty) property;
 
-    return findJavaType(classLoader,
-        packageName,
-        swagger,
-        arrayProperty.getItems(),
-        arrayProperty.getUniqueItems());
+    return findJavaType(swaggerToClassGenerator, arrayProperty.getItems(), 
arrayProperty.getUniqueItems());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/MapPropertyConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/MapPropertyConverter.java
index f48cc0b..490fbb6 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/MapPropertyConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/MapPropertyConverter.java
@@ -19,29 +19,26 @@ package org.apache.servicecomb.swagger.converter.property;
 
 import java.util.Map;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.MapProperty;
 import io.swagger.models.properties.Property;
 
 public class MapPropertyConverter extends AbstractPropertyConverter {
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object property) {
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object property) {
     MapProperty mapProperty = (MapProperty) property;
     Property valueProperty = mapProperty.getAdditionalProperties();
-    return findJavaType(classLoader, packageName, swagger, valueProperty);
+    return findJavaType(swaggerToClassGenerator, valueProperty);
   }
 
-  public static JavaType findJavaType(ClassLoader classLoader, String 
packageName, Swagger swagger,
-      Property valueProperty) {
-    JavaType valueJavaType = ConverterMgr.findJavaType(classLoader, 
packageName, swagger, valueProperty);
+  public static JavaType findJavaType(SwaggerToClassGenerator 
swaggerToClassGenerator, Property valueProperty) {
+    JavaType valueJavaType = swaggerToClassGenerator.convert(valueProperty);
 
-    return TypeFactory.defaultInstance().constructMapType(Map.class,
-        TypeFactory.defaultInstance().constructType(String.class),
+    return swaggerToClassGenerator.getTypeFactory().constructMapType(Map.class,
+        swaggerToClassGenerator.getTypeFactory().constructType(String.class),
         valueJavaType);
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ObjectPropertyConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ObjectPropertyConverter.java
index c35e0f6..5de6695 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ObjectPropertyConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/ObjectPropertyConverter.java
@@ -17,16 +17,14 @@
 package org.apache.servicecomb.swagger.converter.property;
 
 import org.apache.servicecomb.swagger.converter.Converter;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
-
 public class ObjectPropertyConverter implements Converter {
   @Override
-  public JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def) {
+  public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object def) {
     return TypeFactory.defaultInstance().constructType(Object.class);
   }
-
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/RefPropertyConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/RefPropertyConverter.java
index 9fe7b0e..395bc03 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/RefPropertyConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/RefPropertyConverter.java
@@ -17,18 +17,15 @@
 
 package org.apache.servicecomb.swagger.converter.property;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.RefProperty;
 
 public class RefPropertyConverter extends AbstractPropertyConverter {
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object property) {
-    RefProperty refProperty = (RefProperty) property;
-
-    return ConverterMgr.findByRef(classLoader, packageName, swagger, 
refProperty.getSimpleRef());
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object refProperty) {
+    return swaggerToClassGenerator.convertRef(((RefProperty) 
refProperty).getSimpleRef());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/StringPropertyConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/StringPropertyConverter.java
index b34272c..895a28e 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/StringPropertyConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/property/StringPropertyConverter.java
@@ -21,22 +21,24 @@ import java.util.List;
 
 import org.apache.servicecomb.common.javassist.JavassistUtils;
 import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.StringProperty;
 
 public class StringPropertyConverter extends AbstractPropertyConverter {
-  public static JavaType findJavaType(ClassLoader classLoader, String 
packageName, Swagger swagger, String type,
+  public static JavaType findJavaType(SwaggerToClassGenerator 
swaggerToClassGenerator, String type,
       String format, List<String> enums) {
     if (!isEnum(enums)) {
       return ConverterMgr.findJavaType(type, format);
     }
 
     // enum,且需要动态生成class
-    Class<?> enumCls = 
JavassistUtils.getOrCreateEnumWithPackageName(classLoader, packageName, enums);
+    Class<?> enumCls = JavassistUtils
+        
.getOrCreateEnumWithPackageName(swaggerToClassGenerator.getClassLoader(),
+            swaggerToClassGenerator.getPackageName(), enums);
     return TypeFactory.defaultInstance().constructType(enumCls);
   }
 
@@ -49,13 +51,11 @@ public class StringPropertyConverter extends 
AbstractPropertyConverter {
   }
 
   @Override
-  public JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object property) {
+  public JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object property) {
     StringProperty stringProperty = (StringProperty) property;
 
     List<String> enums = stringProperty.getEnum();
-    return findJavaType(classLoader,
-        packageName,
-        swagger,
+    return findJavaType(swaggerToClassGenerator,
         stringProperty.getType(),
         stringProperty.getFormat(),
         enums);
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/unittest/UnitTestSwaggerUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/unittest/UnitTestSwaggerUtils.java
index e0eadfb..2829a64 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/unittest/UnitTestSwaggerUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/unittest/UnitTestSwaggerUtils.java
@@ -41,8 +41,13 @@ public final class UnitTestSwaggerUtils {
   }
 
   public static SwaggerGenerator generateSwagger(Class<?> cls) {
+    return generateSwagger(Thread.currentThread().getContextClassLoader(), 
cls);
+  }
+
+  public static SwaggerGenerator generateSwagger(ClassLoader classLoader, 
Class<?> cls) {
     SwaggerGeneratorContext context = compositeContext.selectContext(cls);
     SwaggerGenerator generator = new SwaggerGenerator(context, cls);
+    generator.setClassLoader(classLoader);
     generator.generate();
 
     return generator;
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 20da1ec..57fa030 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
@@ -21,14 +21,13 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import javax.lang.model.SourceVersion;
 
 import org.apache.servicecomb.common.javassist.ClassConfig;
 import org.apache.servicecomb.common.javassist.JavassistUtils;
-import org.apache.servicecomb.common.javassist.MethodConfig;
 import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
 import org.apache.servicecomb.swagger.generator.core.SwaggerConst;
 import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
@@ -36,13 +35,8 @@ import org.springframework.util.StringUtils;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Operation;
-import io.swagger.models.Path;
-import io.swagger.models.Response;
-import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
 import io.swagger.models.parameters.Parameter;
-import io.swagger.models.properties.Property;
 
 public final class ClassUtils {
   private ClassUtils() {
@@ -59,33 +53,6 @@ public final class ClassUtils {
     }
   }
 
-  // 获取modelImpl对应的class
-  public static Class<?> getOrCreateClass(ClassLoader classLoader, String 
packageName, Swagger swagger,
-      Map<String, Property> properties,
-      String clsName) {
-    Class<?> cls = getClassByName(classLoader, clsName);
-    if (cls != null) {
-      return cls;
-    }
-
-    ClassConfig classConfig = new ClassConfig();
-    classConfig.setClassName(clsName);
-
-    if (null != properties) {
-      for (Entry<String, Property> entry : properties.entrySet()) {
-        JavaType propertyJavaType =
-            ConverterMgr.findJavaType(classLoader,
-                packageName,
-                swagger,
-                entry.getValue());
-        classConfig.addField(entry.getKey(), propertyJavaType);
-      }
-    }
-
-    cls = JavassistUtils.createClass(classLoader, classConfig);
-    return cls;
-  }
-
   // 将一系列body parameter包装成一个class
   public static Class<?> getOrCreateBodyClass(OperationGenerator 
operationGenerator,
       List<BodyParameter> bodyParameters) {
@@ -102,11 +69,10 @@ public final class ClassUtils {
 
     // 1.全是预备body
     // 2.预备body与明确body混合
+    SwaggerToClassGenerator classGenerator = new 
SwaggerToClassGenerator(swaggerGenerator.getClassLoader(),
+        swaggerGenerator.getSwagger(), 
swaggerGenerator.ensureGetPackageName());
     for (BodyParameter bp : bodyParameters) {
-      JavaType javaType = 
ConverterMgr.findJavaType(swaggerGenerator.getClassLoader(),
-          swaggerGenerator.ensureGetPackageName(),
-          swaggerGenerator.getSwagger(),
-          bp);
+      JavaType javaType = ConverterMgr.findJavaType(classGenerator, bp);
       classConfig.addField(bp.getName(), javaType);
     }
 
@@ -135,18 +101,12 @@ public final class ClassUtils {
     return false;
   }
 
-  public static Class<?> getJavaInterface(Swagger swagger) {
-    return getClassByVendorExtensions(null, 
swagger.getInfo().getVendorExtensions(), SwaggerConst.EXT_JAVA_INTF);
+  public static String getClassName(Map<String, Object> vendorExtensions) {
+    return getVendorExtension(vendorExtensions, SwaggerConst.EXT_JAVA_CLASS);
   }
 
-  public static Class<?> getClassByVendorExtensions(ClassLoader classLoader, 
Map<String, Object> vendorExtensions,
-      String clsKey) {
-    String clsName = getVendorExtension(vendorExtensions, clsKey);
-    if (StringUtils.isEmpty(clsName)) {
-      return null;
-    }
-
-    return getClassByName(classLoader, clsName);
+  public static String getInterfaceName(Map<String, Object> vendorExtensions) {
+    return getVendorExtension(vendorExtensions, SwaggerConst.EXT_JAVA_INTF);
   }
 
   public static String getRawClassName(String canonical) {
@@ -175,81 +135,20 @@ public final class ClassUtils {
     return (T) vendorExtensions.get(key);
   }
 
-  public static Class<?> getOrCreateInterface(SwaggerGenerator generator) {
-    return getOrCreateInterface(generator.getSwagger(),
-        generator.getClassLoader(),
-        generator.ensureGetPackageName());
-  }
-
-  public static Class<?> getOrCreateInterface(Swagger swagger, ClassLoader 
classLoader, String packageName) {
-    String intfName =
-        (String) 
swagger.getInfo().getVendorExtensions().get(SwaggerConst.EXT_JAVA_INTF);
-    Class<?> intf = getClassByName(classLoader, intfName);
-    if (intf != null) {
-      return intf;
-    }
-
-    if (packageName == null) {
-      int idx = intfName.lastIndexOf(".");
-      if (idx == -1) {
-        packageName = "";
-      } else {
-        packageName = intfName.substring(0, idx);
-      }
-    }
-    return createInterface(swagger, classLoader, packageName, intfName);
-  }
-
-  private static Class<?> createInterface(Swagger swagger, ClassLoader 
classLoader, String packageName,
-      String intfName) {
-    ClassConfig classConfig = new ClassConfig();
-    classConfig.setClassName(intfName);
-    classConfig.setIntf(true);
-
-    for (Path path : swagger.getPaths().values()) {
-      for (Operation operation : path.getOperations()) {
-        // 参数可能重名,所以packageName必须跟operation相关才能隔离
-        String opPackageName = packageName + "." + operation.getOperationId();
-
-        Response result = 
operation.getResponses().get(SwaggerConst.SUCCESS_KEY);
-        JavaType resultJavaType = ConverterMgr.findJavaType(classLoader,
-            opPackageName,
-            swagger,
-            result.getSchema());
-
-        MethodConfig methodConfig = new MethodConfig();
-        methodConfig.setName(operation.getOperationId());
-        methodConfig.setResult(resultJavaType);
-
-        for (Parameter parameter : operation.getParameters()) {
-          String paramName = parameter.getName();
-          paramName = correctMethodParameterName(paramName);
-
-          JavaType paramJavaType = ConverterMgr.findJavaType(classLoader,
-              opPackageName,
-              swagger,
-              parameter);
-          methodConfig.addParameter(paramName, paramJavaType);
-        }
-
-        classConfig.addMethod(methodConfig);
-      }
-    }
-
-    return JavassistUtils.createClass(classLoader, classConfig);
-  }
-
   public static String correctMethodParameterName(String paramName) {
     if (SourceVersion.isName(paramName)) {
       return paramName;
     }
-    StringBuffer newParam = new StringBuffer();
-    char tempChar;
+
+    StringBuilder newParam = new StringBuilder();
     for (int index = 0; index < paramName.length(); index++) {
-      tempChar = paramName.charAt(index);
+      char tempChar = paramName.charAt(index);
       if (Character.isJavaIdentifierPart(tempChar)) {
         newParam.append(paramName.charAt(index));
-      } else if (tempChar == '.' || tempChar == '-') {
+        continue;
+      }
+
+      if (tempChar == '.' || tempChar == '-') {
         newParam.append('_');
       }
     }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/converter/parameter/PendingBodyParameterConverter.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/converter/parameter/PendingBodyParameterConverter.java
index 0319736..6a594f8 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/converter/parameter/PendingBodyParameterConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/converter/parameter/PendingBodyParameterConverter.java
@@ -18,18 +18,16 @@
 package org.apache.servicecomb.swagger.generator.pojo.converter.parameter;
 
 import org.apache.servicecomb.swagger.converter.Converter;
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import 
org.apache.servicecomb.swagger.generator.pojo.extend.parameter.PendingBodyParameter;
 
 import com.fasterxml.jackson.databind.JavaType;
 
-import io.swagger.models.Swagger;
-
 public class PendingBodyParameterConverter implements Converter {
 
   @Override
-  public JavaType convert(ClassLoader classLoader, String packageName, Swagger 
swagger, Object def) {
+  public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, 
Object def) {
     PendingBodyParameter param = (PendingBodyParameter) def;
-    return ConverterMgr.findJavaType(classLoader, packageName, swagger, 
param.getProperty());
+    return swaggerToClassGenerator.convert(param.getProperty());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/TestAbstractConverter.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/TestAbstractConverter.java
index 98ac8eb..bd36393 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/TestAbstractConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/TestAbstractConverter.java
@@ -27,7 +27,6 @@ import org.junit.Test;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import io.swagger.models.Swagger;
 import mockit.Mocked;
 
 public class TestAbstractConverter {
@@ -38,6 +37,8 @@ public class TestAbstractConverter {
   ClassLoader classLoader = new ClassLoader() {
   };
 
+  SwaggerToClassGenerator swaggerToClassGenerator = new 
SwaggerToClassGenerator(classLoader, null, null);
+
   AbstractConverter converter = new AbstractConverter() {
     @Override
     protected Map<String, Object> findVendorExtensions(Object def) {
@@ -45,7 +46,7 @@ public class TestAbstractConverter {
     }
 
     @Override
-    protected JavaType doConvert(ClassLoader classLoader, String packageName, 
Swagger swagger, Object def) {
+    protected JavaType doConvert(SwaggerToClassGenerator 
swaggerToClassGenerator, Object def) {
       return doConvertResult;
     }
   };
@@ -55,14 +56,14 @@ public class TestAbstractConverter {
     doConvertResult = 
TypeFactory.defaultInstance().constructType(String.class);
     vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, "java.lang.String");
 
-    Assert.assertSame(doConvertResult, converter.convert(classLoader, null, 
null, null));
+    Assert.assertSame(doConvertResult, 
converter.convert(swaggerToClassGenerator, null));
   }
 
   @Test
   public void convert_noCanonical(@Mocked JavaType type) {
     doConvertResult = type;
 
-    Assert.assertSame(type, converter.convert(classLoader, null, null, null));
+    Assert.assertSame(type, converter.convert(swaggerToClassGenerator, null));
   }
 
   @Test
@@ -70,7 +71,7 @@ public class TestAbstractConverter {
     doConvertResult = 
TypeFactory.defaultInstance().constructParametricType(Optional.class, 
String.class);
     vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, 
"java.util.Optional<java.lang.String>");
 
-    Assert.assertSame(doConvertResult, converter.convert(classLoader, null, 
null, null));
+    Assert.assertSame(doConvertResult, 
converter.convert(swaggerToClassGenerator, null));
   }
 
   @Test
@@ -78,6 +79,6 @@ public class TestAbstractConverter {
     doConvertResult = 
TypeFactory.defaultInstance().constructType(String.class);
     vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, "xxx<java.lang.String>");
 
-    Assert.assertSame(doConvertResult, converter.convert(classLoader, null, 
null, null));
+    Assert.assertSame(doConvertResult, 
converter.convert(swaggerToClassGenerator, null));
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/model/TestModelImplConverter.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/model/TestModelImplConverter.java
index 115f83b..c0ced84 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/model/TestModelImplConverter.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/converter/model/TestModelImplConverter.java
@@ -16,8 +16,11 @@
  */
 package org.apache.servicecomb.swagger.converter.model;
 
+import java.util.Map;
+
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import org.apache.servicecomb.swagger.generator.core.SwaggerConst;
-import org.hamcrest.Matchers;
+import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -25,47 +28,100 @@ import org.junit.rules.ExpectedException;
 
 import com.fasterxml.jackson.databind.JavaType;
 
+import io.swagger.models.Model;
 import io.swagger.models.ModelImpl;
 import io.swagger.models.Swagger;
-import mockit.Mocked;
+import io.swagger.models.parameters.BodyParameter;
+import io.swagger.models.properties.IntegerProperty;
+import io.swagger.models.properties.StringProperty;
 
 public class TestModelImplConverter {
-  ModelImplConverter converter = new ModelImplConverter();
-
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
+  Swagger swagger = new Swagger();
+
+  ClassLoader classLoader = new ClassLoader() {
+  };
+
+  SwaggerToClassGenerator swaggerToClassGenerator = new 
SwaggerToClassGenerator(classLoader, swagger, "pkg");
+
   @Test
-  public void getOrCreateClassName_get() {
-    String canonical = "name";
+  public void convert_simple() {
     ModelImpl model = new ModelImpl();
-    model.getVendorExtensions().put(SwaggerConst.EXT_JAVA_CLASS, canonical);
-    Assert.assertEquals(canonical,
-        converter.getOrCreateClassName(null, model));
+    model.setType(StringProperty.TYPE);
+    swagger.addDefinition("string", model);
+
+    swaggerToClassGenerator.convert();
+
+    Assert.assertSame(String.class, 
swaggerToClassGenerator.convert(model).getRawClass());
   }
 
   @Test
-  public void getOrCreateClassName_create_packageNull() {
-    expectedException.expect(IllegalStateException.class);
-    expectedException.expectMessage(Matchers.is("packageName should not be 
null"));
+  public void convert_ref() {
+    ModelImpl model = new ModelImpl();
+    model.setType(StringProperty.TYPE);
+    swagger.addDefinition("string", model);
+
+    ModelImpl refModel = new ModelImpl();
+    refModel.setReference("string");
+    swagger.addDefinition("ref", refModel);
+
+    swaggerToClassGenerator.convert();
 
-    converter.getOrCreateClassName(null, new ModelImpl());
+    Assert.assertSame(String.class, 
swaggerToClassGenerator.convert(refModel).getRawClass());
   }
 
   @Test
-  public void getOrCreateClassName_create() {
-    Assert.assertEquals("pkg.name", converter.getOrCreateClassName("pkg", new 
ModelImpl().name("name")));
+  public void convert_map() {
+    ModelImpl mapModel = new ModelImpl();
+    mapModel.setAdditionalProperties(new IntegerProperty());
+    swagger.addDefinition("map", mapModel);
+
+    swaggerToClassGenerator.convert();
+
+    JavaType javaType = swaggerToClassGenerator.convert(mapModel);
+    Assert.assertSame(Map.class, javaType.getRawClass());
+    Assert.assertSame(String.class, javaType.getKeyType().getRawClass());
+    Assert.assertSame(Integer.class, javaType.getContentType().getRawClass());
+  }
+
+  static class Empty {
+  }
+
+  @Test
+  public void convert_empty() {
+    ParamUtils.createBodyParameter(swagger, "body", Empty.class);
+    Model model = swagger.getDefinitions().get(Empty.class.getSimpleName());
+    model.getVendorExtensions().put(SwaggerConst.EXT_JAVA_CLASS, "pkg.Empty");
+
+    JavaType javaType = swaggerToClassGenerator.convert(model);
+
+    Assert.assertEquals("pkg.Empty", javaType.getRawClass().getName());
   }
 
   @Test
-  public void getOrCreateType(@Mocked Swagger swagger) {
-    String canonical = "name-";
+  public void convert_object() {
+    BodyParameter bodyParameter = ParamUtils.createBodyParameter(swagger, 
"body", Object.class);
+    Model model = bodyParameter.getSchema();
+
+    JavaType javaType = swaggerToClassGenerator.convert(model);
+
+    Assert.assertSame(Object.class, javaType.getRawClass());
+  }
+
+  @Test
+  public void convert_createClass() throws NoSuchFieldException {
     ModelImpl model = new ModelImpl();
-    model.getVendorExtensions().put(SwaggerConst.EXT_JAVA_CLASS, canonical);
+    model.addProperty("f1", new StringProperty());
+    model.setVendorExtension(SwaggerConst.EXT_JAVA_CLASS, "pkg.Model");
+
+    swagger.addDefinition("cls", model);
 
-    JavaType type = converter.getOrCreateType(new ClassLoader() {
-    }, null, swagger, model);
+    JavaType javaType = swaggerToClassGenerator.convert(model);
 
-    Assert.assertEquals("name_", type.getRawClass().getName());
+    Class<?> cls = javaType.getRawClass();
+    Assert.assertEquals("pkg.Model", cls.getName());
+    Assert.assertSame(String.class, cls.getField("f1").getType());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/ClassUtilsForTest.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/ClassUtilsForTest.java
new file mode 100644
index 0000000..f2330a9
--- /dev/null
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/ClassUtilsForTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+import java.util.Map;
+
+import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
+import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
+import org.springframework.util.StringUtils;
+
+import com.fasterxml.jackson.databind.JavaType;
+
+import io.swagger.models.Swagger;
+
+public class ClassUtilsForTest {
+  public static Class<?> getOrCreateInterface(SwaggerGenerator generator) {
+    return getOrCreateInterface(generator.getSwagger(),
+        generator.getClassLoader(),
+        generator.ensureGetPackageName());
+  }
+
+  public static Class<?> getOrCreateInterface(Swagger swagger, ClassLoader 
classLoader,
+      String packageName) {
+    String intfName = 
ClassUtils.getInterfaceName(swagger.getInfo().getVendorExtensions());
+    Class<?> intf = ClassUtils.getClassByName(classLoader, intfName);
+    if (intf != null) {
+      return intf;
+    }
+
+    if (packageName == null) {
+      int idx = intfName.lastIndexOf(".");
+      if (idx == -1) {
+        packageName = "";
+      } else {
+        packageName = intfName.substring(0, idx);
+      }
+    }
+
+    SwaggerToClassGenerator swaggerToClassGenerator = new 
SwaggerToClassGenerator(classLoader, swagger, packageName);
+    swaggerToClassGenerator.setInterfaceName(intfName);
+    return swaggerToClassGenerator.convert();
+  }
+
+  public static Class<?> getClassByVendorExtensions(ClassLoader classLoader, 
Map<String, Object> vendorExtensions,
+      String clsKey) {
+    String clsName = ClassUtils.getVendorExtension(vendorExtensions, clsKey);
+    if (StringUtils.isEmpty(clsName)) {
+      return null;
+    }
+
+    return ClassUtils.getClassByName(classLoader, clsName);
+  }
+
+  public static JavaType findJavaType(SwaggerGenerator generator, Object def) {
+    return ConverterMgr.findJavaType(new 
SwaggerToClassGenerator(generator.getClassLoader(), generator.getSwagger(),
+        generator.ensureGetPackageName()), def);
+  }
+}
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiImplicitParams.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiImplicitParams.java
index f8dddd5..e6125a3 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiImplicitParams.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiImplicitParams.java
@@ -17,7 +17,6 @@
 
 package org.apache.servicecomb.swagger.generator.core;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
 import org.apache.servicecomb.swagger.generator.core.schema.User;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest;
 import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
@@ -56,7 +55,7 @@ public class TestApiImplicitParams {
     Operation operation = path.getOperations().get(0);
     Parameter parameter = operation.getParameters().get(0);
 
-    JavaType javaType = ConverterMgr.findJavaType(swaggerGenerator, parameter);
+    JavaType javaType = ClassUtilsForTest.findJavaType(swaggerGenerator, 
parameter);
     Assert.assertEquals(User.class, javaType.getRawClass());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiResponse.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiResponse.java
index eaf0dd4..8f60345 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiResponse.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestApiResponse.java
@@ -17,7 +17,6 @@
 
 package org.apache.servicecomb.swagger.generator.core;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest;
 import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
 import org.junit.Assert;
@@ -79,7 +78,7 @@ public class TestApiResponse {
 
     Response response = operation.getResponses().get("200");
     Property property = response.getHeaders().get("k1");
-    Assert.assertEquals(Integer.class, ConverterMgr.findJavaType(generator, 
property).getRawClass());
+    Assert.assertEquals(Integer.class, 
ClassUtilsForTest.findJavaType(generator, property).getRawClass());
   }
 
   private void checkResponseDesc(SwaggerGenerator generator) {
@@ -103,10 +102,10 @@ public class TestApiResponse {
 
     Response response = operation.getResponses().get("200");
     Property property = response.getHeaders().get("k1");
-    Assert.assertEquals(Integer.class, ConverterMgr.findJavaType(generator, 
property).getRawClass());
+    Assert.assertEquals(Integer.class, 
ClassUtilsForTest.findJavaType(generator, property).getRawClass());
 
     property = response.getHeaders().get("k2");
-    Assert.assertEquals(String.class, ConverterMgr.findJavaType(generator, 
property).getRawClass());
+    Assert.assertEquals(String.class, 
ClassUtilsForTest.findJavaType(generator, property).getRawClass());
   }
 
   public void checkSingle(SwaggerGenerator generator) {
@@ -117,7 +116,7 @@ public class TestApiResponse {
     Assert.assertEquals("testSingle", operation.getOperationId());
 
     Response response = operation.getResponses().get("200");
-    Assert.assertEquals(Integer.class, ConverterMgr.findJavaType(generator, 
response.getSchema()).getRawClass());
+    Assert.assertEquals(Integer.class, 
ClassUtilsForTest.findJavaType(generator, response.getSchema()).getRawClass());
   }
 
   public void checkMulti(SwaggerGenerator generator) {
@@ -129,9 +128,9 @@ public class TestApiResponse {
     Assert.assertEquals("testMulti", operation.getOperationId());
 
     Response response = operation.getResponses().get("200");
-    Assert.assertEquals(Integer.class, ConverterMgr.findJavaType(generator, 
response.getSchema()).getRawClass());
+    Assert.assertEquals(Integer.class, 
ClassUtilsForTest.findJavaType(generator, response.getSchema()).getRawClass());
 
     response = operation.getResponses().get("301");
-    Assert.assertEquals(String.class, ConverterMgr.findJavaType(generator, 
response.getSchema()).getRawClass());
+    Assert.assertEquals(String.class, 
ClassUtilsForTest.findJavaType(generator, response.getSchema()).getRawClass());
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestArrayType.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestArrayType.java
index 2e7bf8f..da8a1aa 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestArrayType.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestArrayType.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Method;
 import org.apache.servicecomb.foundation.common.utils.ReflectUtils;
 import org.apache.servicecomb.swagger.generator.core.schema.ArrayType;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -32,7 +31,7 @@ public class TestArrayType {
   @Test
   public void test() throws Exception {
     SwaggerGenerator generator = 
UnitTestSwaggerUtils.generateSwagger(ArrayType.class);
-    Class<?> cls = ClassUtils.getOrCreateInterface(generator);
+    Class<?> cls = ClassUtilsForTest.getOrCreateInterface(generator);
     Method method = ReflectUtils.findMethod(cls, "testBytes");
 
     Class<?> param = (Class<?>) 
method.getParameters()[0].getParameterizedType();
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestClassUtils.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestClassUtils.java
index e49aea2..369d33d 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestClassUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestClassUtils.java
@@ -17,20 +17,17 @@
 
 package org.apache.servicecomb.swagger.generator.core;
 
-import static junit.framework.TestCase.fail;
 import static org.hamcrest.core.Is.is;
 
-import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.lang.model.SourceVersion;
 import javax.ws.rs.Path;
 
-import org.apache.servicecomb.common.javassist.JavassistUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.servicecomb.swagger.generator.core.schema.User;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
 import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
@@ -39,14 +36,9 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
 
 import io.swagger.annotations.SwaggerDefinition;
-import io.swagger.models.Swagger;
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import mockit.Deencapsulation;
+import io.swagger.models.parameters.PathParameter;
 
 @SwaggerDefinition
 public class TestClassUtils {
@@ -57,33 +49,70 @@ public class TestClassUtils {
   public ExpectedException expectedException = ExpectedException.none();
 
   @Test
-  public void testHasAnnotation() {
-    Assert.assertEquals(true, ClassUtils.hasAnnotation(TestClassUtils.class, 
SwaggerDefinition.class));
-    Assert.assertEquals(true, ClassUtils.hasAnnotation(TestClassUtils.class, 
Test.class));
+  public void getClassByName_exist() {
+    String clsName = String.class.getName();
 
-    Assert.assertEquals(false, ClassUtils.hasAnnotation(TestClassUtils.class, 
Path.class));
+    Assert.assertSame(String.class, ClassUtils.getClassByName(null, clsName));
+    Assert.assertSame(String.class, ClassUtils.getClassByName(classLoader, 
clsName));
+  }
+
+  @Test
+  public void getClassByName_notExist() {
+    String clsName = "notExist";
+
+    Assert.assertNull(ClassUtils.getClassByName(null, clsName));
+    Assert.assertNull(ClassUtils.getClassByName(classLoader, clsName));
   }
 
   public static class Impl {
-    public List<User> getUser(List<String> names) {
+    public List<User> getUser(List<String> p1, List<User> p2) {
       return null;
     }
   }
 
   @Test
-  public void testCreateInterface() {
+  public void getOrCreateBodyClass() throws NoSuchFieldException {
     SwaggerGenerator generator = 
UnitTestSwaggerUtils.generateSwagger(Impl.class);
-    Class<?> intf = ClassUtils.getOrCreateInterface(generator);
+    OperationGenerator operationGenerator = 
generator.getOperationGeneratorMap().get("getUser");
 
-    Assert.assertEquals("gen.swagger.ImplIntf", intf.getName());
-    Assert.assertEquals(1, intf.getMethods().length);
+    Class<?> cls = ClassUtils.getOrCreateBodyClass(operationGenerator, null);
+    Assert.assertEquals("gen.swagger.getUserBody", cls.getName());
+    Assert.assertEquals("java.util.List<java.lang.String>", 
cls.getField("p1").getGenericType().getTypeName());
+    
Assert.assertEquals("java.util.List<org.apache.servicecomb.swagger.generator.core.schema.User>",
+        cls.getField("p2").getGenericType().getTypeName());
+  }
 
-    Method method = intf.getMethods()[0];
-    Assert.assertEquals("getUser", method.getName());
+  @Test
+  public void testHasAnnotation() {
+    Assert.assertEquals(true, ClassUtils.hasAnnotation(TestClassUtils.class, 
SwaggerDefinition.class));
+    Assert.assertEquals(true, ClassUtils.hasAnnotation(TestClassUtils.class, 
Test.class));
 
-    Assert.assertEquals("gen.swagger.getUser.names", 
method.getGenericParameterTypes()[0].getTypeName());
-    
Assert.assertEquals("java.util.List<org.apache.servicecomb.swagger.generator.core.schema.User>",
-        method.getGenericReturnType().getTypeName());
+    Assert.assertEquals(false, ClassUtils.hasAnnotation(TestClassUtils.class, 
Path.class));
+  }
+
+  @Test
+  public void isRawJsonType() {
+    PathParameter param = new PathParameter();
+
+    Assert.assertFalse(ClassUtils.isRawJsonType(param));
+
+    param.setVendorExtension(SwaggerConst.EXT_RAW_JSON_TYPE, Boolean.FALSE);
+    Assert.assertFalse(ClassUtils.isRawJsonType(param));
+
+    param.setVendorExtension(SwaggerConst.EXT_RAW_JSON_TYPE, Boolean.TRUE);
+    Assert.assertTrue(ClassUtils.isRawJsonType(param));
+  }
+
+  @Test
+  public void correctMethodParameterName_normal() {
+    String name = "name";
+    Assert.assertSame(name, ClassUtils.correctMethodParameterName(name));
+  }
+
+  @Test
+  public void correctMethodParameterName_update() {
+    String name = "name.-";
+    Assert.assertEquals("name__", ClassUtils.correctMethodParameterName(name));
   }
 
   @Test
@@ -128,64 +157,40 @@ public class TestClassUtils {
   }
 
   @Test
-  public void testGetOrCreateClass() {
-    String className = this.getClass().getCanonicalName();
-
-    Class<?> result = ClassUtils.getOrCreateClass(null, "", new Swagger(), 
null, className);
-
-    Assert.assertEquals(this.getClass(), result);
+  public void testCorrectClassNameNormal() {
+    String result = ClassUtils.correctClassName("String");
+    Assert.assertThat(result, is("String"));
   }
 
   @Test
-  public void testGetOrCreateClassOnPropertyIsNull() {
-    ClassLoader classLoader = Mockito.mock(ClassLoader.class);
-    String className = this.getClass().getCanonicalName();
-    ClassPool classPool = Mockito.mock(ClassPool.class);
-    CtClass ctClass = Mockito.mock(CtClass.class);
-
-    Map<ClassLoader, ClassPool> classPoolMap = 
Deencapsulation.getField(JavassistUtils.class, "CLASSPOOLS");
-    classPoolMap.put(classLoader, classPool);
+  public void getClassName_noName() {
+    Assert.assertNull(ClassUtils.getClassName(null));
 
-    try {
-      Mockito.when(classLoader.loadClass(className)).thenReturn(null);
-    } catch (ClassNotFoundException e) {
-      fail("unexpected exception: " + e);
-    }
-    Mockito.when(classPool.getOrNull(className)).thenReturn(ctClass);
-    try {
-      Mockito.when(ctClass.toClass(classLoader, 
null)).thenReturn(this.getClass());
-    } catch (CannotCompileException e) {
-      fail("unexpected exception: " + e);
-    }
-
-    Class<?> result = ClassUtils.getOrCreateClass(classLoader, "", new 
Swagger(), null, className);
-    Assert.assertEquals(this.getClass(), result);
+    Map<String, Object> vendorExtensions = new HashMap<>();
+    Assert.assertNull(ClassUtils.getClassName(vendorExtensions));
   }
 
   @Test
-  public void getClassByVendorExtensions_noName() {
+  public void getClassName_normal() {
     Map<String, Object> vendorExtensions = new HashMap<>();
+    vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, String.class.getName());
 
-    Assert
-        .assertNull(ClassUtils.getClassByVendorExtensions(classLoader, 
vendorExtensions, SwaggerConst.EXT_JAVA_CLASS));
+    Assert.assertSame(String.class.getName(), 
ClassUtils.getClassName(vendorExtensions));
   }
 
   @Test
-  public void getClassByVendorExtensions_notExist() {
+  public void getInterfaceName_noName() {
     Map<String, Object> vendorExtensions = new HashMap<>();
-    vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, "-" + 
String.class.getName());
 
-    Assert
-        .assertNull(ClassUtils.getClassByVendorExtensions(classLoader, 
vendorExtensions, SwaggerConst.EXT_JAVA_CLASS));
+    Assert.assertNull(ClassUtils.getInterfaceName(vendorExtensions));
   }
 
   @Test
-  public void getClassByVendorExtensions_normal() {
+  public void getInterfaceName_normal() {
     Map<String, Object> vendorExtensions = new HashMap<>();
-    vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, String.class.getName());
+    vendorExtensions.put(SwaggerConst.EXT_JAVA_INTF, String.class.getName());
 
-    Assert.assertSame(String.class,
-        ClassUtils.getClassByVendorExtensions(classLoader, vendorExtensions, 
SwaggerConst.EXT_JAVA_CLASS));
+    Assert.assertSame(String.class.getName(), 
ClassUtils.getInterfaceName(vendorExtensions));
   }
 
   @Test
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestProperty.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestProperty.java
index 93483a5..4921676 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestProperty.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestProperty.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.swagger.generator.core;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import 
org.apache.servicecomb.swagger.converter.property.StringPropertyConverter;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest;
 import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
@@ -44,8 +45,10 @@ public class TestProperty {
     sp._enum(enums);
 
     StringPropertyConverter spc = new StringPropertyConverter();
-    JavaType jt =
-        spc.convert(generator.getClassLoader(), 
generator.ensureGetPackageName(), generator.getSwagger(), sp);
+    JavaType jt = spc.convert(
+        new SwaggerToClassGenerator(generator.getClassLoader(), 
generator.getSwagger(),
+            generator.ensureGetPackageName()),
+        sp);
 
     StringProperty spNew = (StringProperty) 
ModelConverters.getInstance().readAsProperty(jt);
     Assert.assertEquals(enums, spNew.getEnum());
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
index 3ac30f0..b2f76a7 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestSwaggerUtils.java
@@ -23,56 +23,18 @@ import java.util.Date;
 
 import org.apache.servicecomb.common.javassist.JavassistUtils;
 import org.apache.servicecomb.foundation.common.utils.ReflectUtils;
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
 import org.apache.servicecomb.swagger.generator.core.schema.Color;
 import 
org.apache.servicecomb.swagger.generator.core.schema.InvalidResponseHeader;
 import org.apache.servicecomb.swagger.generator.core.schema.RepeatOperation;
 import org.apache.servicecomb.swagger.generator.core.schema.Schema;
-import org.apache.servicecomb.swagger.generator.core.schema.User;
-import 
org.apache.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.models.Model;
-import io.swagger.models.RefModel;
-import io.swagger.models.Swagger;
-
 public class TestSwaggerUtils {
   SwaggerGeneratorContext context = new PojoSwaggerGeneratorContext();
 
-  @Test
-  public void testConverter() {
-    SwaggerGenerator generator = new SwaggerGeneratorForTest(context, null);
-    Swagger swagger = generator.getSwagger();
-    ParamUtils.addDefinitions(swagger, User.class);
-    Model model = swagger.getDefinitions().get("User");
-    model.getVendorExtensions().clear();
-
-    JavaType javaType = ConverterMgr.findJavaType(generator, model);
-    checkJavaType(swagger, javaType);
-
-    RefModel refModel = new RefModel();
-    refModel.setReference("User");
-    javaType = ConverterMgr.findJavaType(generator, refModel);
-    checkJavaType(swagger, javaType);
-  }
-
-  protected void checkJavaType(Swagger swagger, JavaType javaType) {
-    Class<?> cls = javaType.getRawClass();
-    Field[] fields = cls.getFields();
-    Assert.assertEquals("gen.cse.ms.ut.User", cls.getName());
-    Assert.assertEquals("name", fields[0].getName());
-    Assert.assertEquals(String.class, fields[0].getType());
-    Assert.assertEquals("age", fields[1].getName());
-    Assert.assertEquals(Integer.class, fields[1].getType());
-  }
-
   private SwaggerGenerator testSchemaMethod(String resultName, String... 
methodNames) {
     return UnitTestSwaggerUtils.testSwagger("schemas/" + resultName + ".yaml",
         context,
@@ -126,7 +88,7 @@ public class TestSwaggerUtils {
   public void testEnum() {
     SwaggerGenerator generator = testSchemaMethod("enum", "testEnum");
     JavassistUtils.detach("gen.cse.ms.ut.SchemaIntf");
-    Class<?> intf = ClassUtils.getOrCreateInterface(generator);
+    Class<?> intf = ClassUtilsForTest.getOrCreateInterface(generator);
 
     Method method = ReflectUtils.findMethod(intf, "testEnum");
     Class<?> bodyCls = method.getParameterTypes()[0];
@@ -221,7 +183,7 @@ public class TestSwaggerUtils {
   public void testDate() {
     SwaggerGenerator generator = testSchemaMethod("date", "testDate");
     JavassistUtils.detach("gen.cse.ms.ut.SchemaIntf");
-    Class<?> intf = ClassUtils.getOrCreateInterface(generator);
+    Class<?> intf = ClassUtilsForTest.getOrCreateInterface(generator);
 
     Method method = ReflectUtils.findMethod(intf, "testDate");
     Assert.assertEquals(Date.class, method.getReturnType());

-- 
To stop receiving notification emails like this one, please contact
wuji...@apache.org.

Reply via email to