You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by sb...@apache.org on 2014/03/31 22:33:33 UTC

git commit: attempting to fix jackson date deserialization

Repository: incubator-streams
Updated Branches:
  refs/heads/springcleaning 9edf1766f -> 37480ea9d


attempting to fix jackson date deserialization


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/37480ea9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/37480ea9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/37480ea9

Branch: refs/heads/springcleaning
Commit: 37480ea9d32ed2f79527295070f8e2388ba11192
Parents: 9edf176
Author: sblackmon <sb...@w2odigital.com>
Authored: Mon Mar 31 15:32:46 2014 -0500
Committer: sblackmon <sb...@w2odigital.com>
Committed: Mon Mar 31 15:32:46 2014 -0500

----------------------------------------------------------------------
 .../jackson/StreamsDateTimeDeserializer.java    | 56 +++++++++++-----
 .../jackson/StreamsDateTimeSerializer.java      |  5 +-
 .../streams/jackson/StreamsJacksonMapper.java   |  4 ++
 .../data/data/util/DateTimeSerDeTest.java       | 70 ++++++++++++++++++++
 4 files changed, 116 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/37480ea9/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
index f189aa9..646d948 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
@@ -4,13 +4,14 @@ import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
 import org.apache.streams.exceptions.ActivityDeserializerException;
 import org.apache.streams.exceptions.ActivitySerializerException;
 import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
@@ -21,8 +22,6 @@ import java.io.IOException;
  */
 public class StreamsDateTimeDeserializer extends StdDeserializer<DateTime> {
 
-    public static final DateTimeFormatter ACTIVITY_FORMAT = ISODateTimeFormat.basicDateTime();
-
     protected StreamsDateTimeDeserializer(Class<DateTime> dateTimeClass) {
         super(dateTimeClass);
     }
@@ -31,21 +30,46 @@ public class StreamsDateTimeDeserializer extends StdDeserializer<DateTime> {
     public DateTime deserialize(JsonParser jpar, DeserializationContext context) throws IOException {
         DateTime result = null;
 
-        try {
-            result = ACTIVITY_FORMAT.parseDateTime(jpar.getText());
-            return result;
-        } catch( Exception e ) {}
+        ObjectMapper basicMapper = new ObjectMapper();
+        basicMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+
+        System.out.println(jpar.getCurrentToken());
+
+        if( jpar.getCurrentToken().isStructStart() ) {
+
+            System.out.println(jpar.getCurrentToken());
 
-        try {
-            result = ACTIVITY_FORMAT.parseDateTime(jpar.getValueAsString());
-            return result;
-        } catch( Exception e ) {}
+            try {
+                JsonNode node = jpar.readValueAsTree();
+                // now what?
+                return result;
+            } catch( Exception e ) {
+                e.printStackTrace();
+            }
+        } else if( jpar.getCurrentToken().isScalarValue() ) {
+            try {
+                result = StreamsJacksonMapper.ACTIVITY_FORMAT.parseDateTime(jpar.getText());
+                return result;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } else if( jpar.getCurrentToken().isNumeric() ) {
+            try {
+                result = new DateTime(jpar.getLongValue());
+                return result;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
 
+//        try {
+//            result = ACTIVITY_FORMAT.parseDateTime(jpar.getValueAsString());
+//            return result;
+//        } catch( Exception e ) {
+//            e.printStackTrace();
+//        }
 
-        try {
-            result = jpar.readValueAs(DateTime.class);
-            return result;
-        } catch( Exception e ) {}
+//
 
         if( result == null )
             throw new IOException(" could not deserialize " + jpar.toString());

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/37480ea9/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
index 94cf6c3..08a3caf 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
@@ -15,8 +16,6 @@ import java.io.IOException;
  */
 public class StreamsDateTimeSerializer extends StdSerializer<DateTime> {
 
-    public static final DateTimeFormatter ACTIVITY_FORMAT = ISODateTimeFormat.basicDateTime();
-
     protected StreamsDateTimeSerializer(Class<DateTime> dateTimeClass) {
         super(dateTimeClass);
     }
@@ -24,7 +23,7 @@ public class StreamsDateTimeSerializer extends StdSerializer<DateTime> {
     @Override
     public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
         long timestamp = value.getMillis();
-        String result = ACTIVITY_FORMAT.print(timestamp);
+        String result = StreamsJacksonMapper.ACTIVITY_FORMAT.print(timestamp);
         jgen.writeString(result);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/37480ea9/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
index 7b1c41e..356f769 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
@@ -10,6 +10,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
 
 import java.io.IOException;
 
@@ -18,6 +20,8 @@ import java.io.IOException;
  */
 public class StreamsJacksonMapper extends ObjectMapper {
 
+    public static final DateTimeFormatter ACTIVITY_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
     private static final StreamsJacksonMapper INSTANCE = new StreamsJacksonMapper();
 
     public static StreamsJacksonMapper getInstance(){

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/37480ea9/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java b/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
new file mode 100644
index 0000000..0b45413
--- /dev/null
+++ b/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
@@ -0,0 +1,70 @@
+package org.apache.streams.data.data.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.joda.time.DateTime;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Created by sblackmon on 3/31/14.
+ */
+public class DateTimeSerDeTest {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(DateTimeSerDeTest.class);
+    private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
+
+    @Test
+    public void testActivityStringSer() {
+        String input = "2013-09-18T20:52:47Z";
+        try {
+            DateTime output = mapper.readValue(input, DateTime.class);
+        } catch (IOException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testJodaJsonDeser() {
+        String input = "{\"year\":2012,\"era\":1,\"dayOfMonth\":17,\"dayOfWeek\":2,\"dayOfYear\":17,\"weekOfWeekyear\":3,\"weekyear\":2012,\"monthOfYear\":1,\"yearOfEra\":2012,\"yearOfCentury\":12,\"centuryOfEra\":20,\"millisOfSecond\":0,\"millisOfDay\":69706000,\"secondOfMinute\":46,\"secondOfDay\":69706,\"minuteOfHour\":21,\"minuteOfDay\":1161,\"hourOfDay\":19,\"zone\":{\"fixed\":false,\"uncachedZone\":{\"cachable\":true,\"fixed\":false,\"id\":\"America/Los_Angeles\"},\"id\":\"America/Los_Angeles\"},\"millis\":1326856906000,\"chronology\":{\"zone\":{\"fixed\":false,\"uncachedZone\":{\"cachable\":true,\"fixed\":false,\"id\":\"America/Los_Angeles\"},\"id\":\"America/Los_Angeles\"}},\"afterNow\":false,\"beforeNow\":true,\"equalNow\":false}";
+        try {
+            DateTime output = mapper.readValue(input, DateTime.class);
+        } catch (IOException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testMillisDeser() {
+        Long input = 1326856906000l;
+        try {
+            DateTime output = mapper.readValue(input.toString(), DateTime.class);
+        } catch (IOException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testActivityStringDeser() {
+        String output = "2013-09-18T20:52:47Z";
+        DateTime input = StreamsJacksonMapper.ACTIVITY_FORMAT.parseDateTime(output);
+        try {
+            String result = mapper.writeValueAsString(input);
+            assertEquals(result, output);
+        } catch (IOException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+}