This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 9e99226b3295cc870922363f1ce72c33d1d1af0a
Author: liubao <[email protected]>
AuthorDate: Fri Aug 17 09:28:32 2018 +0800

    [SCB-847]change mapper to two categories
---
 .../common/rest/codec/RestObjectMapperFactory.java | 27 ++++++----------------
 .../rest/codec/param/BodyProcessorCreator.java     |  4 ++--
 .../rest/codec/param/CookieProcessorCreator.java   |  2 +-
 .../rest/codec/param/HeaderProcessorCreator.java   |  2 +-
 .../rest/codec/param/ParamValueProcessor.java      |  2 +-
 .../rest/codec/produce/ProduceJsonProcessor.java   |  4 ++--
 .../servicecomb/demo/jaxrs/client/JaxrsClient.java |  9 +++-----
 .../servicecomb/demo/jaxrs/server/JaxrsServer.java | 10 ++++----
 .../demo/RestObjectMapperWithStringMapper.java     |  2 --
 ...tObjectMapperWithStringMapperNotWriteNull.java} | 24 +++----------------
 10 files changed, 24 insertions(+), 62 deletions(-)

diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapperFactory.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapperFactory.java
index 65b107e..c6d5d65 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapperFactory.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapperFactory.java
@@ -17,40 +17,27 @@
 
 package org.apache.servicecomb.common.rest.codec;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * Manage RestObjectMapper instances. Give users an option to specify custom 
