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 2018/08/10 11:25:18 UTC

[incubator-servicecomb-java-chassis] branch master updated (a30e796 -> e1671b4)

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

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


    from a30e796  [SCB-793] make demo output less log
     new 45471e7  [SCB-828]In some tomcat implementation inputstream available is null
     new aa2edef  [SCB-828]data should be CommonExceptionData
     new e1671b4  [SCB-828]test missed

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../servicecomb/common/rest/codec/RestCodec.java     |  5 +++--
 .../rest/codec/param/BodyProcessorCreator.java       | 20 +++++++++++++++-----
 .../common/rest/codec/produce/ProduceProcessor.java  |  4 ----
 .../servicecomb/common/rest/codec/TestRestCodec.java |  2 +-
 .../common/rest/codec/TestRestObjectMapper.java      | 14 ++++++++++++++
 .../rest/codec/produce/TestProduceJsonProcessor.java | 10 ++++++++--
 .../codec/produce/TestProduceTextPlainProcessor.java |  2 +-
 7 files changed, 42 insertions(+), 15 deletions(-)


[incubator-servicecomb-java-chassis] 02/03: [SCB-828]data should be CommonExceptionData

Posted by li...@apache.org.
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/incubator-servicecomb-java-chassis.git

commit aa2edefb7b703dfd5ba83561232c806b3324d45d
Author: liubao <ba...@huawei.com>
AuthorDate: Fri Aug 10 10:03:16 2018 +0800

    [SCB-828]data should be CommonExceptionData
---
 .../main/java/org/apache/servicecomb/common/rest/codec/RestCodec.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

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 127b76d..5642642 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
@@ -20,6 +20,7 @@ package org.apache.servicecomb.common.rest.codec;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response.Status;
 
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.common.rest.definition.RestParam;
@@ -67,7 +68,7 @@ public final class RestCodec {
           restOperation.getOperationMeta().getMicroserviceQualifiedName(),
           e);
       // give standard http error code for invalid parameter
-      throw new InvocationException(400, "", "Parameter is not valid.");
+      throw new InvocationException(Status.BAD_REQUEST, "Parameter is not valid.");
     }
   }
 }


[incubator-servicecomb-java-chassis] 01/03: [SCB-828]In some tomcat implementation inputstream available is null

Posted by li...@apache.org.
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/incubator-servicecomb-java-chassis.git

commit 45471e76d9a6cef4d997ef2b496b7006558e829b
Author: liubao <ba...@huawei.com>
AuthorDate: Thu Aug 9 22:22:59 2018 +0800

    [SCB-828]In some tomcat implementation inputstream available is null
---
 .../servicecomb/common/rest/codec/RestCodec.java     |  4 ++--
 .../rest/codec/param/BodyProcessorCreator.java       | 20 +++++++++++++++-----
 .../common/rest/codec/produce/ProduceProcessor.java  |  4 ----
 .../servicecomb/common/rest/codec/TestRestCodec.java |  4 ++--
 .../common/rest/codec/TestRestObjectMapper.java      | 14 ++++++++++++++
 .../rest/codec/produce/TestProduceJsonProcessor.java | 10 ++++++++--
 .../codec/produce/TestProduceTextPlainProcessor.java |  2 +-
 7 files changed, 42 insertions(+), 16 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 7c80dfd..127b76d 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
@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.common.rest.definition.RestParam;
-import org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,7 +66,8 @@ public final class RestCodec {
       LOG.error("Parameter is not valid for operation {}. ",
           restOperation.getOperationMeta().getMicroserviceQualifiedName(),
           e);
-      throw ExceptionFactory.convertProducerException(e, "Parameter is not valid.");
+      // give standard http error code for invalid parameter
+      throw new InvocationException(400, "", "Parameter is not valid.");
     }
   }
 }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
