You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/26 07:18:41 UTC

[incubator-servicecomb-java-chassis] 03/10: JAV-591 [WIP] swagger invocation core ProducerResponseMapper switch to new mechanism

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 <wu...@huawei.com>
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
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.