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.