You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2019/07/04 09:38:16 UTC
[servicecomb-java-chassis] 06/07: [SCB-1212[WIP][WEAK] jaxrs
response mapper switch to new mechanism
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 <wu...@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));
}
}