Skip to content

Commit 87f15a1

Browse files
committed
fix<data converter>: fail open on exception not found in default data converter
Signed-off-by: Shijie Sheng <liouvetren@gmail.com>
1 parent e0704d1 commit 87f15a1

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/main/java/com/uber/cadence/converter/CustomThrowableTypeAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public T read(JsonReader jsonReader) throws IOException {
137137
try {
138138
classType = Class.forName(className);
139139
} catch (ClassNotFoundException e) {
140-
throw new IOException("Cannot deserialize " + className + " exception", e);
140+
return null;
141141
}
142142
if (!Throwable.class.isAssignableFrom(classType)) {
143143
throw new IOException("Expected type that extends Throwable: " + className);

src/test/java/com/uber/cadence/converter/JsonDataConverterTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,4 +270,21 @@ public void testException() {
270270

271271
assertEquals("root exception", causeFromConverted.getSuppressed()[0].getMessage());
272272
}
273+
274+
@Test
275+
public void testExceptionNotFound() {
276+
String convertedString =
277+
"{\n"
278+
+ " \"detailMessage\": \"application exception\",\n"
279+
+ " \"stackTrace\": \"com.uber.cadence.converter.JsonDataConverterTest.testExceptionNotFound(JsonDataConverterTest.java:282)\\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\njava.lang.reflect.Method.invoke(Method.java:498)\\norg.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\\norg.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\\norg.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\\norg.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\\norg.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\\norg.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\\norg.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\\norg.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\\norg.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\\norg.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\\norg.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\\norg.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\\norg.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\\norg.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\\norg.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\\norg.junit.runners.ParentRunner.run(ParentRunner.java:413)\\norg.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)\\norg.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)\\norg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:520)\\norg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:748)\\norg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:443)\\norg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:211)\\n\",\n"
280+
+ " \"suppressedExceptions\": [],\n"
281+
+ " \"class\": \"com.uber.cadence.converter.ExceptionNotFound\"\n"
282+
+ "}";
283+
RuntimeException fromConverted =
284+
converter.fromData(
285+
convertedString.getBytes(StandardCharsets.UTF_8),
286+
RuntimeException.class,
287+
RuntimeException.class);
288+
assertNull(fromConverted);
289+
}
273290
}

0 commit comments

Comments
 (0)