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

liubao pushed a commit to branch weak-contract-type
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git

commit e0e8bd7ac91e61172be423022685d96c5fadc97d
Author: wujimin <[email protected]>
AuthorDate: Wed Jul 3 22:46:11 2019 +0800

    [SCB-1212[WIP][WEAK] SwaggerEnvironment switch to new mechanism
---
 .../swagger/engine/SwaggerEnvironment.java         | 22 ++++----
 .../swagger/engine/SwaggerProducer.java            | 22 ++++++++
 .../swagger/engine/TestSwaggerEnvironment.java     | 62 +++-------------------
 3 files changed, 39 insertions(+), 67 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 03cf6da..b3f787d 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
@@ -50,17 +50,14 @@ import io.swagger.util.Json;
 public class SwaggerEnvironment {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(SwaggerEnvironment.class);
 
-  private ResponseMapperFactorys<ProducerResponseMapper> 
producerResponseMapperFactorys =
-      new ResponseMapperFactorys<>(ProducerResponseMapperFactory.class);
-
-  private ResponseMapperFactorys<ConsumerResponseMapper> 
consumerResponseMapperFactorys =
-      new ResponseMapperFactorys<>(ConsumerResponseMapperFactory.class);
-
   public SwaggerConsumer createConsumer(Class<?> consumerIntf, Swagger 
swagger) {
     Map<Class<?>, ContextArgumentMapperFactory> contextFactorys = 
SPIServiceUtils
         .getOrLoadSortedService(ConsumerContextArgumentMapperFactory.class)
         .stream()
         
.collect(Collectors.toMap(ConsumerContextArgumentMapperFactory::getContextClass,
 Function.identity()));
+    ResponseMapperFactorys<ConsumerResponseMapper> 
consumerResponseMapperFactorys =
+        new ResponseMapperFactorys<>(ConsumerResponseMapperFactory.class);
+
     SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
 
     SwaggerConsumer consumer = new SwaggerConsumer();
@@ -83,10 +80,8 @@ public class SwaggerEnvironment {
           consumerMethod,
           swaggerOperation);
       ConsumerArgumentsMapper argsMapper = creator.createArgumentsMapper();
-      ConsumerResponseMapper responseMapper = null;
-//      consumerResponseMapperFactorys.createResponseMapper(
-//          swaggerOperation.getGenericReturnType(),
-//          consumerMethod.getGenericReturnType());
+      ConsumerResponseMapper responseMapper = consumerResponseMapperFactorys
+          .createResponseMapper(consumerMethod.getGenericReturnType());
 
       SwaggerConsumerOperation op = new SwaggerConsumerOperation();
       op.setConsumerMethod(consumerMethod);
@@ -119,13 +114,18 @@ public class SwaggerEnvironment {
         .getOrLoadSortedService(ProducerContextArgumentMapperFactory.class)
         .stream()
         
.collect(Collectors.toMap(ProducerContextArgumentMapperFactory::getContextClass,
 Function.identity()));
+    ResponseMapperFactorys<ProducerResponseMapper> 
producerResponseMapperFactorys =
+        new ResponseMapperFactorys<>(ProducerResponseMapperFactory.class);
+
     SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
 
     Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
     Map<String, Method> visibleProducerMethods = 
retrieveVisibleMethods(producerCls);
 
     SwaggerProducer producer = new SwaggerProducer();
+    producer.setSwagger(swagger);
     producer.setProducerCls(producerCls);
+    producer.setProducerInstance(producerInstance);
     for (SwaggerOperation swaggerOperation : 
swaggerOperations.getOperations().values()) {
       String operationId = swaggerOperation.getOperationId();
       // producer参数不一定等于swagger参数
@@ -145,7 +145,6 @@ public class SwaggerEnvironment {
           swaggerOperation);
       ProducerArgumentsMapper argsMapper = creator.createArgumentsMapper();
       ProducerResponseMapper responseMapper = 
producerResponseMapperFactorys.createResponseMapper(
-          swaggerMethod.getGenericReturnType(),
           producerMethod.getGenericReturnType());
 
       SwaggerProducerOperation op = new SwaggerProducerOperation();
@@ -153,6 +152,7 @@ public class SwaggerEnvironment {
       op.setProducerInstance(producerInstance);
       op.setProducerMethod(producerMethod);
       op.setSwaggerOperation(swaggerOperation);
+      op.setSwaggerParameterTypes(creator.getSwaggerParameterTypes());
       op.setArgumentsMapper(argsMapper);
       op.setResponseMapper(responseMapper);
 
diff --git 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducer.java
 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducer.java
index 32968f2..e7918ce 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducer.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducer.java
@@ -20,9 +20,15 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import io.swagger.models.Swagger;
+
 public class SwaggerProducer {
   private Class<?> producerCls;
 
+  private Object producerInstance;
+
+  private Swagger swagger;
+
   // key is operationId
   private Map<String, SwaggerProducerOperation> opMap = new HashMap<>();
 
@@ -34,6 +40,22 @@ public class SwaggerProducer {
     this.producerCls = producerCls;
   }
 
+  public Object getProducerInstance() {
+    return producerInstance;
+  }
+
+  public void setProducerInstance(Object producerInstance) {
+    this.producerInstance = producerInstance;
+  }
+
+  public Swagger getSwagger() {
+    return swagger;
+  }
+
+  public void setSwagger(Swagger swagger) {
+    this.swagger = swagger;
+  }
+
   public void addOperation(SwaggerProducerOperation op) {
     opMap.put(op.getOperationId(), op);
   }
diff --git 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerEnvironment.java
 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerEnvironment.java
index 0a888cc..6b86fae 100644
--- 
a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerEnvironment.java
+++ 
b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerEnvironment.java
@@ -22,50 +22,22 @@ import static org.hamcrest.core.IsNull.notNullValue;
 import static org.hamcrest.core.IsNull.nullValue;
 import static org.junit.Assert.assertThat;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.servicecomb.common.javassist.JavassistUtils;
-import org.apache.servicecomb.engine.SwaggerEnvironmentForTest;
-import 
org.apache.servicecomb.swagger.generator.jaxrs.JaxrsSwaggerGeneratorContext;
-import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
-import 
org.apache.servicecomb.swagger.invocation.arguments.ArgumentsMapperConfig;
-import 
org.apache.servicecomb.swagger.invocation.arguments.producer.JaxRSProducerArgumentsMapperFactory;
-import 
org.apache.servicecomb.swagger.invocation.arguments.producer.ProducerArgumentsMapperFactory;
-import 
org.apache.servicecomb.swagger.invocation.arguments.producer.SpringMVCProducerArgumentsMapperFactory;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
 import org.apache.servicecomb.swagger.invocation.models.ProducerImpl;
-import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import mockit.Deencapsulation;
+import io.swagger.models.Swagger;
 
 public class TestSwaggerEnvironment {
-  private static SwaggerEnvironmentForTest env = new 
SwaggerEnvironmentForTest();
+  private static SwaggerEnvironment env = new SwaggerEnvironment();
 
   private static SwaggerProducer producer;
 
-  private static ProducerArgumentsMapperFactory 
defaultProducerArgumentsMapperFactory;
-
   @BeforeClass
   public static void init() {
-    producer = env.createProducer(new ProducerImpl());
-    defaultProducerArgumentsMapperFactory = new 
ProducerArgumentsMapperFactory();
-    List<ProducerArgumentsMapperFactory> producerArgumentsMapperFactoryList = 
new ArrayList<>();
-    producerArgumentsMapperFactoryList.add(new 
JaxRSProducerArgumentsMapperFactory());
-    producerArgumentsMapperFactoryList.add(new 
SpringMVCProducerArgumentsMapperFactory());
-    producerArgumentsMapperFactoryList.add(new 
ProducerArgumentsMapperFactory());
-
-    Deencapsulation.setField(
-        env.getSwaggerEnvironment(), "producerArgumentsFactory", 
defaultProducerArgumentsMapperFactory);
-    Deencapsulation.setField(
-        env.getSwaggerEnvironment(), "producerArgumentsMapperFactoryList", 
producerArgumentsMapperFactoryList);
-  }
-
-  @AfterClass
-  public static void tearDown() {
-    JavassistUtils.clearByClassLoader(env.getClassLoader());
+    producer = env.createProducer(new ProducerImpl(), null);
   }
 
   @Test
@@ -90,32 +62,10 @@ public class TestSwaggerEnvironment {
 
   @Test
   public void createConsumer_consumerMethodSetBigger() {
-    SwaggerConsumer swaggerConsumer = env.getSwaggerEnvironment()
-        .createConsumer(ConsumerIntf.class, ContractIntf.class);
+    Swagger swagger = SwaggerGenerator.generate(ContractIntf.class);
+    SwaggerConsumer swaggerConsumer = env.createConsumer(ConsumerIntf.class, 
swagger);
 
     Assert.assertNotNull(swaggerConsumer.findOperation("exist"));
     Assert.assertNull(swaggerConsumer.findOperation("notExist"));
   }
-
-  @Test
-  public void selectProducerArgumentsMapperFactory() {
-    final ArgumentsMapperConfig config = new ArgumentsMapperConfig();
-    config.setSwaggerGeneratorContext(new JaxrsSwaggerGeneratorContext());
-
-    final ProducerArgumentsMapperFactory producerArgumentsMapperFactory = 
env.getSwaggerEnvironment()
-        .selectProducerArgumentsMapperFactory(config);
-
-    Assert.assertEquals(JaxRSProducerArgumentsMapperFactory.class, 
producerArgumentsMapperFactory.getClass());
-  }
-
-  @Test
-  public void selectProducerArgumentsMapperFactoryOnReturnDefault() {
-    final ArgumentsMapperConfig config = new ArgumentsMapperConfig();
-    config.setSwaggerGeneratorContext(new PojoSwaggerGeneratorContext());
-
-    final ProducerArgumentsMapperFactory producerArgumentsMapperFactory = 
env.getSwaggerEnvironment()
-        .selectProducerArgumentsMapperFactory(config);
-
-    Assert.assertSame(defaultProducerArgumentsMapperFactory, 
producerArgumentsMapperFactory);
-  }
 }

Reply via email to