Skip to content

Commit ff8d0e8

Browse files
committed
use jackson instead of gson
Signed-off-by: wanjunlei <[email protected]>
1 parent 7184e1f commit ff8d0e8

File tree

5 files changed

+106
-63
lines changed

5 files changed

+106
-63
lines changed

functions-framework-api/src/main/java/dev/openfunction/functions/Context.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ public interface Context {
9797
*/
9898
Map<String, Component> getOutputs();
9999

100+
/**
101+
* getStates returns the states of function.
102+
*
103+
* @return states
104+
*/
105+
Map<String, Component> getStates();
106+
100107
/**
101108
* getDaprClient return a dapr client, so that use user
102109
* can call the dapr API directly.

functions-framework-invoker/pom.xml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,23 +72,6 @@
7272
<artifactId>cloudevents-core</artifactId>
7373
<version>${cloudevents.sdk.version}</version>
7474
</dependency>
75-
<dependency>
76-
<groupId>com.google.code.gson</groupId>
77-
<artifactId>gson</artifactId>
78-
<version>2.10.1</version>
79-
</dependency>
80-
<dependency>
81-
<groupId>com.ryanharter.auto.value</groupId>
82-
<artifactId>auto-value-gson</artifactId>
83-
<version>1.3.1</version>
84-
<scope>provided</scope>
85-
</dependency>
86-
<dependency>
87-
<groupId>com.ryanharter.auto.value</groupId>
88-
<artifactId>auto-value-gson-annotations</artifactId>
89-
<version>0.8.0</version>
90-
<scope>provided</scope>
91-
</dependency>
9275
<dependency>
9376
<groupId>com.google.auto.value</groupId>
9477
<artifactId>auto-value</artifactId>

functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/UserContext.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ public Map<String, Component> getOutputs() {
167167
return runtimeContext.getOutputs();
168168
}
169169

170+
@Override
171+
public Map<String, Component> getStates() {
172+
return runtimeContext.getStates();
173+
}
174+
170175
@Override
171176
public DaprClient getDaprClient() {
172177
return daprClient;

functions-framework-invoker/src/main/java/dev/openfunction/invoker/runtime/JsonEventFormat.java

Lines changed: 94 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@
1616

1717
package dev.openfunction.invoker.runtime;
1818

19-
import com.google.gson.Gson;
20-
import com.google.gson.GsonBuilder;
21-
import com.google.gson.JsonElement;
22-
import com.google.gson.JsonObject;
19+
import com.fasterxml.jackson.core.JsonProcessingException;
20+
import com.fasterxml.jackson.databind.JsonNode;
21+
import com.fasterxml.jackson.databind.ObjectMapper;
22+
import com.fasterxml.jackson.databind.node.ObjectNode;
2323
import io.cloudevents.CloudEvent;
2424
import io.cloudevents.CloudEventData;
25+
import io.cloudevents.SpecVersion;
2526
import io.cloudevents.core.data.BytesCloudEventData;
2627
import io.cloudevents.core.format.EventDeserializationException;
2728
import io.cloudevents.core.format.EventFormat;
@@ -32,94 +33,146 @@
3233
import org.jetbrains.annotations.NotNull;
3334

3435
import java.net.URI;
35-
import java.nio.charset.StandardCharsets;
3636
import java.time.OffsetDateTime;
37+
import java.time.format.DateTimeFormatter;
3738
import java.util.HashMap;
39+
import java.util.Iterator;
3840
import java.util.Map;
3941
import java.util.Objects;
4042

4143
public class JsonEventFormat implements EventFormat {
4244

4345
public static final String CONTENT_TYPE = "application/cloudevents+json";
4446

45-
private static final Gson GSON = new GsonBuilder().serializeNulls().create();
47+
public final static String ID = "id";
48+
public final static String SOURCE = "source";
49+
public final static String SPECVERSION = "specversion";
50+
public final static String TYPE = "type";
51+
public final static String TIME = "time";
52+
public final static String SCHEMAURL = "schemaurl";
53+
public final static String DATACONTENTTYPE = "datacontenttype";
54+
public final static String DATASCHEMA = "dataschema";
55+
public final static String SUBJECT = "subject";
56+
public final static String DATA = "data";
57+
public final static String EXTENSIONS = "extensions";
58+
public final static String TRACEPARENT = "traceparent";
59+
public final static String TRACEID = "traceid";
4660

4761
@Override
4862
public byte[] serialize(@NotNull CloudEvent event) throws EventSerializationException {
49-
JsonObject root = GSON.toJsonTree(event).getAsJsonObject();
63+
ObjectMapper objectMapper = new ObjectMapper();
64+
ObjectNode root = objectMapper.createObjectNode();
65+
root.set(SPECVERSION, objectMapper.valueToTree(event.getSpecVersion().toString()));
66+
root.set(ID, objectMapper.valueToTree(event.getId()));
67+
root.set(TYPE, objectMapper.valueToTree(event.getType()));
68+
root.set(SOURCE, objectMapper.valueToTree(event.getSource()));
69+
root.set(SCHEMAURL, objectMapper.valueToTree(event.getDataSchema()));
70+
root.set(DATACONTENTTYPE, objectMapper.valueToTree(event.getDataContentType()));
71+
root.set(SUBJECT, objectMapper.valueToTree(event.getSubject()));
72+
root.set(DATASCHEMA, objectMapper.valueToTree(event.getDataSchema()));
73+
74+
if (event.getTime() != null) {
75+
root.set(TIME, objectMapper.valueToTree(event.getTime().format(DateTimeFormatter.ISO_DATE_TIME)));
76+
}
77+
78+
if (event.getData() != null) {
79+
root.set(DATA, objectMapper.valueToTree(new String(event.getData().toBytes())));
80+
}
81+
82+
ObjectNode extensions = objectMapper.createObjectNode();
5083
for (String key : event.getExtensionNames()) {
51-
root.add(key, GSON.toJsonTree(event.getExtension(key)));
84+
root.set(key, objectMapper.valueToTree(event.getExtension(key)));
85+
extensions.set(key, objectMapper.valueToTree(event.getExtension(key)));
5286
}
87+
root.set(EXTENSIONS, extensions);
5388

54-
if (root.get("traceparent") != null) {
55-
String traceparent = root.get("traceparent").getAsString();
89+
if (root.get(TRACEPARENT) != null) {
90+
String traceparent = root.get(TRACEPARENT).asText();
5691
if (!Objects.equals(traceparent, "")) {
57-
root.add("traceid", GSON.toJsonTree(traceparent));
92+
root.set(TRACEID, objectMapper.valueToTree(traceparent));
5893
}
5994
}
6095

61-
return root.toString().getBytes();
96+
try {
97+
return objectMapper.writeValueAsBytes(root);
98+
} catch (JsonProcessingException e) {
99+
throw new EventSerializationException(e);
100+
}
62101
}
63102

64103
@Override
65104
public CloudEvent deserialize(@NotNull byte[] bytes, @NotNull CloudEventDataMapper<? extends CloudEventData> mapper) throws EventDeserializationException {
66-
67105
try {
68-
JsonObject jsonObject = GSON.fromJson(new String(bytes, StandardCharsets.UTF_8), JsonObject.class);
69-
106+
String specversion = null;
70107
String id = null;
71108
URI source = null;
72109
String type = null;
73110
String datacontenttype = null;
74111
URI schemaurl = null;
112+
URI dataschema = null;
75113
String subject = null;
76114
OffsetDateTime time = null;
77115
BytesCloudEventData data = null;
78116
Map<String, Object> extensions = new HashMap<>();
79-
for (String key : jsonObject.keySet()) {
80-
JsonElement element = jsonObject.get(key);
81-
if (element.isJsonNull()) {
117+
118+
JsonNode root = new ObjectMapper().readTree(bytes);
119+
Iterator<String> fields = root.fieldNames();
120+
while (fields.hasNext()) {
121+
String field = fields.next();
122+
JsonNode node = root.get(field);
123+
if (node.isNull()) {
82124
continue;
83125
}
84126

85-
switch (key) {
86-
case CloudEventV03.ID:
87-
id = element.getAsString();
127+
switch (field) {
128+
case SPECVERSION:
129+
specversion = node.asText();
88130
break;
89-
case CloudEventV03.SOURCE:
90-
source = new URI(element.getAsString());
131+
case ID:
132+
id = node.asText();
91133
break;
92-
case CloudEventV03.TYPE:
93-
type = element.getAsString();
134+
case SOURCE:
135+
source = new URI(node.asText());
94136
break;
95-
case CloudEventV03.DATACONTENTTYPE:
96-
datacontenttype = element.getAsString();
137+
case TYPE:
138+
type = node.asText();
97139
break;
98-
case CloudEventV03.SCHEMAURL:
99-
schemaurl = new URI(element.getAsString());
140+
case DATACONTENTTYPE:
141+
datacontenttype = node.asText();
100142
break;
101-
case CloudEventV1.SUBJECT:
102-
subject = element.getAsString();
143+
case SCHEMAURL:
144+
schemaurl = new URI(node.asText());
103145
break;
104-
case CloudEventV1.TIME:
105-
time = OffsetDateTime.parse(element.getAsString());
146+
case SUBJECT:
147+
subject = node.asText();
106148
break;
107-
case "data":
108-
data = BytesCloudEventData.wrap(element.getAsString().getBytes());
149+
case TIME:
150+
time = OffsetDateTime.parse(node.asText());
109151
break;
110-
case "extensions":
111-
JsonObject extensionsObject= element.getAsJsonObject();
112-
for (String extensionKey : extensionsObject.keySet()) {
113-
extensions.put(extensionKey, extensionsObject.get(extensionKey).getAsString());
152+
case DATASCHEMA:
153+
dataschema = new URI(node.asText());
154+
break;
155+
case DATA:
156+
data = BytesCloudEventData.wrap(node.asText().getBytes());
157+
break;
158+
case EXTENSIONS:
159+
Iterator<String> it = node.fieldNames();
160+
while ( it.hasNext() ) {
161+
String name = it.next();
162+
extensions.put(name, node.get(name));
114163
}
115164
break;
116165
default:
117-
extensions.put(key, element.getAsString());
166+
extensions.put(field, node);
118167
break;
119168
}
120169
}
121170

122-
return new CloudEventV03(id, source, type, time, schemaurl, datacontenttype, subject, data, extensions);
171+
if (Objects.equals(specversion, SpecVersion.V1.toString())) {
172+
return new CloudEventV1(id, source, type, datacontenttype, dataschema, subject,time, data, extensions);
173+
} else {
174+
return new CloudEventV03(id, source, type, time, schemaurl, datacontenttype, subject, data, extensions);
175+
}
123176
} catch (Exception e) {
124177
throw new EventDeserializationException(e);
125178
}

samples/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@
3333
<artifactId>functions-framework-api</artifactId>
3434
<version>1.1.0-SNAPSHOT</version>
3535
</dependency>
36-
<dependency>
37-
<groupId>com.google.code.gson</groupId>
38-
<artifactId>gson</artifactId>
39-
<version>2.10.1</version>
40-
</dependency>
4136
</dependencies>
4237

4338
</project>

0 commit comments

Comments
 (0)