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]>.

Reply via email to