index c21f527..61f0ea9 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
@@ -31,14 +31,18 @@ import org.apache.servicecomb.common.rest.codec.RestClientRequest;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.foundation.vertx.stream.BufferOutputStream;
 import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.exc.MismatchedInputException;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.parameters.Parameter;
 import io.vertx.core.buffer.Buffer;
 
 public class BodyProcessorCreator implements ParamValueProcessorCreator {
+  private static final Logger LOGGER = LoggerFactory.getLogger(BodyProcessorCreator.class);
 
   public static final String PARAMTYPE = "body";
 
@@ -75,15 +79,21 @@ public class BodyProcessorCreator implements ParamValueProcessorCreator {
         return null;
       }
 
-      if (isRequired == false && inputStream.available() == 0) {
-        return null;
-      }
-
       if (!contentType.isEmpty() && !contentType.startsWith(MediaType.APPLICATION_JSON)) {
         // TODO: we should consider body encoding
         return IOUtils.toString(inputStream, "UTF-8");
       }
-      return RestObjectMapperFactory.getRestObjectMapper().readValue(inputStream, targetType);
+
+      try {
+        return RestObjectMapperFactory.getRestObjectMapper().readValue(inputStream, targetType);
+      } catch (MismatchedInputException e) {
+        // there is no way to detect InputStream is empty, so have to catch the exception
+        if (!isRequired) {
+          LOGGER.warn("Mismatched content and required is false, taken as null. Msg=" + e.getMessage());
+          return null;
+        }
+        throw e;
+      }
     }
 
     @Override
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessor.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessor.java
index 127250f..4172cb5 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessor.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessor.java
@@ -54,10 +54,6 @@ public interface ProduceProcessor {
   }
 
   default Object decodeResponse(InputStream input, JavaType type) throws Exception {
-    if (input.available() == 0) {
-      return null;
-    }
-
     return doDecodeResponse(input, type);
   }
 
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 d3817a1..ce6489b 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
@@ -133,8 +133,8 @@ public class TestRestCodec {
       RestCodec.restToArgs(request, restOperation);
       success = true;
     } catch (InvocationException e) {
-      Assert.assertEquals(590, e.getStatusCode());
-      Assert.assertEquals("Parameter is not valid.", ((CommonExceptionData) e.getErrorData()).getMessage());
+      Assert.assertEquals(400, e.getStatusCode());
+      Assert.assertEquals("Parameter is not valid.", e.getErrorData());
     }
     Assert.assertEquals(success, false);
   }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
index 1a9980e..af840e1 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/TestRestObjectMapper.java
@@ -17,11 +17,15 @@
 
 package org.apache.servicecomb.common.rest.codec;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
 import org.junit.Assert;
 import org.junit.Test;
 
 import com.fasterxml.jackson.core.JsonParser.Feature;
 import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.exc.MismatchedInputException;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.vertx.core.json.JsonObject;
@@ -54,5 +58,15 @@ public class TestRestObjectMapper {
         .convertValue(obj, TypeFactory.defaultInstance().constructType(PojoModel.class));
     Assert.assertEquals("a", model.getName());
     Assert.assertEquals("b", model.getDesc());
+
+    InputStream inputStream = new ByteArrayInputStream(new byte[0]);
+    try {
+      RestObjectMapperFactory.getRestObjectMapper().readValue(inputStream, PojoModel.class);
+      Assert.fail();
+    } catch (MismatchedInputException e) {
+      // right place, nothing to do.
+    } catch (Exception e) {
+      Assert.fail();
+    }
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
index b186bda..98a83d9 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
@@ -25,6 +25,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.exc.MismatchedInputException;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.vertx.core.buffer.Buffer;
@@ -51,8 +52,13 @@ public class TestProduceJsonProcessor {
     Assert.assertNull(result);
 
     ByteArrayInputStream is = new ByteArrayInputStream(new byte[] {});
-    result = pp.decodeResponse(is, resultType);
-    Assert.assertNull(result);
+    try {
+      pp.decodeResponse(is, resultType);
+      Assert.fail();
+    } catch (Exception e) {
+      Assert.assertTrue(e instanceof MismatchedInputException);
+    }
+
   }
 
   @Test
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
index b1df575..905f70f 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
@@ -52,7 +52,7 @@ public class TestProduceTextPlainProcessor {
 
     ByteArrayInputStream is = new ByteArrayInputStream(new byte[] {});
     result = pp.decodeResponse(is, resultType);
-    Assert.assertNull(result);
+    Assert.assertEquals(result, "");
   }
 
   @Test


[incubator-servicecomb-java-chassis] 03/03: [SCB-828]test missed

Posted by li...@apache.org.
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/incubator-servicecomb-java-chassis.git

commit e1671b4b3fed64cd5bb9c98444bea2eecaa26a14
Author: liubao <ba...@huawei.com>
AuthorDate: Fri Aug 10 10:27:02 2018 +0800

    [SCB-828]test missed
---
 .../java/org/apache/servicecomb/common/rest/codec/TestRestCodec.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 ce6489b..90245d7 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
@@ -134,7 +134,7 @@ public class TestRestCodec {
       success = true;
     } catch (InvocationException e) {
       Assert.assertEquals(400, e.getStatusCode());
-      Assert.assertEquals("Parameter is not valid.", e.getErrorData());
+      Assert.assertEquals("Parameter is not valid.", ((CommonExceptionData) e.getErrorData()).getMessage());
     }
     Assert.assertEquals(success, false);
   }