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 6cb14e1bef83df154c7b8d9972bf689bc565491c Author: wujimin <[email protected]> AuthorDate: Sun Dec 24 01:20:44 2017 +0800 JAV-591 [WIP] swagger invocation jaxrs ConsumerResponseMapper switch to new mechanism --- .../response/JaxrsConsumerResponseMapper.java | 8 -- ...ava => JaxrsConsumerResponseMapperFactory.java} | 33 ++----- ...response.consumer.ConsumerResponseMapperFactory | 18 ++++ .../response/TestJaxrsConsumerResponseMapper.java | 104 +++++++++++++++++++++ .../TestJaxrsConsumerResponseMapperFactory.java | 43 +++++++++ 5 files changed, 175 insertions(+), 31 deletions(-) diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java index a321894..11b991d 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java @@ -22,19 +22,11 @@ import java.util.Map.Entry; import javax.ws.rs.core.Response.ResponseBuilder; -import org.springframework.stereotype.Component; - import io.servicecomb.swagger.invocation.Response; import io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapper; -@Component public class JaxrsConsumerResponseMapper implements ConsumerResponseMapper { @Override - public Class<?> getResponseClass() { - return javax.ws.rs.core.Response.class; - } - - @Override public Object mapResponse(Response response) { ResponseBuilder responseBuilder = javax.ws.rs.core.Response.status(response.getStatus()).entity(response.getResult()); diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java similarity index 53% copy from swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java copy to swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java index a321894..27839dc 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/io/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java @@ -16,36 +16,23 @@ */ package io.servicecomb.swagger.invocation.jaxrs.response; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; +import java.lang.reflect.Type; -import javax.ws.rs.core.Response.ResponseBuilder; +import javax.ws.rs.core.Response; -import org.springframework.stereotype.Component; - -import io.servicecomb.swagger.invocation.Response; +import io.servicecomb.swagger.invocation.response.ResponseMapperFactorys; import io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapper; +import io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory; -@Component -public class JaxrsConsumerResponseMapper implements ConsumerResponseMapper { +public class JaxrsConsumerResponseMapperFactory implements ConsumerResponseMapperFactory { @Override - public Class<?> getResponseClass() { - return javax.ws.rs.core.Response.class; + public boolean isMatch(Type swaggerType, Type consumerType) { + return Response.class.equals(consumerType); } @Override - public Object mapResponse(Response response) { - ResponseBuilder responseBuilder = - javax.ws.rs.core.Response.status(response.getStatus()).entity(response.getResult()); - - Map<String, List<Object>> headers = response.getHeaders().getHeaderMap(); - if (headers != null) { - for (Entry<String, List<Object>> entry : headers.entrySet()) { - responseBuilder.header(entry.getKey(), entry.getValue()); - } - } - - return responseBuilder.build(); + public ConsumerResponseMapper createResponseMapper(ResponseMapperFactorys<ConsumerResponseMapper> factorys, + Type swaggerType, Type consumerType) { + return new JaxrsConsumerResponseMapper(); } } diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory b/swagger/swagger-invocation/invocation-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory new file mode 100644 index 0000000..b4b783b --- /dev/null +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapperFactory @@ -0,0 +1,18 @@ +# +# 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.jaxrs.response.JaxrsConsumerResponseMapperFactory \ No newline at end of file diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java new file mode 100644 index 0000000..65c3bcf --- /dev/null +++ b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java @@ -0,0 +1,104 @@ +/* + * 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.jaxrs.response; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.Response.ResponseBuilder; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.RuntimeDelegate; + +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import io.servicecomb.swagger.invocation.Response; +import mockit.Expectations; +import mockit.Mock; +import mockit.MockUp; +import mockit.Mocked; + +public class TestJaxrsConsumerResponseMapper { + JaxrsConsumerResponseMapper mapper = new JaxrsConsumerResponseMapper(); + + int status; + + Object entity; + + Map<String, Object> headers = new LinkedHashMap<>(); + + ResponseBuilder responseBuilder; + + @Mocked + RuntimeDelegate runtimeDelegate; + + @Before + public void setup() { + responseBuilder = new MockUp<ResponseBuilder>() { + @Mock + ResponseBuilder status(int status) { + TestJaxrsConsumerResponseMapper.this.status = status; + return responseBuilder; + } + + @Mock + ResponseBuilder entity(Object entity) { + TestJaxrsConsumerResponseMapper.this.entity = entity; + return responseBuilder; + } + + @Mock + ResponseBuilder header(String name, Object value) { + headers.put(name, value); + return responseBuilder; + } + }.getMockInstance(); + + new Expectations() { + { + runtimeDelegate.createResponseBuilder(); + result = responseBuilder; + } + }; + } + + @SuppressWarnings("unchecked") + @Test + public void mapResponse_withHeaders() { + Response response = Response.create(Status.OK, "ret"); + response.getHeaders().addHeader("h", "v"); + mapper.mapResponse(response); + + Assert.assertEquals(Status.OK.getStatusCode(), status); + Assert.assertEquals("ret", entity); + Assert.assertEquals(1, headers.size()); + Assert.assertThat((List<Object>) headers.get("h"), Matchers.contains("v")); + } + + @Test + public void mapResponse_withoutHeaders() { + Response response = Response.create(Status.OK, "ret"); + mapper.mapResponse(response); + + Assert.assertEquals(Status.OK.getStatusCode(), status); + Assert.assertEquals("ret", entity); + Assert.assertEquals(0, headers.size()); + } +} diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java new file mode 100644 index 0000000..c417eec --- /dev/null +++ b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/io/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java @@ -0,0 +1,43 @@ +/* + * 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.jaxrs.response; + +import javax.ws.rs.core.Response; + +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + +public class TestJaxrsConsumerResponseMapperFactory { + JaxrsConsumerResponseMapperFactory factory = new JaxrsConsumerResponseMapperFactory(); + + @Test + public void isMatch_true() { + Assert.assertTrue(factory.isMatch(null, Response.class)); + } + + @Test + public void isMatch_false() { + Assert.assertFalse(factory.isMatch(null, String.class)); + } + + @Test + public void createResponseMapper() { + Assert.assertThat(factory.createResponseMapper(null, null, null), + Matchers.instanceOf(JaxrsConsumerResponseMapper.class)); + } +} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
