From 85089b94acf2eef755981a3b7817a4d6fb6c8474 Mon Sep 17 00:00:00 2001 From: neelkanth-kaushik Date: Mon, 18 Aug 2025 22:38:47 +0530 Subject: [PATCH 1/5] Created ISO8601InstantAdapter.java file --- .../analytics/gson/ISO8601InstantAdapter.java | 37 +++++++++++++++++++ .../segment/analytics/gson/Iso8601Utils.java | 7 ++++ .../java/com/segment/analytics/Analytics.java | 3 ++ 3 files changed, 47 insertions(+) create mode 100644 analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java new file mode 100644 index 00000000..4800ffe8 --- /dev/null +++ b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java @@ -0,0 +1,37 @@ +package com.segment.analytics.gson; + +import com.google.gson.*; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.time.Instant; + +/** + * A {@link JsonSerializer} that formats {@link Instant} objects into iso8601 formatted strings, and + * {@link JsonDeserializer} that parses iso8601 formatted strings into {@link Instant} objects. + */ +public class ISO8601InstantAdapter extends TypeAdapter implements JsonSerializer, JsonDeserializer { + @Override + public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(Iso8601Utils.format(src));// ISO 8601 format + } + + @Override + public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + return Instant.parse(json.getAsString()); + } + + @Override + public void write(JsonWriter out, Instant value) throws IOException { + out.value(value == null ? null : value.toString()); + } + + @Override + public Instant read(JsonReader in) throws IOException { + String str = in.nextString(); + return str == null ? null : Instant.parse(str); + } +} \ No newline at end of file diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java index 9504a641..7084e467 100644 --- a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java +++ b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java @@ -16,6 +16,7 @@ package com.segment.analytics.gson; import com.google.gson.JsonParseException; +import java.time.Instant; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -277,4 +278,10 @@ private static int indexOfNonDigit(String string, int offset) { } return string.length(); } + + /** Returns {@code date} formatted as yyyy-MM-ddThh:mm:ss.sssZ */ + static String format(Instant instant) { + // Format the instant + return String.valueOf(instant.getEpochSecond()); + } } diff --git a/analytics/src/main/java/com/segment/analytics/Analytics.java b/analytics/src/main/java/com/segment/analytics/Analytics.java index 81af36c7..9b88de8c 100644 --- a/analytics/src/main/java/com/segment/analytics/Analytics.java +++ b/analytics/src/main/java/com/segment/analytics/Analytics.java @@ -4,11 +4,13 @@ import com.google.gson.GsonBuilder; import com.segment.analytics.gson.AutoValueAdapterFactory; import com.segment.analytics.gson.ISO8601DateAdapter; +import com.segment.analytics.gson.ISO8601InstantAdapter; import com.segment.analytics.http.SegmentService; import com.segment.analytics.internal.AnalyticsClient; import com.segment.analytics.internal.AnalyticsVersion; import com.segment.analytics.messages.Message; import com.segment.analytics.messages.MessageBuilder; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -362,6 +364,7 @@ public Analytics build() { gsonBuilder .registerTypeAdapterFactory(new AutoValueAdapterFactory()) + .registerTypeAdapter(Instant.class, new ISO8601InstantAdapter()) .registerTypeAdapter(Date.class, new ISO8601DateAdapter()); Gson gson = gsonBuilder.create(); From 2de61e14cb3ed94de8f4d725d829f9919e529f00 Mon Sep 17 00:00:00 2001 From: neelkanth-kaushik Date: Tue, 19 Aug 2025 09:31:29 +0530 Subject: [PATCH 2/5] Fixed CI errors --- .../analytics/gson/ISO8601InstantAdapter.java | 40 +++++++++---------- .../segment/analytics/gson/Iso8601Utils.java | 12 +++--- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java index 4800ffe8..54f4e928 100644 --- a/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java +++ b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java @@ -3,7 +3,6 @@ import com.google.gson.*; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; - import java.io.IOException; import java.lang.reflect.Type; import java.time.Instant; @@ -12,26 +11,27 @@ * A {@link JsonSerializer} that formats {@link Instant} objects into iso8601 formatted strings, and * {@link JsonDeserializer} that parses iso8601 formatted strings into {@link Instant} objects. */ -public class ISO8601InstantAdapter extends TypeAdapter implements JsonSerializer, JsonDeserializer { - @Override - public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) { - return new JsonPrimitive(Iso8601Utils.format(src));// ISO 8601 format - } +public class ISO8601InstantAdapter extends TypeAdapter + implements JsonSerializer, JsonDeserializer { + @Override + public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(Iso8601Utils.format(src)); // ISO 8601 format + } - @Override - public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - return Instant.parse(json.getAsString()); - } + @Override + public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + return Instant.parse(json.getAsString()); + } - @Override - public void write(JsonWriter out, Instant value) throws IOException { - out.value(value == null ? null : value.toString()); - } + @Override + public void write(JsonWriter out, Instant value) throws IOException { + out.value(value == null ? null : value.toString()); + } - @Override - public Instant read(JsonReader in) throws IOException { - String str = in.nextString(); - return str == null ? null : Instant.parse(str); - } + @Override + public Instant read(JsonReader in) throws IOException { + String str = in.nextString(); + return str == null ? null : Instant.parse(str); + } } \ No newline at end of file diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java index 7084e467..897a4f0f 100644 --- a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java +++ b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java @@ -279,9 +279,9 @@ private static int indexOfNonDigit(String string, int offset) { return string.length(); } - /** Returns {@code date} formatted as yyyy-MM-ddThh:mm:ss.sssZ */ - static String format(Instant instant) { - // Format the instant - return String.valueOf(instant.getEpochSecond()); - } -} + /** Returns {@code date} formatted as yyyy-MM-ddThh:mm:ss.sssZ */ + static String format(Instant instant) { + // Format the instant + return String.valueOf(instant.getEpochSecond()); + } +} \ No newline at end of file From 3899d3a80640660e142a17b866851245badb7f0e Mon Sep 17 00:00:00 2001 From: neelkanth-kaushik Date: Tue, 19 Aug 2025 09:37:08 +0530 Subject: [PATCH 3/5] Spotless Fix --- .../java/com/segment/analytics/gson/ISO8601InstantAdapter.java | 2 +- .../src/main/java/com/segment/analytics/gson/Iso8601Utils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java index 54f4e928..c21638ad 100644 --- a/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java +++ b/analytics-core/src/main/java/com/segment/analytics/gson/ISO8601InstantAdapter.java @@ -34,4 +34,4 @@ public Instant read(JsonReader in) throws IOException { String str = in.nextString(); return str == null ? null : Instant.parse(str); } -} \ No newline at end of file +} diff --git a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java index 897a4f0f..95ca5286 100644 --- a/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java +++ b/analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java @@ -284,4 +284,4 @@ static String format(Instant instant) { // Format the instant return String.valueOf(instant.getEpochSecond()); } -} \ No newline at end of file +} From 66f6aaaf4b3bfdfb75a1ff235c714e3b3324e582 Mon Sep 17 00:00:00 2001 From: neelkanth-kaushik Date: Tue, 19 Aug 2025 09:43:47 +0530 Subject: [PATCH 4/5] Changed version in pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8d0424e9..22316d4b 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.segment.analytics.java analytics-parent - 3.5.2-SNAPSHOT + 3.5.3-SNAPSHOT pom Analytics for Java (Parent) The hassle-free way to add analytics to your Android app. From 232d32db6b547756b9e5e4f2444daba3675e61ef Mon Sep 17 00:00:00 2001 From: neelkanth-kaushik Date: Tue, 19 Aug 2025 09:46:08 +0530 Subject: [PATCH 5/5] Revert - Changed version in pom.xml because of failing test cases --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 22316d4b..8d0424e9 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.segment.analytics.java analytics-parent - 3.5.3-SNAPSHOT + 3.5.2-SNAPSHOT pom Analytics for Java (Parent) The hassle-free way to add analytics to your Android app.