This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 399ee0903c26c9df613401c4a20d40f8ac663937 Author: wujimin <[email protected]> AuthorDate: Sat Dec 23 17:16:02 2017 +0800 JAV-591 [WIP] swagger invocation core ConsumerResponseMapper switch to new mechanism --- .../response/consumer/ConsumerResponseMapper.java | 2 -- .../consumer/ConsumerResponseMapperFactory.java | 31 +----------------- ... CseResponseConsumerResponseMapperFactory.java} | 17 ++++++---- ...mon.java => DefaultConsumerResponseMapper.java} | 9 ++--- ...a => DefaultConsumerResponseMapperFactory.java} | 38 ++++++++++------------ ...response.consumer.ConsumerResponseMapperFactory | 19 +++++++++++ ...tCseResponseConsumerResponseMapperFactory.java} | 28 +++++++++------- .../TestDefaultConsumerResponseMapper.java} | 24 +++++++------- .../TestDefaultConsumerResponseMapperFactory.java} | 36 +++++++++++++------- 9 files changed, 104 insertions(+), 100 deletions(-) diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapper.java index dbd3027..34b3f44 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapper.java @@ -19,7 +19,5 @@ package io.servicecomb.swagger.invocation.response.consumer; import io.servicecomb.swagger.invocation.Response; public interface ConsumerResponseMapper { - Class<?> getResponseClass(); - Object mapResponse(Response response); } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java index 007dcd5..39d6f6d 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java @@ -16,36 +16,7 @@ */ package io.servicecomb.swagger.invocation.response.consumer; -import java.lang.reflect.Type; -import java.util.List; - -import javax.inject.Inject; - -import org.springframework.stereotype.Component; - -import io.servicecomb.swagger.invocation.converter.Converter; import io.servicecomb.swagger.invocation.response.ResponseMapperFactory; -@Component -public class ConsumerResponseMapperFactory extends ResponseMapperFactory<ConsumerResponseMapper> { - @Inject - public void setMapperList(List<ConsumerResponseMapper> mapperList) { - for (ConsumerResponseMapper mapper : mapperList) { - if (mapper.getResponseClass() == null) { - throw new Error("response class must not be null"); - } - - mappers.put(mapper.getResponseClass(), mapper); - } - } - - @Override - protected Type choose(Type src, Type target) { - return target; - } - - @Override - protected ConsumerResponseMapper doCreateResponseMapper(Converter converter) { - return new ConsumerResponseMapperCommon(converter); - } +public interface ConsumerResponseMapperFactory extends ResponseMapperFactory<ConsumerResponseMapper> { } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseCseSame.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/CseResponseConsumerResponseMapperFactory.java similarity index 62% rename from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseCseSame.java rename to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/CseResponseConsumerResponseMapperFactory.java index cc078f3..697b118 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseCseSame.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/CseResponseConsumerResponseMapperFactory.java @@ -16,19 +16,22 @@ */ package io.servicecomb.swagger.invocation.response.consumer; -import org.springframework.stereotype.Component; +import java.lang.reflect.Type; import io.servicecomb.swagger.invocation.Response; +import io.servicecomb.swagger.invocation.response.ResponseMapperFactorys; + +public class CseResponseConsumerResponseMapperFactory implements ConsumerResponseMapperFactory { + private static final ConsumerResponseMapper SAME = response -> response; -@Component -public class ConsumerResponseCseSame implements ConsumerResponseMapper { @Override - public Class<?> getResponseClass() { - return Response.class; + public boolean isMatch(Type swaggerType, Type consumerType) { + return Response.class.equals(consumerType); } @Override - public Object mapResponse(Response response) { - return response; + public ConsumerResponseMapper createResponseMapper(ResponseMapperFactorys<ConsumerResponseMapper> factorys, + Type swaggerType, Type consumerType) { + return SAME; } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapper.java similarity index 84% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java copy to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapper.java index ec1241f..0e7b866 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapper.java @@ -19,19 +19,14 @@ package io.servicecomb.swagger.invocation.response.consumer; import io.servicecomb.swagger.invocation.Response; import io.servicecomb.swagger.invocation.converter.Converter; -public class ConsumerResponseMapperCommon implements ConsumerResponseMapper { +public class DefaultConsumerResponseMapper implements ConsumerResponseMapper { private Converter converter; - public ConsumerResponseMapperCommon(Converter converter) { + public DefaultConsumerResponseMapper(Converter converter) { this.converter = converter; } @Override - public Class<?> getResponseClass() { - return null; - } - - @Override public Object mapResponse(Response response) { return converter.convert(response.getResult()); } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapperFactory.java similarity index 58% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java copy to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapperFactory.java index 007dcd5..5845f47 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/DefaultConsumerResponseMapperFactory.java @@ -17,35 +17,33 @@ package io.servicecomb.swagger.invocation.response.consumer; import java.lang.reflect.Type; -import java.util.List; - -import javax.inject.Inject; - -import org.springframework.stereotype.Component; import io.servicecomb.swagger.invocation.converter.Converter; -import io.servicecomb.swagger.invocation.response.ResponseMapperFactory; +import io.servicecomb.swagger.invocation.converter.ConverterMgr; +import io.servicecomb.swagger.invocation.response.ResponseMapperFactorys; + +public class DefaultConsumerResponseMapperFactory implements ConsumerResponseMapperFactory { + private ConverterMgr converterMgr; -@Component -public class ConsumerResponseMapperFactory extends ResponseMapperFactory<ConsumerResponseMapper> { - @Inject - public void setMapperList(List<ConsumerResponseMapper> mapperList) { - for (ConsumerResponseMapper mapper : mapperList) { - if (mapper.getResponseClass() == null) { - throw new Error("response class must not be null"); - } + @Override + public void setConverterMgr(ConverterMgr converterMgr) { + this.converterMgr = converterMgr; + } - mappers.put(mapper.getResponseClass(), mapper); - } + @Override + public int getOrder() { + return Integer.MAX_VALUE; } @Override - protected Type choose(Type src, Type target) { - return target; + public boolean isMatch(Type swaggerType, Type consumerType) { + return true; } @Override - protected ConsumerResponseMapper doCreateResponseMapper(Converter converter) { - return new ConsumerResponseMapperCommon(converter); + public ConsumerResponseMapper createResponseMapper(ResponseMapperFactorys<ConsumerResponseMapper> factorys, + Type swaggerType, Type consumerType) { + Converter converter = converterMgr.findConverter(swaggerType, consumerType); + return new DefaultConsumerResponseMapper(converter); } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory b/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory new file mode 100644 index 0000000..8fa2e27 --- /dev/null +++ b/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory @@ -0,0 +1,19 @@ +# +# 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. +# + +io.servicecomb.swagger.invocation.response.consumer.CseResponseConsumerResponseMapperFactory +io.servicecomb.swagger.invocation.response.consumer.DefaultConsumerResponseMapperFactory \ No newline at end of file diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestCseResponseConsumerResponseMapperFactory.java similarity index 57% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java copy to swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestCseResponseConsumerResponseMapperFactory.java index ec1241f..bd89f39 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestCseResponseConsumerResponseMapperFactory.java @@ -16,23 +16,29 @@ */ package io.servicecomb.swagger.invocation.response.consumer; +import org.junit.Assert; +import org.junit.Test; + import io.servicecomb.swagger.invocation.Response; -import io.servicecomb.swagger.invocation.converter.Converter; -public class ConsumerResponseMapperCommon implements ConsumerResponseMapper { - private Converter converter; +public class TestCseResponseConsumerResponseMapperFactory { + CseResponseConsumerResponseMapperFactory factory = new CseResponseConsumerResponseMapperFactory(); - public ConsumerResponseMapperCommon(Converter converter) { - this.converter = converter; + @Test + public void isMatch_true() { + Assert.assertTrue(factory.isMatch(String.class, Response.class)); } - @Override - public Class<?> getResponseClass() { - return null; + @Test + public void isMatch_false() { + Assert.assertFalse(factory.isMatch(String.class, String.class)); } - @Override - public Object mapResponse(Response response) { - return converter.convert(response.getResult()); + @Test + public void createResponseMapper() { + ConsumerResponseMapper mapper = factory.createResponseMapper(null, null, Response.class); + Response response = Response.ok(null); + + Assert.assertSame(response, mapper.mapResponse(response)); } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapper.java similarity index 66% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java copy to swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapper.java index ec1241f..0a61620 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapper.java @@ -16,23 +16,23 @@ */ package io.servicecomb.swagger.invocation.response.consumer; +import org.junit.Assert; +import org.junit.Test; + import io.servicecomb.swagger.invocation.Response; import io.servicecomb.swagger.invocation.converter.Converter; +import io.servicecomb.swagger.invocation.converter.ConverterMgr; -public class ConsumerResponseMapperCommon implements ConsumerResponseMapper { - private Converter converter; +public class TestDefaultConsumerResponseMapper { + ConverterMgr mgr = new ConverterMgr(); - public ConsumerResponseMapperCommon(Converter converter) { - this.converter = converter; - } + Converter converter = mgr.findConverter(Integer.class, String.class); - @Override - public Class<?> getResponseClass() { - return null; - } + DefaultConsumerResponseMapper mapper = new DefaultConsumerResponseMapper(converter); - @Override - public Object mapResponse(Response response) { - return converter.convert(response.getResult()); + @Test + public void mapResponse() { + Object result = mapper.mapResponse(Response.ok(1)); + Assert.assertEquals("1", result); } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapperFactory.java similarity index 52% rename from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java rename to swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapperFactory.java index ec1241f..7359c76 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/consumer/ConsumerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/consumer/TestDefaultConsumerResponseMapperFactory.java @@ -16,23 +16,37 @@ */ package io.servicecomb.swagger.invocation.response.consumer; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + import io.servicecomb.swagger.invocation.Response; -import io.servicecomb.swagger.invocation.converter.Converter; +import io.servicecomb.swagger.invocation.converter.ConverterMgr; + +public class TestDefaultConsumerResponseMapperFactory { + static ConverterMgr mgr = new ConverterMgr(); -public class ConsumerResponseMapperCommon implements ConsumerResponseMapper { - private Converter converter; + static DefaultConsumerResponseMapperFactory factory = new DefaultConsumerResponseMapperFactory(); + + @BeforeClass + public static void setup() { + factory.setConverterMgr(mgr); + } - public ConsumerResponseMapperCommon(Converter converter) { - this.converter = converter; + @Test + public void getOrder() { + Assert.assertEquals(Integer.MAX_VALUE, factory.getOrder()); } - @Override - public Class<?> getResponseClass() { - return null; + @Test + public void isMatch() { + Assert.assertTrue(factory.isMatch(null, null)); } - @Override - public Object mapResponse(Response response) { - return converter.convert(response.getResult()); + @Test + public void createResponseMapper() { + ConsumerResponseMapper mapper = factory.createResponseMapper(null, Integer.class, String.class); + Object result = mapper.mapResponse(Response.ok(1)); + Assert.assertEquals("1", result); } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