mappers.
  */
 public class RestObjectMapperFactory {
-  public static final String KEY_PROVIDER_READ_OR_CONSUMER_READ = 
"provider.consumer.read";
-
-  public static final String KEY_PROVIDER_WRITE = "provider.write";
-
-  public static final String KEY_CONSUMER_WRITE = "consumer.write";
-
   private static AbstractRestObjectMapper defaultMapper = new 
RestObjectMapper();
 
-  private static Map<String, AbstractRestObjectMapper> allMappers = new 
HashMap<>();
+  private static AbstractRestObjectMapper consumerWriterMapper = new 
RestObjectMapper();
 
-  public static AbstractRestObjectMapper getRestObjectMapper(String key) {
-    AbstractRestObjectMapper mapper = allMappers.get(key);
-    if (mapper != null) {
-      return mapper;
-    }
-    return defaultMapper;
+  public static AbstractRestObjectMapper getConsumerWriterMapper() {
+    return consumerWriterMapper;
   }
 
   public static AbstractRestObjectMapper getRestObjectMapper() {
     return defaultMapper;
   }
 
-  public static void setDefaultRestObjectMapper(AbstractRestObjectMapper 
customMapper) {
-    defaultMapper = customMapper;
+  public static void setConsumerWriterMapper(AbstractRestObjectMapper 
customMapper) {
+    consumerWriterMapper = customMapper;
   }
 
-  public static void setCustomMapper(String key, AbstractRestObjectMapper 
mapper) {
-    allMappers.put(key, mapper);
+  public static void setDefaultRestObjectMapper(AbstractRestObjectMapper 
customMapper) {
+    defaultMapper = customMapper;
   }
 }
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
index fc40579..ff5f587 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
@@ -85,7 +85,7 @@ public class BodyProcessorCreator implements 
ParamValueProcessorCreator {
       }
 
       try {
-        return 
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_PROVIDER_READ_OR_CONSUMER_READ)
+        return RestObjectMapperFactory.getRestObjectMapper()
             .readValue(inputStream, targetType);
       } catch (MismatchedInputException e) {
         // there is no way to detect InputStream is empty, so have to catch 
the exception
@@ -101,7 +101,7 @@ public class BodyProcessorCreator implements 
ParamValueProcessorCreator {
     public void setValue(RestClientRequest clientRequest, Object arg) throws 
Exception {
       try (BufferOutputStream output = new BufferOutputStream()) {
         clientRequest.putHeader(HttpHeaders.CONTENT_TYPE, 
MediaType.APPLICATION_JSON);
-        
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_CONSUMER_WRITE).writeValue(output,
 arg);
+        RestObjectMapperFactory.getConsumerWriterMapper().writeValue(output, 
arg);
         if (arg != null) {
           clientRequest.write(output.getBuffer());
         }
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
index 1688349..659637e 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
@@ -65,7 +65,7 @@ public class CookieProcessorCreator implements 
ParamValueProcessorCreator {
     @Override
     public void setValue(RestClientRequest clientRequest, Object arg) throws 
Exception {
       clientRequest.addCookie(paramPath,
-          
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_CONSUMER_WRITE).convertToString(arg));
+          
RestObjectMapperFactory.getConsumerWriterMapper().convertToString(arg));
     }
 
     @Override
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
index 44fa146..810e018 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
@@ -75,7 +75,7 @@ public class HeaderProcessorCreator implements 
ParamValueProcessorCreator {
         return;
       }
       clientRequest.putHeader(paramPath,
-          
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_CONSUMER_WRITE).convertToString(arg));
+          
RestObjectMapperFactory.getConsumerWriterMapper().convertToString(arg));
     }
 
     @Override
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/ParamValueProcessor.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/ParamValueProcessor.java
index 8753b40..e2d8b67 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/ParamValueProcessor.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/ParamValueProcessor.java
@@ -30,7 +30,7 @@ public interface ParamValueProcessor {
   void setValue(RestClientRequest clientRequest, Object arg) throws Exception;
 
   default Object convertValue(Object value, JavaType targetType) {
-    return 
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_PROVIDER_READ_OR_CONSUMER_READ)
+    return RestObjectMapperFactory.getRestObjectMapper()
         .convertValue(value, targetType);
   }
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceJsonProcessor.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceJsonProcessor.java
index 4f57553..d4006c7 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceJsonProcessor.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceJsonProcessor.java
@@ -35,12 +35,12 @@ public class ProduceJsonProcessor implements 
ProduceProcessor {
 
   @Override
   public void doEncodeResponse(OutputStream output, Object result) throws 
Exception {
-    
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_PROVIDER_WRITE).writeValue(output,
 result);
+    RestObjectMapperFactory.getRestObjectMapper().writeValue(output, result);
   }
 
   @Override
   public Object doDecodeResponse(InputStream input, JavaType type) throws 
Exception {
-    return 
RestObjectMapperFactory.getRestObjectMapper(RestObjectMapperFactory.KEY_PROVIDER_READ_OR_CONSUMER_READ)
+    return RestObjectMapperFactory.getRestObjectMapper()
         .readValue(input, type);
   }
 
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
index d116af4..f28ffbd 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
@@ -24,13 +24,13 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response.Status;
 
 import org.apache.http.HttpStatus;
-import org.apache.servicecomb.common.rest.codec.RestObjectMapper;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.demo.CodeFirstRestTemplate;
 import org.apache.servicecomb.demo.DemoConst;
 import org.apache.servicecomb.demo.RestObjectMapperWithStringMapper;
+import 
org.apache.servicecomb.demo.RestObjectMapperWithStringMapperNotWriteNull;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.demo.jaxrs.client.beanParam.BeanParamPojoClient;
@@ -64,11 +64,8 @@ public class JaxrsClient {
   public static void init() throws Exception {
     Log4jUtils.init();
     BeanUtils.init();
-    RestObjectMapperFactory
-        .setCustomMapper(RestObjectMapperFactory.KEY_CONSUMER_WRITE, new 
RestObjectMapperWithStringMapper());
-    
RestObjectMapperFactory.setCustomMapper(RestObjectMapperFactory.KEY_PROVIDER_WRITE,
 new RestObjectMapper());
-    
RestObjectMapperFactory.setCustomMapper(RestObjectMapperFactory.KEY_PROVIDER_READ_OR_CONSUMER_READ,
-        new RestObjectMapperWithStringMapper());
+    RestObjectMapperFactory.setDefaultRestObjectMapper(new 
RestObjectMapperWithStringMapper());
+    RestObjectMapperFactory.setConsumerWriterMapper(new 
RestObjectMapperWithStringMapperNotWriteNull());
   }
 
   public static void run() throws Exception {
diff --git 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxrsServer.java
 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxrsServer.java
index f661720..3b2d952 100644
--- 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxrsServer.java
+++ 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxrsServer.java
@@ -17,20 +17,18 @@
 
 package org.apache.servicecomb.demo.jaxrs.server;
 
-import org.apache.servicecomb.common.rest.codec.RestObjectMapper;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.demo.RestObjectMapperWithStringMapper;
+import 
org.apache.servicecomb.demo.RestObjectMapperWithStringMapperNotWriteNull;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.foundation.common.utils.Log4jUtils;
 
 public class JaxrsServer {
   public static void main(String[] args) throws Exception {
+    RestObjectMapperFactory.setDefaultRestObjectMapper(new 
RestObjectMapperWithStringMapper());
+    RestObjectMapperFactory.setConsumerWriterMapper(new 
RestObjectMapperWithStringMapperNotWriteNull());
+
     Log4jUtils.init();
     BeanUtils.init();
-    RestObjectMapperFactory
-        .setCustomMapper(RestObjectMapperFactory.KEY_CONSUMER_WRITE, new 
RestObjectMapperWithStringMapper());
-    
RestObjectMapperFactory.setCustomMapper(RestObjectMapperFactory.KEY_PROVIDER_WRITE,
 new RestObjectMapper());
-    
RestObjectMapperFactory.setCustomMapper(RestObjectMapperFactory.KEY_PROVIDER_READ_OR_CONSUMER_READ,
-        new RestObjectMapperWithStringMapper());
   }
 }
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
index 6438069..d90160c 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
@@ -24,7 +24,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.databind.JavaType;
 
 /**
@@ -51,7 +50,6 @@ public class RestObjectMapperWithStringMapper extends 
RestObjectMapper {
 
   public RestObjectMapperWithStringMapper() {
     super();
-    setSerializationInclusion(Include.NON_NULL);
   }
 
   @Override
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
similarity index 69%
copy from 
demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
copy to 
demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
index 6438069..9eacb22 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapper.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
@@ -17,15 +17,10 @@
 
 package org.apache.servicecomb.demo;
 
-import java.io.IOException;
-
-import org.apache.servicecomb.common.rest.codec.RestObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.databind.JavaType;
 
 /**
  *  Demonstrate how to using String as raw type when using RestTemplate to 
invoke a service that use POJO. e.g.
@@ -44,26 +39,13 @@ import com.fasterxml.jackson.databind.JavaType;
  *  <b>Caution:</b> json will convert String to object based on String 
constructor, using this feature will make default
  *  conversion change. You must write  convertValue to check possible types 
using.
  */
-public class RestObjectMapperWithStringMapper extends RestObjectMapper {
-  private static final long serialVersionUID = 4279371572149490568L;
+public class RestObjectMapperWithStringMapperNotWriteNull extends 
RestObjectMapperWithStringMapper {
+  private static final long serialVersionUID = 4279371572149490560L;
 
   private static Logger LOGGER = 
LoggerFactory.getLogger(RestObjectMapperWithStringMapper.class);
 
-  public RestObjectMapperWithStringMapper() {
+  public RestObjectMapperWithStringMapperNotWriteNull() {
     super();
     setSerializationInclusion(Include.NON_NULL);
   }
-
-  @Override
-  public <T> T convertValue(Object fromValue, JavaType toValueType) throws 
IllegalArgumentException {
-    if (String.class.isInstance(fromValue)
-        && !BeanUtils.isSimpleValueType(toValueType.getRawClass())) {
-      try {
-        return super.readValue((String) fromValue, toValueType);
-      } catch (IOException e) {
-        LOGGER.error("Failed to convert value for {}.", e.getMessage());
-      }
-    }
-    return super.convertValue(fromValue, toValueType);
-  }
 }

Reply via email to