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 9473d949839019ea2d89e500dddf186d08189da9 Author: wujimin <wuji...@huawei.com> AuthorDate: Wed Jul 3 23:11:59 2019 +0800 [SCB-1212[WIP][WEAK] jaxrs response mapper switch to new mechanism --- .../swagger-invocation/invocation-jaxrs/pom.xml | 12 ++- .../response/JaxrsConsumerResponseMapper.java | 16 +++- .../JaxrsConsumerResponseMapperFactory.java | 4 +- .../JaxrsProducerResponseMapperFactory.java | 4 +- .../response/TestJaxrsConsumerResponseMapper.java | 100 ++++++++------------- .../TestJaxrsConsumerResponseMapperFactory.java | 43 --------- .../TestJaxrsProducerResponseMapperFactory.java | 6 +- 7 files changed, 69 insertions(+), 116 deletions(-) diff --git a/swagger/swagger-invocation/invocation-jaxrs/pom.xml b/swagger/swagger-invocation/invocation-jaxrs/pom.xml index 37c017d..df3a21a 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/pom.xml +++ b/swagger/swagger-invocation/invocation-jaxrs/pom.xml @@ -26,11 +26,21 @@ <artifactId>swagger-invocation-jaxrs</artifactId> <name>Java Chassis::Swagger::Invocation::JAXRS</name> - <dependencies> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>swagger-invocation-core</artifactId> </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>swagger-generator-jaxrs</artifactId> + </dependency> + + <dependency> + <groupId>org.glassfish.jersey.core</groupId> + <artifactId>jersey-client</artifactId> + <version>2.28</version> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java index f499b7b..f8b5373 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapper.java @@ -32,9 +32,19 @@ public class JaxrsConsumerResponseMapper implements ConsumerResponseMapper { 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()); + if (headers == null) { + return responseBuilder.build(); + } + + for (Entry<String, List<Object>> entry : headers.entrySet()) { + if (entry.getValue() == null) { + continue; + } + + for (Object value : entry.getValue()) { + if (value != null) { + responseBuilder.header(entry.getKey(), value); + } } } diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java index abf491e..c0b0b6b 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsConsumerResponseMapperFactory.java @@ -26,13 +26,13 @@ import org.apache.servicecomb.swagger.invocation.response.consumer.ConsumerRespo public class JaxrsConsumerResponseMapperFactory implements ConsumerResponseMapperFactory { @Override - public boolean isMatch(Type swaggerType, Type consumerType) { + public boolean isMatch(Type consumerType) { return Response.class.equals(consumerType); } @Override public ConsumerResponseMapper createResponseMapper(ResponseMapperFactorys<ConsumerResponseMapper> factorys, - Type swaggerType, Type consumerType) { + Type consumerType) { return new JaxrsConsumerResponseMapper(); } } diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsProducerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsProducerResponseMapperFactory.java index 14a0ff6..7afbdcd 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsProducerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/main/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/JaxrsProducerResponseMapperFactory.java @@ -26,13 +26,13 @@ import org.apache.servicecomb.swagger.invocation.response.producer.ProducerRespo public class JaxrsProducerResponseMapperFactory implements ProducerResponseMapperFactory { @Override - public boolean isMatch(Type swaggerType, Type producerType) { + public boolean isMatch(Type producerType) { return Response.class.equals(producerType); } @Override public ProducerResponseMapper createResponseMapper(ResponseMapperFactorys<ProducerResponseMapper> factorys, - Type swaggerType, Type producerType) { + Type producerType) { return new JaxrsProducerResponseMapper(); } } diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java index b35a4e9..423bfe3 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java @@ -16,89 +16,65 @@ */ package org.apache.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.apache.servicecomb.swagger.invocation.Response; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; + +import org.apache.servicecomb.swagger.engine.SwaggerConsumer; +import org.apache.servicecomb.swagger.engine.SwaggerConsumerOperation; +import org.apache.servicecomb.swagger.engine.SwaggerEnvironment; +import org.apache.servicecomb.swagger.generator.SwaggerGenerator; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import mockit.Expectations; -import mockit.Mock; -import mockit.MockUp; -import mockit.Mocked; +import io.swagger.annotations.ApiResponse; +import io.swagger.models.Swagger; public class TestJaxrsConsumerResponseMapper { - JaxrsConsumerResponseMapper mapper = new JaxrsConsumerResponseMapper(); - - int status; + @Path("/") + interface ConsumerResponseForTest { + @ApiResponse(code = 200, message = "", response = String.class) + @Path("/jaxrsResponse") + @GET + javax.ws.rs.core.Response jaxrsResponse(); + } - Object entity; + SwaggerEnvironment environment = new SwaggerEnvironment(); - Map<String, Object> headers = new LinkedHashMap<>(); + SwaggerConsumer swaggerConsumer; - ResponseBuilder responseBuilder; + String result = "abc"; - @Mocked - RuntimeDelegate runtimeDelegate; + org.apache.servicecomb.swagger.invocation.Response response = org.apache.servicecomb.swagger.invocation.Response + .ok(result); @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; - } - }; + Swagger swagger = SwaggerGenerator.generate(ConsumerResponseForTest.class); + swaggerConsumer = environment.createConsumer(ConsumerResponseForTest.class, swagger); } @SuppressWarnings("unchecked") @Test - public void mapResponse_withHeaders() { - Response response = Response.create(Status.OK, "ret"); - response.getHeaders().addHeader("h", "v"); - mapper.mapResponse(response); + public void jaxrsResponse() { + SwaggerConsumerOperation operation = swaggerConsumer.findOperation("jaxrsResponse"); - 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")); + Response jaxrsResponse = (Response) operation.getResponseMapper().mapResponse(response); + Assert.assertEquals(result, jaxrsResponse.getEntity()); + Assert.assertTrue(jaxrsResponse.getHeaders().isEmpty()); } @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()); + public void jaxrsResponseWithHeaders() { + SwaggerConsumerOperation operation = swaggerConsumer.findOperation("jaxrsResponse"); + response.getHeaders().addHeader("h", "v1").addHeader("h", "v2").addHeader("h", (Object) null); + response.getHeaders().getHeaderMap().put("h1", null); + + Response jaxrsResponse = (Response) operation.getResponseMapper().mapResponse(response); + Assert.assertEquals(result, jaxrsResponse.getEntity()); + Assert.assertEquals(1, jaxrsResponse.getHeaders().size()); + Assert.assertThat(jaxrsResponse.getHeaders().get("h"), Matchers.contains("v1", "v2")); } } diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java deleted file mode 100644 index f57149d..0000000 --- a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapperFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.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)); - } -} diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsProducerResponseMapperFactory.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsProducerResponseMapperFactory.java index 179def7..5b768d0 100644 --- a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsProducerResponseMapperFactory.java +++ b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsProducerResponseMapperFactory.java @@ -27,17 +27,17 @@ public class TestJaxrsProducerResponseMapperFactory { @Test public void isMatch_true() { - Assert.assertTrue(factory.isMatch(null, Response.class)); + Assert.assertTrue(factory.isMatch(Response.class)); } @Test public void isMatch_false() { - Assert.assertFalse(factory.isMatch(null, String.class)); + Assert.assertFalse(factory.isMatch(String.class)); } @Test public void createResponseMapper() { - Assert.assertThat(factory.createResponseMapper(null, null, null), + Assert.assertThat(factory.createResponseMapper(null, null), Matchers.instanceOf(JaxrsProducerResponseMapper.class)); } }