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:
[email protected]
With regards,
Apache Git Services