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 2020/02/27 10:10:39 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1737] support ISO 8601 data and time (part2: HIGHWAY)

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/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 908e20f  [SCB-1737] support ISO 8601 data and time (part2: HIGHWAY)
908e20f is described below

commit 908e20fdd30694d481b372fa178d3db7e39454bf
Author: liubao <bi...@qq.com>
AuthorDate: Tue Feb 25 11:17:19 2020 +0800

    [SCB-1737] support ISO 8601 data and time (part2: HIGHWAY)
---
 common/common-rest/pom.xml                                |  4 ----
 .../common/rest/codec/RestObjectMapperFactory.java        |  2 ++
 .../common/rest/codec/TestRestObjectMapper.java           |  1 +
 .../servicecomb/common/rest/codec/fix/TestDoSFix.java     |  2 +-
 .../demo/RestObjectMapperWithStringMapper.java            |  2 +-
 .../demo/springmvc/client/TestDateTimeSchema.java         |  4 ++--
 foundations/foundation-common/pom.xml                     |  9 ++++++++-
 .../common/utils}/AbstractRestObjectMapper.java           |  2 +-
 .../servicecomb/foundation/common/utils/JsonUtils.java    | 13 +------------
 .../foundation/common/utils}/RestObjectMapper.java        |  2 +-
 .../schema/deserializer/scalar/Int64ReadSchemas.java      | 15 ++++++---------
 .../schema/serializer/scalar/Int64WriteSchemas.java       | 12 ++++++++----
 12 files changed, 32 insertions(+), 36 deletions(-)

diff --git a/common/common-rest/pom.xml b/common/common-rest/pom.xml
index 9b79b8f..73dc341 100644
--- a/common/common-rest/pom.xml
+++ b/common/common-rest/pom.xml
@@ -60,9 +60,5 @@
       <artifactId>swagger-generator-jaxrs</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.datatype</groupId>
-      <artifactId>jackson-datatype-jsr310</artifactId>
-    </dependency>
   </dependencies>
 </project>
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 4394217..683aa31 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
@@ -19,6 +19,8 @@ package org.apache.servicecomb.common.rest.codec;
 
 import java.util.List;
 
+import org.apache.servicecomb.foundation.common.utils.AbstractRestObjectMapper;
+import org.apache.servicecomb.foundation.common.utils.RestObjectMapper;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 
 import com.fasterxml.jackson.databind.Module;
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
index af840e1..f73e0a7 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.common.rest.codec;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
+import org.apache.servicecomb.foundation.common.utils.RestObjectMapper;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/fix/TestDoSFix.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/fix/TestDoSFix.java
index a8b175a..6ce310d 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/fix/TestDoSFix.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/fix/TestDoSFix.java
@@ -21,7 +21,7 @@ import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.util.concurrent.Callable;
 
-import org.apache.servicecomb.common.rest.codec.RestObjectMapper;
+import org.apache.servicecomb.foundation.common.utils.RestObjectMapper;
 import org.apache.servicecomb.foundation.test.scaffolding.model.Color;
 import org.junit.Assert;
 import org.junit.Test;
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 d90160c..a15d4cb 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
@@ -19,7 +19,7 @@ package org.apache.servicecomb.demo;
 
 import java.io.IOException;
 
