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 31256d5066b332d41fb7444545ebf98e6fbd9235
Author: wujimin <wuji...@huawei.com>
AuthorDate: Fri May 4 16:45:04 2018 +0800

    [SCB-538][WIP] swagger invocation core switch to use SwaggerToClassGenerator
---
 .../swagger/engine/SwaggerEnvironment.java         | 15 +------
 .../swagger/invocation/response/ResponseMeta.java  | 10 ++---
 .../swagger/invocation/response/ResponsesMeta.java |  9 ++--
 .../engine/SwaggerEnvironmentForTest.java          | 52 ++++++++++++++++++++++
 .../servicecomb/engine/TestSwaggerEnvironment.java |  5 +--
 .../arguments/TestPojoConsumerEqualProducer.java   |  8 ++--
 .../arguments/TestPojoConsumerEqualSwagger.java    |  8 ++--
 .../invocation/response/TestResponsesMeta.java     |  5 ++-
 8 files changed, 72 insertions(+), 40 deletions(-)

diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
index 6065a9b..5631b2d 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
@@ -25,9 +25,6 @@ import javax.inject.Inject;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.foundation.common.utils.ReflectUtils;
-import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
-import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
 import 
org.apache.servicecomb.swagger.invocation.arguments.consumer.ConsumerArgumentsMapper;
 import 
org.apache.servicecomb.swagger.invocation.arguments.consumer.ConsumerArgumentsMapperFactory;
 import 
org.apache.servicecomb.swagger.invocation.arguments.producer.ProducerArgumentsMapper;
@@ -41,7 +38,6 @@ import 
org.apache.servicecomb.swagger.invocation.response.producer.ProducerRespo
 import org.springframework.stereotype.Component;
 
 import io.swagger.annotations.ApiOperation;
