Skip to content

Commit 2a2d0d5

Browse files
authored
Merge pull request #79 from uber/dataconverter
Add sample of Cadence data converter
2 parents f95c716 + f9bcf65 commit 2a2d0d5

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.uber.cadence.samples.spring.cadence;
2+
3+
import com.google.gson.TypeAdapterFactory;
4+
import com.uber.cadence.converter.JsonDataConverter;
5+
6+
import java.time.ZonedDateTime;
7+
import java.util.ServiceLoader;
8+
9+
// This singleton JsonDataConverter should be universally used in all components that require a
10+
// JsonDataConverter. Specifically in Cadence's case, WorkflowClient uses Json serialize function
11+
// and Worker uses deserialize function, therefore they have to match with one another.
12+
public class CadenceDataConverter {
13+
public static JsonDataConverter cadenceJsonDataConverter() {
14+
return new JsonDataConverter(
15+
gsonBuilder -> {
16+
for (TypeAdapterFactory factory : ServiceLoader.load(TypeAdapterFactory.class)) {
17+
gsonBuilder.registerTypeAdapterFactory(factory);
18+
}
19+
return gsonBuilder.registerTypeAdapter(ZonedDateTime.class, new ZonedDatetimeConverter());
20+
});
21+
}
22+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.uber.cadence.samples.spring.cadence;
2+
3+
import com.google.gson.JsonSerializer;
4+
import com.google.gson.JsonDeserializer;
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonSerializationContext;
7+
import com.google.gson.JsonPrimitive;
8+
import com.google.gson.JsonDeserializationContext;
9+
import com.google.gson.JsonParseException;
10+
11+
import java.lang.reflect.Type;
12+
import java.time.ZonedDateTime;
13+
import java.time.format.DateTimeFormatter;
14+
15+
public class ZonedDatetimeConverter implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
16+
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_DATE_TIME;
17+
18+
@Override
19+
public JsonElement serialize(ZonedDateTime src, Type type, JsonSerializationContext jsonSerializationContext) {
20+
return new JsonPrimitive(FORMATTER.format(src));
21+
}
22+
23+
@Override
24+
public ZonedDateTime deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
25+
return FORMATTER.parse(json.getAsString(), ZonedDateTime::from);
26+
}
27+
}

0 commit comments

Comments
 (0)