-import org.apache.servicecomb.common.rest.codec.RestObjectMapper;
+import org.apache.servicecomb.foundation.common.utils.RestObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestDateTimeSchema.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestDateTimeSchema.java
index a55edf4..b22f8c7 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestDateTimeSchema.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestDateTimeSchema.java
@@ -54,7 +54,7 @@ public class TestDateTimeSchema implements CategorizedTestCase {
 
   @Override
   public void testRestTransport() throws Exception {
-    testDateTimeSchema();
+
   }
 
   @Override
@@ -64,7 +64,7 @@ public class TestDateTimeSchema implements CategorizedTestCase {
 
   @Override
   public void testAllTransport() throws Exception {
-
+    testDateTimeSchema();
   }
 
   private void testDateTimeSchema() {
diff --git a/foundations/foundation-common/pom.xml b/foundations/foundation-common/pom.xml
index 16f1792..f411ce9 100644
--- a/foundations/foundation-common/pom.xml
+++ b/foundations/foundation-common/pom.xml
@@ -91,7 +91,14 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>foundation-test-scaffolding</artifactId>
     </dependency>
-
+    <dependency>
+      <groupId>com.fasterxml.jackson.datatype</groupId>
+      <artifactId>jackson-datatype-jsr310</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.vertx</groupId>
+      <artifactId>vertx-core</artifactId>
+    </dependency>
     <!-- some unit test case depend on log4j1, so set this dependency after test scope area -->
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/AbstractRestObjectMapper.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AbstractRestObjectMapper.java
similarity index 95%
rename from common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/AbstractRestObjectMapper.java
rename to foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AbstractRestObjectMapper.java
index 0ca5fa6..0a24696 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/AbstractRestObjectMapper.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AbstractRestObjectMapper.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.common.rest.codec;
+package org.apache.servicecomb.foundation.common.utils;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/JsonUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/JsonUtils.java
index fb81239..ed1d1ad 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/JsonUtils.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/JsonUtils.java
@@ -22,25 +22,14 @@ import java.io.InputStream;
 import java.io.OutputStream;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
 public final class JsonUtils {
   public static final ObjectMapper OBJ_MAPPER;
 
   static {
-    OBJ_MAPPER = new ObjectMapper();
-    OBJ_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-    OBJ_MAPPER.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
-
-//    SimpleModule partDeserializeModule = new SimpleModule("partDeserializeModule",
-//        new Version(0, 0, 1, null, "javax.servlet", "javax.servlet-api")
-//    );
-//    partDeserializeModule.addSerializer(Part.class, new JavaxServletPartSerializer());
-//    partDeserializeModule.addDeserializer(Part.class, new JavaxServletPartDeserializer());
-//    OBJ_MAPPER.registerModule(partDeserializeModule);
+    OBJ_MAPPER = new RestObjectMapper();
   }
 
   private JsonUtils() {
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapper.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
similarity index 98%
rename from common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapper.java
rename to foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
index 924871e..cd2ceb2 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestObjectMapper.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.common.rest.codec;
+package org.apache.servicecomb.foundation.common.utils;
 
 import java.io.IOException;
 import java.text.FieldPosition;
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/Int64ReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/Int64ReadSchemas.java
index 3a73f22..0befd0a 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/Int64ReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/Int64ReadSchemas.java
@@ -17,11 +17,13 @@
 package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.scalar;
 
 import java.io.IOException;
+import java.time.Instant;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.util.Date;
 
 import org.apache.servicecomb.foundation.common.utils.bean.LongSetter;
-import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 import org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.scalar.AbstractScalarReadSchemas.AbstractLongSchema;
 
@@ -38,14 +40,7 @@ public class Int64ReadSchemas {
       return new LongFiledLongPrimitiveSchema<>(protoField, propertyDescriptor);
     }
 
-    if (Long.class.equals(javaType.getRawClass()) || javaType.isJavaLangObject()
-        || Date.class.equals(javaType.getRawClass())
-        || LocalDate.class.equals(javaType.getRawClass())) {
-      return new Int64Schema<>(protoField, propertyDescriptor);
-    }
-
-    ProtoUtils.throwNotSupportMerge(protoField, propertyDescriptor.getJavaType());
-    return null;
+    return new Int64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class Int64Schema<T> extends AbstractLongSchema<T> {
@@ -60,6 +55,8 @@ public class Int64ReadSchemas {
         setter.set(message, new Date(value));
       } else if (LocalDate.class.equals(javaType.getRawClass())) {
         setter.set(message, LocalDate.ofEpochDay(value));
+      } else if (LocalDateTime.class.equals(javaType.getRawClass())) {
+        setter.set(message, LocalDateTime.ofInstant(Instant.ofEpochMilli(value), ZoneOffset.UTC));
       } else {
         setter.set(message, value);
       }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
index ed72737..1d0cf4d 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
@@ -18,6 +18,8 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 
 import java.io.IOException;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.time.temporal.ChronoField;
 import java.util.Date;
 
@@ -36,10 +38,6 @@ public class Int64WriteSchemas {
       return new Int64PrimitiveSchema<>(protoField, propertyDescriptor);
     }
 
-    if (Long.class.equals(propertyDescriptor.getJavaType().getRawClass())) {
-      return new Int64Schema<>(protoField, propertyDescriptor);
-    }
-
     return new Int64Schema<>(protoField, propertyDescriptor);
   }
 
@@ -82,6 +80,12 @@ public class Int64WriteSchemas {
         return;
       }
 
+      if (value instanceof LocalDateTime) {
+        long parsedValue = ((LocalDateTime) value).toInstant(ZoneOffset.UTC).toEpochMilli();
+        output.writeScalarInt64(tag, tagSize, parsedValue);
+        return;
+      }
+
       ProtoUtils.throwNotSupportWrite(protoField, value);
     }
   }