You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2023/07/29 01:06:52 UTC

[servicecomb-java-chassis] branch master updated: [#3865] show interface parameter info when throw InvocationException (#3877)

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 62d62821b [#3865] show interface parameter info when throw InvocationException (#3877)
62d62821b is described below

commit 62d62821bccf111b8b1605949303d9bc6b5908c1
Author: Cheng YouLing <97...@users.noreply.github.com>
AuthorDate: Sat Jul 29 09:06:47 2023 +0800

    [#3865] show interface parameter info when throw InvocationException (#3877)
---
 .../java/org/apache/servicecomb/common/rest/codec/RestCodec.java | 9 +++------
 .../org/apache/servicecomb/common/rest/codec/TestRestCodec.java  | 2 ++
 .../demo/jaxrs/client/MultiErrorCodeServiceClient.java           | 5 ++---
 .../demo/jaxrs/client/validation/ValidationServiceClient.java    | 3 ++-
 4 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestCodec.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestCodec.java
index 2e784ec83..77d89b1e3 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestCodec.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/RestCodec.java
@@ -57,16 +57,13 @@ public final class RestCodec {
     for (RestParam param : paramList) {
       try {
         paramValues.put(param.getParamName(), param.getParamProcessor().getValue(request));
-      } catch (InvocationException e) {
-        throw e;
       } catch (Exception e) {
-        // Avoid information leak of user input, and add option for debug use.
         String message = String
-            .format("Parameter is not valid for operation [%s]. Parameter is [%s]. Processor is [%s].",
+            .format("Parameter is not valid for operation [%s]. Parameter is [%s]. Processor is [%s]. Message is [%s].",
                 restOperation.getOperationMeta().getMicroserviceQualifiedName(),
                 param.getParamName(),
-                param.getParamProcessor().getProcessorType());
-        LOG.warn(message, e);
+                param.getParamProcessor().getProcessorType(),
+                e.getMessage());
         throw new InvocationException(Status.BAD_REQUEST, message);
       }
     }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestCodec.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestCodec.java
index 0fe60d613..6f2987020 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestCodec.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestCodec.java
@@ -161,6 +161,8 @@ public class TestRestCodec {
       success = true;
     } catch (InvocationException e) {
       Assertions.assertEquals(e.getStatusCode(), Status.BAD_REQUEST.getStatusCode());
+      Assertions.assertTrue(((CommonExceptionData) e.getErrorData()).getMessage()
+          .contains("Parameter is not valid for operation"));
     }
     Assertions.assertFalse(success);
   }
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
index 7ce742f2e..2d5eab102 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
@@ -102,9 +102,8 @@ public class MultiErrorCodeServiceClient implements CategorizedTestCase {
           .postForEntity(serverDirectURL + "/MultiErrorCodeService/errorCode", entity, MultiResponse200.class);
     } catch (HttpClientErrorException e) {
       TestMgr.check(e.getStatusCode().value(), 400);
-      TestMgr.check(e.getMessage(),
-          "400 Bad Request: \"{\"message\":\"Parameter is not valid for operation [jaxrs.MultiErrorCodeService.errorCode]." +
-              " Parameter is [request]. Processor is [body].\"}\"");
+      TestMgr.check(e.getMessage().contains("Parameter is not valid for operation "
+          + "[jaxrs.MultiErrorCodeService.errorCode]. Parameter is [request]. Processor is [body]."), true);
     }
 
     entity = new HttpEntity<>(null, headers);
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/validation/ValidationServiceClient.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/validation/ValidationServiceClient.java
index 0f985ee5e..d36bc0cfa 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/validation/ValidationServiceClient.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/validation/ValidationServiceClient.java
@@ -26,6 +26,7 @@ import org.apache.servicecomb.demo.jaxrs.server.validation.ValidationModel;
 import org.apache.servicecomb.demo.validator.Teacher;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
+import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.springframework.web.client.RestTemplate;
 
@@ -89,7 +90,7 @@ public class ValidationServiceClient {
     } catch (InvocationException e) {
       TestMgr.check(400, e.getStatus().getStatusCode());
       TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase());
-      TestMgr.check(e.getErrorData().toString().contains("Parameter name is required."), true);
+      TestMgr.check(((CommonExceptionData) e.getErrorData()).getMessage().contains("Parameter is not valid"), true);
     }
 
     Teacher teacher = new Teacher();