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 5b4351faa5157c5cdfedc760ccd3f94d50d94c1f Author: wujimin <[email protected]> AuthorDate: Sat Dec 23 17:28:49 2017 +0800 JAV-591 [WIP] swagger invocation core ProducerResponseMapper switch to new mechanism --- ... CseResponseProducerResponseMapperFactory.java} | 19 ++++---- ...mon.java => DefaultProducerResponseMapper.java} | 9 +--- ...a => DefaultProducerResponseMapperFactory.java} | 37 +++++++------- .../response/producer/ProducerResponseMapper.java | 2 - .../producer/ProducerResponseMapperFactory.java | 31 +----------- ...response.producer.ProducerResponseMapperFactory | 19 ++++++++ ...tCseResponseProducerResponseMapperFactory.java} | 31 +++++++----- .../TestDefaultProducerResponseMapper.java} | 28 +++++------ .../TestDefaultProducerResponseMapperFactory.java | 56 ++++++++++++++++++++++ 9 files changed, 137 insertions(+), 95 deletions(-) diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseCseSame.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/CseResponseProducerResponseMapperFactory.java similarity index 62% rename from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseCseSame.java rename to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/CseResponseProducerResponseMapperFactory.java index cfc3508..d3e022c 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseCseSame.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/CseResponseProducerResponseMapperFactory.java @@ -16,21 +16,22 @@ */ package io.servicecomb.swagger.invocation.response.producer; -import javax.ws.rs.core.Response.StatusType; - -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 CseResponseProducerResponseMapperFactory implements ProducerResponseMapperFactory { + private static final ProducerResponseMapper SAME = (status, response) -> (Response) response; -@Component -public class ProducerResponseCseSame implements ProducerResponseMapper { @Override - public Class<?> getResponseClass() { - return Response.class; + public boolean isMatch(Type swaggerType, Type producerType) { + return producerType.equals(Response.class); } @Override - public Response mapResponse(StatusType status, Object response) { - return (Response) response; + public ProducerResponseMapper createResponseMapper(ResponseMapperFactorys<ProducerResponseMapper> factorys, + Type swaggerType, Type producerType) { + return SAME; } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapper.java similarity index 85% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java copy to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapper.java index de58df0..3596d8c 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapper.java @@ -21,19 +21,14 @@ import javax.ws.rs.core.Response.StatusType; import io.servicecomb.swagger.invocation.Response; import io.servicecomb.swagger.invocation.converter.Converter; -public class ProducerResponseMapperCommon implements ProducerResponseMapper { +public class DefaultProducerResponseMapper implements ProducerResponseMapper { private Converter converter; - public ProducerResponseMapperCommon(Converter converter) { + public DefaultProducerResponseMapper(Converter converter) { this.converter = converter; } @Override - public Class<?> getResponseClass() { - return null; - } - - @Override public Response mapResponse(StatusType status, Object response) { Object swaggerResult = converter.convert(response); return Response.create(status, swaggerResult); diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapperFactory.java similarity index 58% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java copy to swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapperFactory.java index efe44ec..d6d7ed5 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/DefaultProducerResponseMapperFactory.java @@ -17,36 +17,33 @@ package io.servicecomb.swagger.invocation.response.producer; 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; -@Component -public class ProducerResponseMapperFactory extends ResponseMapperFactory<ProducerResponseMapper> { +public class DefaultProducerResponseMapperFactory implements ProducerResponseMapperFactory { + private ConverterMgr converterMgr; - @Inject - public void setMapperList(List<ProducerResponseMapper> mapperList) { - for (ProducerResponseMapper 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 src; + public boolean isMatch(Type swaggerType, Type producerType) { + return true; } @Override - protected ProducerResponseMapper doCreateResponseMapper(Converter converter) { - return new ProducerResponseMapperCommon(converter); + public ProducerResponseMapper createResponseMapper(ResponseMapperFactorys<ProducerResponseMapper> factorys, + Type swaggerType, Type producerType) { + Converter converter = converterMgr.findConverter(producerType, swaggerType); + return new DefaultProducerResponseMapper(converter); } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapper.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapper.java index 99cdfdb..04b65e4 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapper.java @@ -21,7 +21,5 @@ import javax.ws.rs.core.Response.StatusType; import io.servicecomb.swagger.invocation.Response; public interface ProducerResponseMapper { - Class<?> getResponseClass(); - Response mapResponse(StatusType status, Object response); } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java index efe44ec..12335d0 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperFactory.java @@ -16,37 +16,8 @@ */ package io.servicecomb.swagger.invocation.response.producer; -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 ProducerResponseMapperFactory extends ResponseMapperFactory<ProducerResponseMapper> { - - @Inject - public void setMapperList(List<ProducerResponseMapper> mapperList) { - for (ProducerResponseMapper 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 src; - } +public interface ProducerResponseMapperFactory extends ResponseMapperFactory<ProducerResponseMapper> { - @Override - protected ProducerResponseMapper doCreateResponseMapper(Converter converter) { - return new ProducerResponseMapperCommon(converter); - } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.producer.ProducerResponseMapperFactory b/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.producer.ProducerResponseMapperFactory new file mode 100644 index 0000000..7f8db5d --- /dev/null +++ b/swagger/swagger-invocation/invocation-core/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.producer.ProducerResponseMapperFactory @@ -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.producer.CseResponseProducerResponseMapperFactory +io.servicecomb.swagger.invocation.response.producer.DefaultProducerResponseMapperFactory \ No newline at end of file diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestCseResponseProducerResponseMapperFactory.java similarity index 56% copy from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java copy to swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestCseResponseProducerResponseMapperFactory.java index de58df0..46c1008 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestCseResponseProducerResponseMapperFactory.java @@ -16,26 +16,31 @@ */ package io.servicecomb.swagger.invocation.response.producer; -import javax.ws.rs.core.Response.StatusType; +import javax.ws.rs.core.Response.Status; + +import org.junit.Assert; +import org.junit.Test; import io.servicecomb.swagger.invocation.Response; -import io.servicecomb.swagger.invocation.converter.Converter; -public class ProducerResponseMapperCommon implements ProducerResponseMapper { - private Converter converter; +public class TestCseResponseProducerResponseMapperFactory { + CseResponseProducerResponseMapperFactory factory = new CseResponseProducerResponseMapperFactory(); - public ProducerResponseMapperCommon(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 Response mapResponse(StatusType status, Object response) { - Object swaggerResult = converter.convert(response); - return Response.create(status, swaggerResult); + @Test + public void createResponseMapper() { + ProducerResponseMapper mapper = factory.createResponseMapper(null, null, Response.class); + Response response = Response.ok(null); + + Assert.assertSame(response, mapper.mapResponse(Status.OK, response)); } } diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapper.java similarity index 62% rename from swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java rename to swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapper.java index de58df0..9d6146c 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/io/servicecomb/swagger/invocation/response/producer/ProducerResponseMapperCommon.java +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapper.java @@ -16,26 +16,26 @@ */ package io.servicecomb.swagger.invocation.response.producer; -import javax.ws.rs.core.Response.StatusType; +import javax.ws.rs.core.Response.Status; + +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 ProducerResponseMapperCommon implements ProducerResponseMapper { - private Converter converter; +public class TestDefaultProducerResponseMapper { + ConverterMgr mgr = new ConverterMgr(); - public ProducerResponseMapperCommon(Converter converter) { - this.converter = converter; - } + Converter converter = mgr.findConverter(Integer.class, String.class); - @Override - public Class<?> getResponseClass() { - return null; - } + DefaultProducerResponseMapper mapper = new DefaultProducerResponseMapper(converter); - @Override - public Response mapResponse(StatusType status, Object response) { - Object swaggerResult = converter.convert(response); - return Response.create(status, swaggerResult); + @Test + public void mapResponse() { + Response result = mapper.mapResponse(Status.OK, 1); + Assert.assertSame(Status.OK, result.getStatus()); + Assert.assertEquals("1", result.getResult()); } } diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapperFactory.java new file mode 100644 index 0000000..714a01d --- /dev/null +++ b/swagger/swagger-invocation/invocation-core/src/test/java/io/servicecomb/swagger/invocation/response/producer/TestDefaultProducerResponseMapperFactory.java @@ -0,0 +1,56 @@ +/* + * 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 io.servicecomb.swagger.invocation.response.producer; + +import javax.ws.rs.core.Response.Status; + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.servicecomb.swagger.invocation.Response; +import io.servicecomb.swagger.invocation.converter.ConverterMgr; + +public class TestDefaultProducerResponseMapperFactory { + static ConverterMgr mgr = new ConverterMgr(); + + static DefaultProducerResponseMapperFactory factory = new DefaultProducerResponseMapperFactory(); + + @BeforeClass + public static void setup() { + factory.setConverterMgr(mgr); + } + + @Test + public void getOrder() { + Assert.assertEquals(Integer.MAX_VALUE, factory.getOrder()); + } + + @Test + public void isMatch() { + Assert.assertTrue(factory.isMatch(null, null)); + } + + @Test + public void createResponseMapper() { + ProducerResponseMapper mapper = factory.createResponseMapper(null, String.class, Integer.class); + Response result = mapper.mapResponse(Status.OK, 1); + + Assert.assertSame(Status.OK, result.getStatus()); + Assert.assertEquals("1", result.getResult()); + } +} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
