This is an automated email from the ASF dual-hosted git repository.

crazyhzm pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 168b657807 fix SerializationException (#13000)
168b657807 is described below

commit 168b6578077f232c91d1ddec965a505eff84770a
Author: suncairong163 <[email protected]>
AuthorDate: Mon Sep 4 12:19:49 2023 +0800

    fix SerializationException (#13000)
---
 .../dubbo/common/constants/CommonConstants.java    |  2 -
 .../rest/extension/resteasy/ResteasyContext.java   |  4 +-
 .../ResteasyRequestContainerFilterAdapter.java     |  5 +--
 .../ResteasyResponseContainerFilterAdapter.java    |  2 +-
 .../ResteasyWriterInterceptorAdapter.java          |  5 +--
 .../rest/filter/ServiceInvokeRestFilter.java       | 24 ++++++-----
 .../rest/filter/context/FilterContext.java         |  4 ++
 .../rest/filter/context/RestFilterContext.java     | 23 +++++++++++
 .../protocol/rest/handler/NettyHttpHandler.java    | 14 +++----
 .../rpc/protocol/rest/JaxrsRestProtocolTest.java   | 23 ++++++++++-
 .../rest/filter/TraceRequestAndResponseFilter.java | 47 ++++++++++++++++++++++
 11 files changed, 122 insertions(+), 31 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index 09f7d146c7..03b93bbce3 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -643,7 +643,5 @@ public interface CommonConstants {
 
     String DUBBO_PACKABLE_METHOD_FACTORY = "dubbo.application.parameters." + 
PACKABLE_METHOD_FACTORY_KEY;
 
-    String RESTEASY_NETTY_HTTP_REQUEST_ATTRIBUTE_KEY = 
"resteasyNettyHttpRequest";
-
     String DUBBO_MANUAL_REGISTER_KEY = "dubbo.application.manual-register";
 }
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java
index 002e2e993b..2134381842 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java
@@ -160,9 +160,9 @@ public interface ResteasyContext {
         }
     }
 
-    default DubboContainerResponseContextImpl 
createContainerResponseContext(RequestFacade request, HttpResponse 
httpResponse, BuiltResponse jaxrsResponse, ContainerResponseFilter[] 
responseFilters) {
+    default DubboContainerResponseContextImpl 
createContainerResponseContext(Object originRequest, RequestFacade request, 
HttpResponse httpResponse, BuiltResponse jaxrsResponse, 
ContainerResponseFilter[] responseFilters) {
 
-        NettyHttpRequest nettyHttpRequest = createNettyHttpRequest(request);
+        NettyHttpRequest nettyHttpRequest = originRequest == null ? 
createNettyHttpRequest(request) : (NettyHttpRequest) originRequest;
 
         ResponseContainerRequestContext requestContext = new 
ResponseContainerRequestContext(nettyHttpRequest);
         DubboContainerResponseContextImpl responseContext = new 
DubboContainerResponseContextImpl(nettyHttpRequest, httpResponse, jaxrsResponse,
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
index 5843c69945..851da89a2f 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
@@ -18,7 +18,6 @@ package 
org.apache.dubbo.rpc.protocol.rest.extension.resteasy.filter;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.protocol.rest.deploy.ServiceDeployer;
 import org.apache.dubbo.rpc.protocol.rest.extension.resteasy.ResteasyContext;
 import org.apache.dubbo.rpc.protocol.rest.filter.RestRequestFilter;
@@ -30,7 +29,6 @@ import org.jboss.resteasy.specimpl.BuiltResponse;
 import javax.ws.rs.container.ContainerRequestFilter;
 import java.util.List;
 
-import static 
org.apache.dubbo.common.constants.CommonConstants.RESTEASY_NETTY_HTTP_REQUEST_ATTRIBUTE_KEY;
 
 
 @Activate(value = "resteasy", onClass = 
{"javax.ws.rs.container.ContainerRequestFilter", 
"org.jboss.resteasy.plugins.server.netty.NettyHttpRequest", 
"org.jboss.resteasy.plugins.server.netty.NettyHttpResponse"}, order = 
Integer.MAX_VALUE - 1)
@@ -55,7 +53,8 @@ public class ResteasyRequestContainerFilterAdapter implements 
RestRequestFilter,
 
         DubboPreMatchContainerRequestContext containerRequestContext = 
convertHttpRequestToContainerRequestContext(requestFacade, 
containerRequestFilters.toArray(new ContainerRequestFilter[0]));
 
-        
RpcContext.getServiceContext().setObjectAttachment(RESTEASY_NETTY_HTTP_REQUEST_ATTRIBUTE_KEY,
 containerRequestContext.getHttpRequest());
+        // set resteasy request for save user`s custom  request attribute
+        
restFilterContext.setOriginRequest(containerRequestContext.getHttpRequest());
 
         try {
             BuiltResponse restResponse = containerRequestContext.filter();
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyResponseContainerFilterAdapter.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyResponseContainerFilterAdapter.java
index c6af847ece..89ea8a6e21 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyResponseContainerFilterAdapter.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyResponseContainerFilterAdapter.java
@@ -53,7 +53,7 @@ public class ResteasyResponseContainerFilterAdapter 
implements RestResponseFilte
         DubboBuiltResponse dubboBuiltResponse = new 
DubboBuiltResponse(response.getResponseBody(), response.getStatus(), 
response.getEntityClass());
         // NettyHttpResponse wrapper
         HttpResponse httpResponse = new ResteasyNettyHttpResponse(response);
-        DubboContainerResponseContextImpl containerResponseContext = 
createContainerResponseContext(requestFacade, httpResponse, dubboBuiltResponse, 
containerRequestFilters.toArray(new ContainerResponseFilter[0]));
+        DubboContainerResponseContextImpl containerResponseContext = 
createContainerResponseContext(restFilterContext.getOriginRequest(),requestFacade,
 httpResponse, dubboBuiltResponse, containerRequestFilters.toArray(new 
ContainerResponseFilter[0]));
         containerResponseContext.filter();
 
         // user reset entity
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyWriterInterceptorAdapter.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyWriterInterceptorAdapter.java
index fbde93b39f..60d7b63eff 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyWriterInterceptorAdapter.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyWriterInterceptorAdapter.java
@@ -18,7 +18,6 @@ package 
org.apache.dubbo.rpc.protocol.rest.extension.resteasy.intercept;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.RpcInvocation;
 import org.apache.dubbo.rpc.protocol.rest.RestHeaderEnum;
 import org.apache.dubbo.rpc.protocol.rest.deploy.ServiceDeployer;
@@ -41,8 +40,6 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.List;
 
-import static 
org.apache.dubbo.common.constants.CommonConstants.RESTEASY_NETTY_HTTP_REQUEST_ATTRIBUTE_KEY;
-
 @Activate(value = "resteasy", onClass = 
{"javax.ws.rs.ext.WriterInterceptorContext", 
"org.jboss.resteasy.plugins.server.netty.NettyHttpRequest", 
"org.jboss.resteasy.plugins.server.netty.NettyHttpResponse"})
 public class ResteasyWriterInterceptorAdapter implements 
RestResponseInterceptor, ResteasyContext {
 
@@ -67,7 +64,7 @@ public class ResteasyWriterInterceptorAdapter implements 
RestResponseInterceptor
             return;
         }
 
-        NettyHttpRequest nettyHttpRequest = (NettyHttpRequest) 
RpcContext.getServiceContext().getObjectAttachment(RESTEASY_NETTY_HTTP_REQUEST_ATTRIBUTE_KEY);
+        NettyHttpRequest nettyHttpRequest = (NettyHttpRequest) 
restResponseInterceptor.getOriginRequest();
 
         HttpRequest restRequest = nettyHttpRequest == null ? 
createNettyHttpRequest(request) : nettyHttpRequest;
 
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
index 404f8edd5a..2e97493c0e 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
@@ -63,7 +63,12 @@ public class ServiceInvokeRestFilter implements 
RestRequestFilter {
 
         FullHttpRequest nettyHttpRequest = nettyRequestFacade.getRequest();
 
-        doHandler(nettyHttpRequest, restFilterContext.getResponse(), 
restFilterContext.getRequestFacade(), restFilterContext.getUrl(), 
restFilterContext.getServiceDeployer());
+        doHandler(nettyHttpRequest,
+            restFilterContext.getResponse(),
+            restFilterContext.getRequestFacade(),
+            restFilterContext.getUrl(),
+            restFilterContext.getOriginRequest(),
+            restFilterContext.getServiceDeployer());
 
     }
 
@@ -72,6 +77,7 @@ public class ServiceInvokeRestFilter implements 
RestRequestFilter {
                            NettyHttpResponse nettyHttpResponse,
                            RequestFacade request,
                            URL url,
+                           Object originRequest,// resteasy  request
                            ServiceDeployer serviceDeployer) throws Exception {
         PathMatcher pathMatcher = 
RestRPCInvocationUtil.createPathMatcher(request);
 
@@ -130,8 +136,12 @@ public class ServiceInvokeRestFilter implements 
RestRequestFilter {
         }
 
         try {
+            RestInterceptContext restFilterContext = new 
RestInterceptContext(url, request, nettyHttpResponse, serviceDeployer, 
result.getValue(), rpcInvocation);
+            // set filter request
+            restFilterContext.setOriginRequest(originRequest);
+
             // invoke the intercept chain before Result  write to  response
-            executeResponseIntercepts(url, request, nettyHttpResponse, 
result.getValue(), rpcInvocation, serviceDeployer);
+            executeResponseIntercepts(restFilterContext);
         } catch (Exception exception) {
             logger.error("", exception.getMessage(), "", "dubbo rest protocol 
execute ResponseIntercepts error", exception);
             throw exception;
@@ -215,17 +225,11 @@ public class ServiceInvokeRestFilter implements 
RestRequestFilter {
     /**
      * execute response Intercepts
      *
-     * @param url
-     * @param request
-     * @param nettyHttpResponse
-     * @param result
-     * @param rpcInvocation
-     * @param serviceDeployer
+     * @param restFilterContext
      * @throws Exception
      */
-    public void executeResponseIntercepts(URL url, RequestFacade request, 
NettyHttpResponse nettyHttpResponse, Object result, RpcInvocation 
rpcInvocation, ServiceDeployer serviceDeployer) throws Exception {
+    public void executeResponseIntercepts(RestInterceptContext 
restFilterContext) throws Exception {
 
-        RestInterceptContext restFilterContext = new RestInterceptContext(url, 
request, nettyHttpResponse, serviceDeployer, result, rpcInvocation);
 
         for (RestResponseInterceptor restResponseInterceptor : 
restResponseInterceptors) {
 
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/FilterContext.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/FilterContext.java
index e64d175529..d40c41e27e 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/FilterContext.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/FilterContext.java
@@ -35,4 +35,8 @@ public interface FilterContext {
     boolean complete();
 
     void setComplete(boolean complete);
+
+     Object getOriginRequest();
+
+    Object getOriginResponse();
 }
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/RestFilterContext.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/RestFilterContext.java
index a563c5e09b..bf2be29d45 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/RestFilterContext.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/context/RestFilterContext.java
@@ -27,6 +27,8 @@ public class RestFilterContext implements FilterContext {
     protected NettyHttpResponse response;
     protected ServiceDeployer serviceDeployer;
     protected boolean completed;
+    protected Object originRequest;
+    protected Object originResponse;
 
     public RestFilterContext(URL url, RequestFacade requestFacade, 
NettyHttpResponse response, ServiceDeployer serviceDeployer) {
         this.url = url;
@@ -64,4 +66,25 @@ public class RestFilterContext implements FilterContext {
     public void setComplete(boolean complete) {
         this.completed = complete;
     }
+
+    @Override
+    public Object getOriginRequest() {
+        return originRequest;
+    }
+
+    @Override
+    public Object getOriginResponse() {
+        return originResponse;
+    }
+
+    public void setOriginRequest(Object originRequest) {
+        if (this.originRequest != null) {
+            return;
+        }
+        this.originRequest = originRequest;
+    }
+
+    public void setOriginResponse(Object originResponse) {
+        this.originResponse = originResponse;
+    }
 }
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
index eb18564f3d..d1c3939c93 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
@@ -32,7 +32,6 @@ import 
org.apache.dubbo.rpc.protocol.rest.filter.ServiceInvokeRestFilter;
 import org.apache.dubbo.rpc.protocol.rest.filter.context.RestFilterContext;
 import org.apache.dubbo.rpc.protocol.rest.netty.NettyHttpResponse;
 import org.apache.dubbo.rpc.protocol.rest.request.NettyRequestFacade;
-import org.apache.dubbo.rpc.protocol.rest.request.RequestFacade;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -75,11 +74,12 @@ public class NettyHttpHandler implements 
HttpHandler<NettyRequestFacade, NettyHt
 
         Object nettyHttpRequest = requestFacade.getRequest();
 
+        RestFilterContext restFilterContext = new RestFilterContext(url, 
requestFacade, nettyHttpResponse, serviceDeployer);
 
         try {
 
             // first request filter
-            executeFilters(url, requestFacade, nettyHttpResponse, 
serviceDeployer, restRequestFilters);
+            executeFilters(restFilterContext, restRequestFilters);
 
         } catch (PathNoFoundException pathNoFoundException) {
             logger.error("", pathNoFoundException.getMessage(), "", "dubbo 
rest protocol provider path   no found ,raw request is :" + nettyHttpRequest, 
pathNoFoundException);
@@ -98,7 +98,7 @@ public class NettyHttpHandler implements 
HttpHandler<NettyRequestFacade, NettyHt
 
         // second response filter
         try {
-            executeFilters(url, requestFacade, nettyHttpResponse, 
serviceDeployer, restResponseFilters);
+            executeFilters(restFilterContext, restResponseFilters);
         } catch (Throwable throwable) {
             logger.error("", throwable.getMessage(), "", "dubbo rest protocol 
provider error ,and raw request is  " + nettyHttpRequest, throwable);
             nettyHttpResponse.sendError(500, "dubbo rest invoke Internal 
error, message is " + throwable.getMessage() + " ,and exception type is : " + 
throwable.getClass()
@@ -111,13 +111,11 @@ public class NettyHttpHandler implements 
HttpHandler<NettyRequestFacade, NettyHt
     /**
      * execute rest filters
      *
-     * @param url
-     * @param requestFacade
-     * @param nettyHttpResponse
+     * @param restFilterContext
+     * @param restFilters
      * @throws Exception
      */
-    public void executeFilters(URL url, RequestFacade requestFacade, 
NettyHttpResponse nettyHttpResponse, ServiceDeployer serviceDeployer, 
List<RestFilter> restFilters) throws Exception {
-        RestFilterContext restFilterContext = new RestFilterContext(url, 
requestFacade, nettyHttpResponse, serviceDeployer);
+    public void executeFilters(RestFilterContext restFilterContext, 
List<RestFilter> restFilters) throws Exception {
 
         for (RestFilter restFilter : restFilters) {
             restFilter.filter(restFilterContext);
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/JaxrsRestProtocolTest.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/JaxrsRestProtocolTest.java
index 080e92a0e0..3f0760bd6e 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/JaxrsRestProtocolTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/JaxrsRestProtocolTest.java
@@ -43,6 +43,7 @@ import 
org.apache.dubbo.rpc.protocol.rest.exception.ResteasyExceptionMapper;
 import org.apache.dubbo.rpc.protocol.rest.exception.mapper.ExceptionHandler;
 import org.apache.dubbo.rpc.protocol.rest.exception.mapper.ExceptionMapper;
 
+import org.apache.dubbo.rpc.protocol.rest.filter.TraceRequestAndResponseFilter;
 import org.apache.dubbo.rpc.protocol.rest.rest.AnotherUserRestService;
 import org.apache.dubbo.rpc.protocol.rest.rest.AnotherUserRestServiceImpl;
 import org.apache.dubbo.rpc.protocol.rest.rest.HttpMethodService;
@@ -753,7 +754,7 @@ class JaxrsRestProtocolTest {
 
             URL url = this.registerProvider(exportUrl, server, 
DemoService.class);
 
-            URL nettyUrl = 
url.addParameter(org.apache.dubbo.remoting.Constants.PAYLOAD_KEY,  1024);
+            URL nettyUrl = 
url.addParameter(org.apache.dubbo.remoting.Constants.PAYLOAD_KEY, 1024);
 
             Exporter<DemoService> exporter = 
protocol.export(proxy.getInvoker(server, DemoService.class, nettyUrl));
 
@@ -773,6 +774,26 @@ class JaxrsRestProtocolTest {
 
     }
 
+
+    @Test
+    void testRequestAndResponseFilter() {
+        DemoService server = new DemoServiceImpl();
+
+        URL exportUrl = URL.valueOf("rest://127.0.0.1:" + availablePort + 
"/rest?interface=org.apache.dubbo.rpc.protocol.rest.DemoService&extension="
+            + TraceRequestAndResponseFilter.class.getName());
+
+        URL nettyUrl = this.registerProvider(exportUrl, server, 
DemoService.class);
+
+        Exporter<DemoService> exporter = 
protocol.export(proxy.getInvoker(server, DemoService.class, nettyUrl));
+
+        DemoService demoService = 
this.proxy.getProxy(protocol.refer(DemoService.class, nettyUrl));
+
+
+        Assertions.assertEquals("header-result", 
demoService.sayHello("hello"));
+        exporter.unexport();
+    }
+
+
     private URL registerProvider(URL url, Object impl, Class<?> 
interfaceClass) {
         ServiceDescriptor serviceDescriptor = 
repository.registerService(interfaceClass);
         ProviderModel providerModel = new ProviderModel(
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/filter/TraceRequestAndResponseFilter.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/filter/TraceRequestAndResponseFilter.java
new file mode 100644
index 0000000000..b6ca0f1e9f
--- /dev/null
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/filter/TraceRequestAndResponseFilter.java
@@ -0,0 +1,47 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.dubbo.rpc.protocol.rest.filter;
+
+import javax.annotation.Priority;
+import javax.ws.rs.Priorities;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import java.io.IOException;
+
+@Priority(Priorities.USER)
+public class TraceRequestAndResponseFilter implements ContainerRequestFilter, 
ContainerResponseFilter {
+
+    @Override
+    public void filter(ContainerRequestContext requestContext) throws 
IOException {
+
+        requestContext.getHeaders().add("test-response","header-result");
+    }
+
+    @Override
+    public void filter(ContainerRequestContext containerRequestContext, 
ContainerResponseContext containerResponseContext) throws
+
+        IOException {
+
+        String headerString = 
containerRequestContext.getHeaderString("test-response");
+        containerResponseContext.setEntity(headerString);
+
+    }
+}

Reply via email to