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);
+
+ }
+}