-import io.swagger.models.Swagger;
 
 @Component
 public class SwaggerEnvironment {
@@ -128,10 +124,9 @@ public class SwaggerEnvironment {
     return apiOperationAnnotation.nickname();
   }
 
-  public SwaggerProducer createProducer(Object producerInstance, Swagger 
swagger) {
+  public SwaggerProducer createProducer(Object producerInstance, Class<?> 
swaggerIntf) {
     Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
     Map<String, Method> visibleProducerMethods = 
retrieveVisibleMethods(producerCls);
-    Class<?> swaggerIntf = ClassUtils.getOrCreateInterface(swagger, null, 
null);
 
     SwaggerProducer producer = new SwaggerProducer();
     producer.setProducerCls(producerCls);
@@ -169,14 +164,6 @@ public class SwaggerEnvironment {
     return producer;
   }
 
-  public SwaggerProducer createProducer(Object producerInstance) {
-    Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
-    SwaggerGenerator producerGenerator = 
UnitTestSwaggerUtils.generateSwagger(producerCls);
-    Swagger swagger = producerGenerator.getSwagger();
-
-    return createProducer(producerInstance, swagger);
-  }
-
   private Map<String, Method> retrieveVisibleMethods(Class<?> clazz) {
     Map<String, Method> visibleMethods = new HashMap<>();
     for (Method method : clazz.getMethods()) {
diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponseMeta.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponseMeta.java
index be1be20..4a35879 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponseMeta.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponseMeta.java
@@ -20,12 +20,11 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.servicecomb.swagger.converter.ConverterMgr;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 
 import com.fasterxml.jackson.databind.JavaType;
 
 import io.swagger.models.Response;
-import io.swagger.models.Swagger;
 import io.swagger.models.properties.Property;
 
 public class ResponseMeta {
@@ -36,17 +35,16 @@ public class ResponseMeta {
 
   private Map<String, JavaType> headers = new HashMap<>();
 
-  public void init(ClassLoader classLoader, String packageName, Swagger 
swagger, Response response) {
+  public void init(SwaggerToClassGenerator swaggerToClassGenerator, Response 
response) {
     if (javaType == null) {
-      Property property = response.getSchema();
-      javaType = ConverterMgr.findJavaType(classLoader, packageName, swagger, 
property);
+      javaType = swaggerToClassGenerator.convert(response.getSchema());
     }
 
     if (response.getHeaders() == null) {
       return;
     }
     for (Entry<String, Property> entry : response.getHeaders().entrySet()) {
-      JavaType headerJavaType = ConverterMgr.findJavaType(classLoader, 
packageName, swagger, entry.getValue());
+      JavaType headerJavaType = 
swaggerToClassGenerator.convert(entry.getValue());
       headers.put(entry.getKey(), headerJavaType);
     }
   }
diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
index e451e10..09b96da 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
@@ -23,6 +23,7 @@ import java.util.Map.Entry;
 
 import javax.ws.rs.core.Response.Status;
 
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import org.apache.servicecomb.swagger.invocation.context.HttpStatus;
 import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
 
@@ -32,7 +33,6 @@ import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.Operation;
 import io.swagger.models.Response;
-import io.swagger.models.Swagger;
 
 public class ResponsesMeta {
   private static final JavaType COMMON_EXCEPTION_JAVATYPE = 
SimpleType.constructUnsafe(CommonExceptionData.class);
@@ -44,20 +44,19 @@ public class ResponsesMeta {
   // 最后一个参数returnType用于兼容场景
   // 历史版本中swagger中定义的return可能没定义class名,此时consumer与swagger接口是一致的
   // 如果不传return类型进来,完全以swagger为标准,会导致生成的class不等于return
-  public void init(ClassLoader classLoader, String packageName, Swagger 
swagger, Operation operation,
-      Type returnType) {
+  public void init(SwaggerToClassGenerator swaggerToClassGenerator, Operation 
operation, Type returnType) {
     initSuccessResponse(returnType);
 
     for (Entry<String, Response> entry : operation.getResponses().entrySet()) {
       if ("default".equals(entry.getKey())) {
         defaultResponse = new ResponseMeta();
-        defaultResponse.init(classLoader, packageName, swagger, 
entry.getValue());
+        defaultResponse.init(swaggerToClassGenerator, entry.getValue());
         continue;
       }
 
       Integer statusCode = Integer.parseInt(entry.getKey());
       ResponseMeta responseMeta = responseMap.computeIfAbsent(statusCode, k -> 
new ResponseMeta());
-      responseMeta.init(classLoader, packageName, swagger, entry.getValue());
+      responseMeta.init(swaggerToClassGenerator, entry.getValue());
     }
 
     if (defaultResponse == null) {
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/SwaggerEnvironmentForTest.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/SwaggerEnvironmentForTest.java
new file mode 100644
index 0000000..bc57590
--- /dev/null
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/SwaggerEnvironmentForTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.engine;
+
+import org.apache.servicecomb.foundation.common.utils.BeanUtils;
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
+import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
+import org.apache.servicecomb.swagger.engine.SwaggerProducer;
+import org.apache.servicecomb.swagger.engine.bootstrap.BootstrapNormal;
+import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
+import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
+
+import io.swagger.models.Swagger;
+
+public class SwaggerEnvironmentForTest {
+  private SwaggerEnvironment swaggerEnvironment = new BootstrapNormal().boot();
+
+  private ClassLoader classLoader = new ClassLoader() {
+  };
+
+  public ClassLoader getClassLoader() {
+    return classLoader;
+  }
+
+  public SwaggerEnvironment getSwaggerEnvironment() {
+    return swaggerEnvironment;
+  }
+
+  public SwaggerProducer createProducer(Object producerInstance) {
+    Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
+    SwaggerGenerator producerGenerator = 
UnitTestSwaggerUtils.generateSwagger(classLoader, producerCls);
+    Swagger swagger = producerGenerator.getSwagger();
+
+    SwaggerToClassGenerator swaggerToClassGenerator = new 
SwaggerToClassGenerator(new ClassLoader() {
+    }, swagger, null);
+    return swaggerEnvironment.createProducer(producerInstance, 
swaggerToClassGenerator.convert());
+  }
+}
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/TestSwaggerEnvironment.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/TestSwaggerEnvironment.java
index 83b3be4..c256775 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/TestSwaggerEnvironment.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/engine/TestSwaggerEnvironment.java
@@ -22,21 +22,18 @@ import static org.hamcrest.core.IsNull.notNullValue;
 import static org.hamcrest.core.IsNull.nullValue;
 import static org.junit.Assert.assertThat;
 
-import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
 import org.apache.servicecomb.swagger.engine.SwaggerProducer;
-import org.apache.servicecomb.swagger.engine.bootstrap.BootstrapNormal;
 import org.apache.servicecomb.swagger.invocation.models.ProducerImpl;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestSwaggerEnvironment {
-  private static SwaggerEnvironment env;
+  private static SwaggerEnvironmentForTest env = new 
SwaggerEnvironmentForTest();
 
   private static SwaggerProducer producer;
 
   @BeforeClass
   public static void init() {
-    env = new BootstrapNormal().boot();
     producer = env.createProducer(new ProducerImpl());
   }
 
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualProducer.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualProducer.java
index f8fd1a1..04d2b30 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualProducer.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualProducer.java
@@ -21,10 +21,9 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
+import org.apache.servicecomb.engine.SwaggerEnvironmentForTest;
 import org.apache.servicecomb.swagger.engine.SwaggerConsumer;
-import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
 import org.apache.servicecomb.swagger.engine.SwaggerProducer;
-import org.apache.servicecomb.swagger.engine.bootstrap.BootstrapNormal;
 import org.apache.servicecomb.swagger.engine.unittest.LocalProducerInvoker;
 import org.apache.servicecomb.swagger.invocation.arguments.utils.Utils;
 import org.apache.servicecomb.swagger.invocation.context.ContextUtils;
@@ -37,7 +36,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestPojoConsumerEqualProducer {
-  private static SwaggerEnvironment env;
+  private static SwaggerEnvironmentForTest env = new 
SwaggerEnvironmentForTest();
 
   private static SwaggerProducer producer;
 
@@ -49,9 +48,8 @@ public class TestPojoConsumerEqualProducer {
 
   @BeforeClass
   public static void init() {
-    env = new BootstrapNormal().boot();
     producer = env.createProducer(new PojoImpl());
-    consumer = env.createConsumer(PojoConsumerIntf.class, 
producer.getSwaggerIntf());
+    consumer = 
env.getSwaggerEnvironment().createConsumer(PojoConsumerIntf.class, 
producer.getSwaggerIntf());
     invoker = new LocalProducerInvoker(consumer, producer);
     proxy = invoker.getProxy();
   }
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualSwagger.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualSwagger.java
index 1af263b..7a1f4d5 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualSwagger.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/TestPojoConsumerEqualSwagger.java
@@ -20,10 +20,9 @@ package org.apache.servicecomb.swagger.invocation.arguments;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.servicecomb.engine.SwaggerEnvironmentForTest;
 import org.apache.servicecomb.swagger.engine.SwaggerConsumer;
-import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
 import org.apache.servicecomb.swagger.engine.SwaggerProducer;
-import org.apache.servicecomb.swagger.engine.bootstrap.BootstrapNormal;
 import org.apache.servicecomb.swagger.engine.unittest.LocalProducerInvoker;
 import org.apache.servicecomb.swagger.invocation.context.ContextUtils;
 import org.apache.servicecomb.swagger.invocation.context.InvocationContext;
@@ -35,7 +34,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestPojoConsumerEqualSwagger {
-  private static SwaggerEnvironment env;
+  private static SwaggerEnvironmentForTest env = new 
SwaggerEnvironmentForTest();
 
   private static SwaggerProducer producer;
 
@@ -47,9 +46,8 @@ public class TestPojoConsumerEqualSwagger {
 
   @BeforeClass
   public static void init() {
-    env = new BootstrapNormal().boot();
     producer = env.createProducer(new JaxrsImpl());
-    consumer = env.createConsumer(PojoConsumerIntf.class, 
producer.getSwaggerIntf());
+    consumer = 
env.getSwaggerEnvironment().createConsumer(PojoConsumerIntf.class, 
producer.getSwaggerIntf());
     invoker = new LocalProducerInvoker(consumer, producer);
     proxy = invoker.getProxy();
   }
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
index 8bcdd65..6b03522 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
@@ -16,6 +16,7 @@
  */
 package org.apache.servicecomb.swagger.invocation.response;
 
+import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
 import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
 import 
org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
 import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
@@ -48,8 +49,10 @@ public class TestResponsesMeta {
     Swagger swagger = generator.getSwagger();
     Operation operation = swagger.getPath("/add").getPost();
 
+    SwaggerToClassGenerator swaggerToClassGenerator = new 
SwaggerToClassGenerator(new ClassLoader() {
+    }, swagger, "ms.sid");
     ResponsesMeta meta = new ResponsesMeta();
-    meta.init(null, "gen", swagger, operation, int.class);
+    meta.init(swaggerToClassGenerator, operation, int.class);
 
     ResponseMeta resp = meta.findResponseMeta(200);
     Assert.assertEquals(int.class, resp.getJavaType().getRawClass());

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

Reply via email to