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); - } }
