[ 
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)

Reply via email to