Skip to content

Commit 2bc1cbd

Browse files
committed
apply IO error handling pattern to DefaultInvocationSerializer
1 parent 64cd287 commit 2bc1cbd

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

transactionoutbox-core/src/main/java/com/gruelbox/transactionoutbox/DefaultInvocationSerializer.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
11
package com.gruelbox.transactionoutbox;
22

3-
import com.google.gson.Gson;
4-
import com.google.gson.GsonBuilder;
5-
import com.google.gson.JsonArray;
6-
import com.google.gson.JsonDeserializationContext;
7-
import com.google.gson.JsonDeserializer;
8-
import com.google.gson.JsonElement;
9-
import com.google.gson.JsonObject;
10-
import com.google.gson.JsonParseException;
11-
import com.google.gson.JsonSerializationContext;
12-
import com.google.gson.JsonSerializer;
13-
import com.google.gson.TypeAdapter;
3+
import com.google.gson.*;
144
import com.google.gson.stream.JsonReader;
155
import com.google.gson.stream.JsonToken;
166
import com.google.gson.stream.JsonWriter;
@@ -106,8 +96,12 @@ public void serializeInvocation(Invocation invocation, Writer writer) {
10696
}
10797

10898
@Override
109-
public Invocation deserializeInvocation(Reader reader) {
110-
return gson.fromJson(reader, Invocation.class);
99+
public Invocation deserializeInvocation(Reader reader) throws IOException {
100+
try {
101+
return gson.fromJson(reader, Invocation.class);
102+
} catch (JsonIOException | JsonSyntaxException exception) {
103+
throw new IOException(exception);
104+
}
111105
}
112106

113107
private static final class InvocationJsonSerializer

transactionoutbox-core/src/test/java/com/gruelbox/transactionoutbox/AbstractTestDefaultInvocationSerializer.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.gruelbox.transactionoutbox;
22

3+
import static org.junit.jupiter.api.Assertions.assertThrows;
4+
5+
import java.io.IOException;
36
import java.io.StringReader;
47
import java.io.StringWriter;
8+
import java.io.UncheckedIOException;
59
import java.time.*;
610
import java.time.temporal.ChronoUnit;
711
import java.util.*;
@@ -206,17 +210,27 @@ void testUUIDNull() {
206210
check(new Invocation(CLASS_NAME, METHOD_NAME, primitives, values));
207211
}
208212

213+
@Test
214+
void testDeserializationException() {
215+
assertThrows(
216+
IOException.class, () -> serializer.deserializeInvocation(new StringReader("unparseable")));
217+
}
218+
209219
void check(Invocation invocation) {
210220
Invocation deserialized = serdeser(invocation);
211221
Assertions.assertEquals(deserialized, serdeser(invocation));
212222
Assertions.assertEquals(invocation, deserialized);
213223
}
214224

215225
Invocation serdeser(Invocation invocation) {
216-
var writer = new StringWriter();
217-
serializer.serializeInvocation(invocation, writer);
218-
log.info("Serialised as: {}", writer);
219-
return serializer.deserializeInvocation(new StringReader(writer.toString()));
226+
try {
227+
var writer = new StringWriter();
228+
serializer.serializeInvocation(invocation, writer);
229+
log.info("Serialised as: {}", writer);
230+
return serializer.deserializeInvocation(new StringReader(writer.toString()));
231+
} catch (IOException e) {
232+
throw new UncheckedIOException(e);
233+
}
220234
}
221235

222236
enum ExampleCustomEnum {

0 commit comments

Comments
 (0)