From 72105eb5f4673e95a73c9e7cce6911c74dd8e732 Mon Sep 17 00:00:00 2001 From: szr <1171140156@qq.com> Date: Fri, 3 Jan 2025 18:51:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=94=E5=9B=9Econtext=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rpc/tars/TarsClientFilterChain.java | 1 + .../qq/tars/rpc/protocol/tars/TarsCodec.java | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/qq/tars/client/rpc/tars/TarsClientFilterChain.java b/core/src/main/java/com/qq/tars/client/rpc/tars/TarsClientFilterChain.java index 4b594a6d..63cff682 100644 --- a/core/src/main/java/com/qq/tars/client/rpc/tars/TarsClientFilterChain.java +++ b/core/src/main/java/com/qq/tars/client/rpc/tars/TarsClientFilterChain.java @@ -47,6 +47,7 @@ protected void doRealInvoke(Request request, Response response) throws Throwable BeanAccessor.setBeanValue(tarsServantResponse, "result", result.getResult()); BeanAccessor.setBeanValue(tarsServantResponse, "ret", result.getRet()); BeanAccessor.setBeanValue(tarsServantResponse, "remark", result.getRemark()); + BeanAccessor.setBeanValue(tarsServantResponse, "context", result.getContext()); } catch (Exception e) { BeanAccessor.setBeanValue(tarsServantResponse, "cause", e); throw e; diff --git a/core/src/main/java/com/qq/tars/rpc/protocol/tars/TarsCodec.java b/core/src/main/java/com/qq/tars/rpc/protocol/tars/TarsCodec.java index ddf8dbc6..2a329620 100644 --- a/core/src/main/java/com/qq/tars/rpc/protocol/tars/TarsCodec.java +++ b/core/src/main/java/com/qq/tars/rpc/protocol/tars/TarsCodec.java @@ -589,15 +589,20 @@ public void decodeResponseBody(ServantResponse resp) throws ProtocolException { response.setResult(results[i++]); } + response.setContext((HashMap) is.read(TarsHelper.STAMP_MAP, 9, false)); List list = methodInfo.getParametersList(); for (TarsMethodParameterInfo info : list) { - if (!TarsHelper.isHolder(info.getAnnotations())) { - continue; - } - try { - TarsHelper.setHolderValue(request.getMethodParameters()[info.getOrder() - 1], results[i++]); - } catch (Exception e) { - throw new ProtocolException(e); + if (TarsHelper.isHolder(info.getAnnotations())) { + try { + TarsHelper.setHolderValue(request.getMethodParameters()[info.getOrder() - 1], results[i++]); + } catch (Exception e) { + throw new ProtocolException(e); + } + } else if (TarsHelper.isContext(info.getAnnotations()) && response.getContext() != null) { + Map context = (HashMap) request.getMethodParameters()[info.getOrder() - 1]; + if (context != null) { + context.putAll(response.getContext()); + } } } response.setStatus((HashMap) is.read(TarsHelper.STAMP_MAP, 7, false));