[ https://issues.apache.org/jira/browse/SCB-373?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16400368#comment-16400368 ]
ASF GitHub Bot commented on SCB-373: ------------------------------------ WillemJiang closed pull request #605: SCB-373 bugfix: if locateOperation error, invocation will be null, if… URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/605 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java index 6e6f87631..3932f1b86 100644 --- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java +++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java @@ -73,7 +73,6 @@ protected void findRestOperation(MicroserviceMeta microserviceMeta) { OperationLocator locator = locateOperation(servicePathManager); requestEx.setAttribute(RestConst.PATH_PARAMETERS, locator.getPathVarMap()); - requestEx.setAttribute(RestConst.OPERATION_PARAMETERS, locator.getOperation()); this.restOperationMeta = locator.getOperation(); } @@ -214,8 +213,8 @@ protected void sendResponse(Response response) throws Exception { } responseEx.setStatus(response.getStatusCode(), response.getReasonPhrase()); responseEx.setContentType(produceProcessor.getName() + "; charset=utf-8"); - invocation.getHandlerContext().put(RestConst.INVOCATION_HANDLER_RESPONSE, response); - invocation.getHandlerContext().put(RestConst.INVOCATION_HANDLER_PROCESSOR, produceProcessor); + responseEx.setAttribute(RestConst.INVOCATION_HANDLER_RESPONSE, response); + responseEx.setAttribute(RestConst.INVOCATION_HANDLER_PROCESSOR, produceProcessor); for (HttpServerFilter filter : httpServerFilters) { filter.beforeSendResponse(invocation, responseEx); diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestConst.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestConst.java index aa23137ca..7e45aa8cd 100644 --- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestConst.java +++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestConst.java @@ -34,9 +34,6 @@ private RestConst() { // in HttpServletRequest attribute public static final String PATH_PARAMETERS = "servicecomb-paths"; - //in HttpServletRequest attribute - public static final String OPERATION_PARAMETERS = "servicecomb-operations"; - // in HttpServletRequest attribute public static final String BODY_PARAMETER = "servicecomb-body"; diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java index 830e33b3e..b690cbf66 100644 --- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java +++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java @@ -23,6 +23,7 @@ import org.apache.servicecomb.common.rest.definition.RestOperationMeta; import org.apache.servicecomb.common.rest.filter.HttpServerFilter; import org.apache.servicecomb.core.Invocation; +import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx; import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx; import org.apache.servicecomb.foundation.vertx.stream.BufferOutputStream; @@ -41,8 +42,8 @@ public int getOrder() { @Override public Response afterReceiveRequest(Invocation invocation, HttpServletRequestEx requestEx) { - RestOperationMeta restOperationMeta = (RestOperationMeta) requestEx - .getAttribute(RestConst.OPERATION_PARAMETERS); + OperationMeta operationMeta = invocation.getOperationMeta(); + RestOperationMeta restOperationMeta = operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION); Object[] args = RestCodec.restToArgs(requestEx, restOperationMeta); invocation.setSwaggerArguments(args); return null; @@ -50,9 +51,9 @@ public Response afterReceiveRequest(Invocation invocation, HttpServletRequestEx @Override public void beforeSendResponse(Invocation invocation, HttpServletResponseEx responseEx) { - Response response = (Response) invocation.getHandlerContext().get(RestConst.INVOCATION_HANDLER_RESPONSE); - ProduceProcessor produceProcessor = (ProduceProcessor) invocation.getHandlerContext() - .get(RestConst.INVOCATION_HANDLER_PROCESSOR); + Response response = (Response) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE); + ProduceProcessor produceProcessor = + (ProduceProcessor) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_PROCESSOR); Object body = response.getResult(); if (response.isFailed()) { body = ((InvocationException) body).getErrorData(); diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java index 291c7317b..363bfab9f 100644 --- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java +++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java @@ -449,6 +449,18 @@ public void sendResponseStatusAndContentTypeAndHeader(@Mocked Response response) Map<String, Object> result = new HashMap<>(); responseEx = new MockUp<HttpServletResponseEx>() { + private Map<String, Object> attributes = new HashMap<>(); + + @Mock + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Mock + public Object getAttribute(String key) { + return this.attributes.get(key); + } + @Mock void setStatus(int sc, String sm) { result.put("statusCode", sc); @@ -491,6 +503,18 @@ public void testDoSendResponseHeaderNull(@Mocked Response response) throws Excep Headers resultHeaders = new Headers(); responseEx = new MockUp<HttpServletResponseEx>() { + private Map<String, Object> attributes = new HashMap<>(); + + @Mock + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Mock + public Object getAttribute(String key) { + return this.attributes.get(key); + } + @Mock void addHeader(String name, String value) { resultHeaders.addHeader(name, value); @@ -525,6 +549,18 @@ public void testDoSendResponseHeaderNormal(@Mocked Response response) throws Exc Headers resultHeaders = new Headers(); responseEx = new MockUp<HttpServletResponseEx>() { + private Map<String, Object> attributes = new HashMap<>(); + + @Mock + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Mock + public Object getAttribute(String key) { + return this.attributes.get(key); + } + @Mock void addHeader(String name, String value) { resultHeaders.addHeader(name, value); @@ -551,6 +587,18 @@ public void testDoSendResponseResultOK(@Mocked Response response) throws Excepti Buffer buffer = Buffer.buffer(); responseEx = new MockUp<HttpServletResponseEx>() { + private Map<String, Object> attributes = new HashMap<>(); + + @Mock + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Mock + public Object getAttribute(String key) { + return this.attributes.get(key); + } + @Mock void setBodyBuffer(Buffer bodyBuffer) { buffer.appendBuffer(bodyBuffer); @@ -582,6 +630,18 @@ public void testDoSendResponseResultOKFilter(@Mocked Response response) Buffer buffer = Buffer.buffer(); responseEx = new MockUp<HttpServletResponseEx>() { + private Map<String, Object> attributes = new HashMap<>(); + + @Mock + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Mock + public Object getAttribute(String key) { + return this.attributes.get(key); + } + @Mock void setBodyBuffer(Buffer bodyBuffer) { buffer.appendBuffer(bodyBuffer); diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/AbstractHttpServletResponse.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/AbstractHttpServletResponse.java index 96e509ab2..a09e77380 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/AbstractHttpServletResponse.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/AbstractHttpServletResponse.java @@ -20,13 +20,17 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.ws.rs.core.Response.StatusType; public abstract class AbstractHttpServletResponse extends BodyBufferSupportImpl implements HttpServletResponseEx { + private Map<String, Object> attributes = new HashMap<>(); + @Override public String getCharacterEncoding() { throw new Error("not supported method"); @@ -216,4 +220,14 @@ public String getHeader(String name) { public StatusType getStatusType() { throw new Error("not supported method"); } + + @Override + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Override + public Object getAttribute(String key) { + return this.attributes.get(key); + } } diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/HttpServletResponseEx.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/HttpServletResponseEx.java index 3b9abe908..9749f4b8e 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/HttpServletResponseEx.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/HttpServletResponseEx.java @@ -22,4 +22,8 @@ public interface HttpServletResponseEx extends HttpServletResponse, BodyBufferSupport { StatusType getStatusType(); + + void setAttribute(String key, Object value); + + Object getAttribute(String key); } diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/StandardHttpServletResponseEx.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/StandardHttpServletResponseEx.java index 6bedab69d..c2c140863 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/StandardHttpServletResponseEx.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/StandardHttpServletResponseEx.java @@ -18,6 +18,8 @@ package org.apache.servicecomb.foundation.vertx.http; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; @@ -30,6 +32,8 @@ public class StandardHttpServletResponseEx extends HttpServletResponseWrapper implements HttpServletResponseEx { private BodyBufferSupport bodyBuffer = new BodyBufferSupportImpl(); + private Map<String, Object> attributes = new HashMap<>(); + private StatusType statusType; public StandardHttpServletResponseEx(HttpServletResponse response) { @@ -81,4 +85,14 @@ public void flushBuffer() throws IOException { } super.flushBuffer(); } + + @Override + public void setAttribute(String key, Object value) { + this.attributes.put(key, value); + } + + @Override + public Object getAttribute(String key) { + return this.attributes.get(key); + } } ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > As a developer, i want to do something around serialize/deserialize, so that > we should make a aspect to eanable others can do this work > ---------------------------------------------------------------------------------------------------------------------------------------- > > Key: SCB-373 > URL: https://issues.apache.org/jira/browse/SCB-373 > Project: Apache ServiceComb > Issue Type: Improvement > Components: Java-Chassis > Reporter: jeho0815 > Assignee: jeho0815 > Priority: Major > Fix For: java-chassis-1.0.0-m2 > > > somebody want to use Jackson StdDeserializer/StdSerializer to encode or > decode paramters, but the method can't send any parameters into it. So we can > only use ThreadLocal to transfer. To support this, we may move RestCodec to > HttpServerFilter,other guys can do some work in their own Filters before this. -- This message was sent by Atlassian JIRA (v7.6.3#76005)