From 5c273ea08556dd36d4a128cb69e3b5cb45b9b9c7 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 23 May 2019 17:25:16 +0800 Subject: [PATCH] add miss-deleted snippet from #2956 --- .../java/org/apache/dubbo/rpc/AppResponse.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java index 16e938095a58..6657b79b4071 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java @@ -17,6 +17,7 @@ package org.apache.dubbo.rpc; import java.io.Serializable; +import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.function.Function; @@ -64,6 +65,23 @@ public AppResponse(Throwable exception) { @Override public Object recreate() throws Throwable { if (exception != null) { + // fix issue#619 + try { + // get Throwable class + Class clazz = exception.getClass(); + while (!clazz.getName().equals(Throwable.class.getName())) { + clazz = clazz.getSuperclass(); + } + // get stackTrace value + Field stackTraceField = clazz.getDeclaredField("stackTrace"); + stackTraceField.setAccessible(true); + Object stackTrace = stackTraceField.get(exception); + if (stackTrace == null) { + exception.setStackTrace(new StackTraceElement[0]); + } + } catch (Exception e) { + // ignore + } throw exception; } return result;