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); - } }
