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

commit ef972eb51a2f5c8e0f06a664b2b46c7a5215832f
Author: liubao <[email protected]>
AuthorDate: Sun Jan 19 15:20:52 2020 +0800

    [SCB-1726]fix all TODOs in demos
---
 .../protobuf/definition/OperationProtobuf.java     |  15 +-
 .../protobuf/definition/RequestRootSerializer.java |   8 +-
 demo/demo-jaxrs/jaxrs-client/pom.xml               |  46 +++++
 .../servicecomb/demo/jaxrs/client/JaxrsClient.java | 225 ++++++++++++---------
 .../jaxrs/client/MultiErrorCodeServiceClient.java  |  61 +++---
 .../client/beanParam/BeanParamPojoClient.java      |  22 +-
 .../beanParam/BeanParamRestTemplateClient.java     |  25 ++-
 .../apache/servicecomb/demo/jaxrs/JaxrsIT.java}    |  33 +--
 demo/demo-pojo/pojo-client/pom.xml                 |   5 +
 .../demo/pojo/client/CodeFirstPojoClient.java      |   3 +-
 .../servicecomb/demo/pojo/client/PojoClient.java   |  67 +++---
 .../servicecomb/demo/pojo/client/TestWeakPojo.java |  10 +
 .../demo/pojo/server/SmartCareImpl.java            |   2 -
 .../servicecomb/demo/pojo/server/TestImpl.java     |   1 -
 .../servicecomb/demo/CategorizedTestCase.java      |   9 +-
 .../demo/CategorizedTestCaseRunner.java            |   2 +-
 .../servicecomb/demo/CodeFirstRestTemplate.java    |  24 +--
 .../main/resources/microservices/pojo/server.yaml  |   4 -
 demo/demo-springmvc/springmvc-client/pom.xml       |   5 +
 .../client/CodeFirstRestTemplateSpringmvc.java     |   6 +-
 .../demo/springmvc/client/SpringmvcClient.java     | 164 ++++++++-------
 .../demo/springmvc/client/TestWeakSpringmvc.java   |  10 +
 .../foundation/protobuf/ProtoMapper.java           |   3 +
 .../serializer/scalar/Int32WriteSchemas.java       |   3 +
 .../common/InvocationToHttpServletRequest.java     |  13 +-
 .../common/TestInvocationToHttpServletRequest.java |   4 +-
 .../transport/highway/HighwayCodec.java            |   4 +-
 .../transport/highway/TestHighwayCodec.java        | 114 +++--------
 28 files changed, 494 insertions(+), 394 deletions(-)

diff --git 
a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/OperationProtobuf.java
 
b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/OperationProtobuf.java
index e475712..9d12a9b 100644
--- 
a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/OperationProtobuf.java
+++ 
b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/OperationProtobuf.java
@@ -27,6 +27,7 @@ import javax.ws.rs.core.Response.Status.Family;
 import org.apache.servicecomb.codec.protobuf.utils.ScopedProtobufSchemaManager;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.foundation.protobuf.ProtoMapper;
+import org.apache.servicecomb.foundation.protobuf.internal.ProtoConst;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 
 import com.fasterxml.jackson.databind.JavaType;
@@ -45,6 +46,10 @@ public class OperationProtobuf {
 
   private ResponseRootDeserializer<Object> responseRootDeserializer;
 
+  private ResponseRootSerializer anyResponseRootSerializer;
+
+  private ResponseRootDeserializer<Object> anyResponseRootDeserializer;
+
   public OperationProtobuf(ScopedProtobufSchemaManager 
scopedProtobufSchemaManager, OperationMeta operationMeta) {
     this.operationMeta = operationMeta;
     initRequestCodec(scopedProtobufSchemaManager, operationMeta);
@@ -63,16 +68,14 @@ public class OperationProtobuf {
     if (Family.SUCCESSFUL.equals(Family.familyOf(statusCode))) {
       return this.responseRootSerializer;
     }
-    // TODO : WEAK handles only one response type.
-    throw new IllegalStateException("not implemented now, statusCode = " + 
statusCode);
+    return anyResponseRootSerializer;
   }
 
   public ResponseRootDeserializer<Object> findResponseRootDeserializer(int 
statusCode) {
     if (Family.SUCCESSFUL.equals(Family.familyOf(statusCode))) {
       return this.responseRootDeserializer;
     }
-    // TODO : WEAK handles only one response type.
-    throw new IllegalStateException("not implemented now, statusCode = " + 
statusCode);
+    return anyResponseRootDeserializer;
   }
 
   public OperationMeta getOperationMeta() {
@@ -159,5 +162,9 @@ public class OperationProtobuf {
         }
       }
     }
+    anyResponseRootSerializer = new 
ResponseRootSerializer(mapper.createRootSerializer(ProtoConst.ANY,
+        Object.class), false, true);
+    anyResponseRootDeserializer = new ResponseRootDeserializer<>(
+        mapper.createRootDeserializer(ProtoConst.ANY, Object.class), false);
   }
 }
diff --git 
a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/RequestRootSerializer.java
 
b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/RequestRootSerializer.java
index 0dde46e..ab34445 100644
--- 
a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/RequestRootSerializer.java
+++ 
b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/definition/RequestRootSerializer.java
@@ -21,6 +21,8 @@ import java.util.Map;
 
 import org.apache.servicecomb.foundation.protobuf.RootSerializer;
 
+import io.vertx.core.json.JsonObject;
+
 public class RequestRootSerializer {
   private RootSerializer rootSerializer;
 
@@ -37,7 +39,11 @@ public class RequestRootSerializer {
   @SuppressWarnings("unchecked")
   public byte[] serialize(Object value) throws IOException {
     if (noTypesInfo && !isWrap) {
-      return this.rootSerializer.serialize(((Map<String, Object>) 
value).values().iterator().next());
+      Object param = ((Map<String, Object>) value).values().iterator().next();
+      if (param instanceof JsonObject) {
+        param = ((JsonObject) param).getMap();
+      }
+      return this.rootSerializer.serialize(param);
     } else {
       return this.rootSerializer.serialize(value);
     }
diff --git a/demo/demo-jaxrs/jaxrs-client/pom.xml 
b/demo/demo-jaxrs/jaxrs-client/pom.xml
index 28ca8ff..e21c510 100644
--- a/demo/demo-jaxrs/jaxrs-client/pom.xml
+++ b/demo/demo-jaxrs/jaxrs-client/pom.xml
@@ -50,5 +50,51 @@
   <properties>
     <demo.main>org.apache.servicecomb.demo.jaxrs.client.JaxrsClient</demo.main>
   </properties>
+  <build>
+    <plugins>
+      <!-- Because other demos depend on this module, if add classpath, the 
depended module will fail dual to spring configuration files duplication.
+         So, we remove maven-dependency-plugin to make all integration tests 
run. In your applications, still need to add this to make packaged jar files 
run.
+       -->
+      <!--
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+      </plugin>
+      -->
+      <plugin>
+        <groupId>com.github.odavid.maven.plugins</groupId>
+        <artifactId>mixin-maven-plugin</artifactId>
+        <configuration>
+          <mixins>
+            <mixin>
+              <groupId>org.apache.servicecomb.demo</groupId>
+              <artifactId>docker-run-config</artifactId>
+              <version>${project.version}</version>
+            </mixin>
+          </mixins>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <profiles>
+    <profile>
+      <id>docker</id>
+      <properties>
+        <demo.service.name>jaxrs-server</demo.service.name>
+        <demo.vm.options>
+          -Dcse.highway.address=0.0.0.0:7070
+          -Dcse.rest.address=0.0.0.0:8080?sslEnabled=false
+        </demo.vm.options>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>io.fabric8</groupId>
+            <artifactId>docker-maven-plugin</artifactId>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
 
 </project>
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
index 13fc4c9..9779b13 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java
@@ -26,14 +26,13 @@ import javax.ws.rs.core.Response.Status;
 import org.apache.http.HttpStatus;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.core.Const;
+import org.apache.servicecomb.demo.CategorizedTestCaseRunner;
 import org.apache.servicecomb.demo.CodeFirstRestTemplate;
 import org.apache.servicecomb.demo.DemoConst;
 import org.apache.servicecomb.demo.RestObjectMapperWithStringMapper;
 import 
org.apache.servicecomb.demo.RestObjectMapperWithStringMapperNotWriteNull;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.demo.compute.Person;
-import org.apache.servicecomb.demo.jaxrs.client.beanParam.BeanParamPojoClient;
-import 
org.apache.servicecomb.demo.jaxrs.client.beanParam.BeanParamRestTemplateClient;
 import 
org.apache.servicecomb.demo.jaxrs.client.pojoDefault.DefaultModelServiceClient;
 import 
org.apache.servicecomb.demo.jaxrs.client.validation.ValidationServiceClient;
 import org.apache.servicecomb.demo.validator.Student;
@@ -41,7 +40,10 @@ import 
org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.foundation.common.utils.Log4jUtils;
 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -51,12 +53,21 @@ import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
 public class JaxrsClient {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(JaxrsClient.class);
+
   private static RestTemplate templateNew = RestTemplateBuilder.create();
 
   public static void main(String[] args) throws Exception {
     init();
 
-    run();
+    try {
+      run();
+    } catch (Exception e) {
+      TestMgr.check("success", "failed");
+      LOGGER.error("-------------- test failed -------------");
+      LOGGER.error("", e);
+      LOGGER.error("-------------- test failed -------------");
+    }
 
     TestMgr.summary();
   }
@@ -69,6 +80,8 @@ public class JaxrsClient {
   }
 
   public static void run() throws Exception {
+    CategorizedTestCaseRunner.runCategorizedTestCase("jaxrs");
+
     CodeFirstRestTemplate codeFirstClient = new CodeFirstRestTemplateJaxrs();
     codeFirstClient.testCodeFirst(templateNew, "jaxrs", "/codeFirstJaxrs/");
     testCompute(templateNew);
@@ -76,18 +89,11 @@ public class JaxrsClient {
     testClientTimeOut(templateNew);
     testJaxRSDefaultValuesAllTransport(templateNew);
     testSpringMvcDefaultValuesJavaPrimitiveAllTransport(templateNew);
-    MultiErrorCodeServiceClient.runTest();
 
-    BeanParamPojoClient beanParamPojoClient = new BeanParamPojoClient();
-    beanParamPojoClient.testAllTransport();
-    BeanParamRestTemplateClient beanParamRestTemplateClient = new 
BeanParamRestTemplateClient();
-    beanParamRestTemplateClient.testAllTransport();
     DefaultModelServiceClient.run();
     ValidationServiceClient.run();
 
     testOnlyRest(templateNew);
-    beanParamPojoClient.testRestOnly();
-    beanParamRestTemplateClient.testRestOnly();
   }
 
   private static void testOnlyRest(RestTemplate template) {
@@ -129,11 +135,11 @@ public class JaxrsClient {
         testValidatorAddFail(template, cseUrlPrefix);
         testValidatorSayHiFail(template, cseUrlPrefix);
         testValidatorExchangeFail(template, cseUrlPrefix);
+        testJaxRSDefaultValuesRest(template);
       } else if ("highway".equals(transport)) {
-        // TODO : WEAK highway support InvocationException
-//        testValidatorAddFail(template, cseUrlPrefix);
-//        testValidatorSayHiFail(template, cseUrlPrefix);
-//        testValidatorExchangeFail(template, cseUrlPrefix);
+        testValidatorAddFail(template, cseUrlPrefix);
+        testValidatorSayHiFail(template, cseUrlPrefix);
+        testValidatorExchangeFail(template, cseUrlPrefix);
       }
       testValidatorSayHiSuccess(template, cseUrlPrefix);
       testValidatorExchangeSuccess(template, cseUrlPrefix);
@@ -207,43 +213,42 @@ public class JaxrsClient {
       result = template.getForObject(cseUrlPrefix + "/query?d=10", 
String.class);
       TestMgr.check("Hello 20bobo4010", result);
       boolean failed = false;
-      // TODO: WEAK invocationexception not support in HIGHWAY
-//      try {
-//        result = template.getForObject(cseUrlPrefix + "/query2", 
String.class);
-//      } catch (InvocationException e) {
-//        failed = true;
-//        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//      }
-//
-//      failed = false;
-//      try {
-//        result = template.getForObject(cseUrlPrefix + "/query2?d=2&e=2", 
String.class);
-//      } catch (InvocationException e) {
-//        failed = true;
-//        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//      }
-//      TestMgr.check(failed, true);
-//
-//      failed = false;
-//      try {
-//        result = template.getForObject(cseUrlPrefix + "/query2?a=&d=2&e=2", 
String.class);
-//      } catch (InvocationException e) {
-//        failed = true;
-//        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//      }
-//      TestMgr.check(failed, true);
-//
-//      result = template.getForObject(cseUrlPrefix + "/query2?d=30&e=2", 
String.class);
-//      TestMgr.check("Hello 20bobo40302", result);
-//
-//      failed = false;
-//      try {
-//        result = template.getForObject(cseUrlPrefix + "/query3?a=2&b=2", 
String.class);
-//      } catch (InvocationException e) {
-//        failed = true;
-//        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//      }
-//      TestMgr.check(failed, true);
+      try {
+        result = template.getForObject(cseUrlPrefix + "/query2", String.class);
+      } catch (InvocationException e) {
+        failed = true;
+        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+      }
+
+      failed = false;
+      try {
+        result = template.getForObject(cseUrlPrefix + "/query2?d=2&e=2", 
String.class);
+      } catch (InvocationException e) {
+        failed = true;
+        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+      }
+      TestMgr.check(failed, true);
+
+      failed = false;
+      try {
+        result = template.getForObject(cseUrlPrefix + "/query2?a=&d=2&e=2", 
String.class);
+      } catch (InvocationException e) {
+        failed = true;
+        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+      }
+      TestMgr.check(failed, true);
+
+      result = template.getForObject(cseUrlPrefix + "/query2?d=30&e=2", 
String.class);
+      TestMgr.check("Hello 20bobo40302", result);
+
+      failed = false;
+      try {
+        result = template.getForObject(cseUrlPrefix + "/query3?a=2&b=2", 
String.class);
+      } catch (InvocationException e) {
+        failed = true;
+        TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+      }
+      TestMgr.check(failed, true);
 
       result = template.getForObject(cseUrlPrefix + "/query3?a=30&b=2", 
String.class);
       TestMgr.check("Hello 302", result);
@@ -294,20 +299,19 @@ public class JaxrsClient {
   }
 
   private static void testGetAllTransport(RestTemplate template, String 
cseUrlPrefix) {
-    // TODO: WEAK highway not support HttpServletRequest
-//    Map<String, String> params = new HashMap<>();
-//    params.put("a", "5");
-//    params.put("b", "3");
-//    int result =
-//        template.getForObject(cseUrlPrefix + "/compute/reduce?a={a}&b={b}", 
Integer.class, params);
-//    TestMgr.check(2, result);
-//
-//    result = template.getForObject(cseUrlPrefix + 
"/compute/reduce?a={a}&b={b}", Integer.class, 5, 4);
-//    TestMgr.check(1, result);
-//
-//    result = template.getForObject(cseUrlPrefix + "/compute/reduce?a=5&b=6",
-//        Integer.class);
-//    TestMgr.check(-1, result);
+    Map<String, String> params = new HashMap<>();
+    params.put("a", "5");
+    params.put("b", "3");
+    int result =
+        template.getForObject(cseUrlPrefix + "/compute/reduce?a={a}&b={b}", 
Integer.class, params);
+    TestMgr.check(2, result);
+
+    result = template.getForObject(cseUrlPrefix + 
"/compute/reduce?a={a}&b={b}", Integer.class, 5, 4);
+    TestMgr.check(1, result);
+
+    result = template.getForObject(cseUrlPrefix + "/compute/reduce?a=5&b=6",
+        Integer.class);
+    TestMgr.check(-1, result);
   }
 
   private static void testPost(RestTemplate template, String cseUrlPrefix) {
@@ -381,9 +385,17 @@ public class JaxrsClient {
       // Message dependends on locale, so just check the short part.
       // 'must be greater than or equal to 20', propertyPath=add.arg1, 
rootBeanClass=class org.apache.servicecomb.demo.jaxrs.server.Validator, 
messageTemplate='{javax.validation.constraints.Min.message}'}]]
       // ignored
-      Map data = (Map) e.getErrorData();
-      TestMgr.check(
-          true, data.get("message").toString().contains("propertyPath=add.b"));
+      if (e.getErrorData() instanceof CommonExceptionData) {
+        // highway decode/encode 'Object' with special type information, got 
runtime type
+        CommonExceptionData data = (CommonExceptionData) e.getErrorData();
+        TestMgr.check(
+            true, data.getMessage().contains("propertyPath=add.b"));
+      } else {
+        // rest decode/encode 'Object' using json without type information, 
got map. Users can got runtime type by adding @JsonTypeInfo to the model.
+        Map data = (Map) e.getErrorData();
+        TestMgr.check(
+            true, 
data.get("message").toString().contains("propertyPath=add.b"));
+      }
     }
 
     TestMgr.check(true, isExcep);
@@ -407,9 +419,16 @@ public class JaxrsClient {
       TestMgr.check(400, e.getStatus().getStatusCode());
       TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase());
       // Message dependends on locale, so just check the short part.
-      Map data = (Map) e.getErrorData();
-      TestMgr.check(
-          true, 
data.get("message").toString().contains("propertyPath=sayHi.name"));
+      if (e.getErrorData() instanceof CommonExceptionData) {
+        // highway decode/encode 'Object' with special type information, got 
runtime type
+        CommonExceptionData data = (CommonExceptionData) e.getErrorData();
+        TestMgr.check(
+            true, data.getMessage().contains("propertyPath=sayHi.name"));
+      } else {
+        Map data = (Map) e.getErrorData();
+        TestMgr.check(
+            true, 
data.get("message").toString().contains("propertyPath=sayHi.name"));
+      }
     }
     TestMgr.check(true, isExcep);
   }
@@ -440,9 +459,16 @@ public class JaxrsClient {
       TestMgr.check(400, e.getStatus().getStatusCode());
       TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase());
       // Message dependends on locale, so just check the short part.
-      Map data = (Map) e.getErrorData();
-      TestMgr.check(
-          true, 
data.get("message").toString().contains("propertyPath=sayHello.student.age"));
+      if (e.getErrorData() instanceof CommonExceptionData) {
+        // highway decode/encode 'Object' with special type information, got 
runtime type
+        CommonExceptionData data = (CommonExceptionData) e.getErrorData();
+        TestMgr.check(
+            true, 
data.getMessage().contains("propertyPath=sayHello.student.age"));
+      } else {
+        Map data = (Map) e.getErrorData();
+        TestMgr.check(
+            true, 
data.get("message").toString().contains("propertyPath=sayHello.student.age"));
+      }
     }
     TestMgr.check(true, isExcep);
   }
@@ -524,29 +550,32 @@ public class JaxrsClient {
   }
 
   private static void 
testSpringMvcDefaultValuesJavaPrimitiveAllTransport(RestTemplate template) {
-    // TODO : WEAK highway not support primitive default values
-//    String microserviceName = "jaxrs";
-//    String cseUrlPrefix = "cse://" + microserviceName + 
"/JaxRSDefaultValues/";
-//
-//    HttpHeaders headers = new HttpHeaders();
-//    
headers.setContentType(org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED);
-//    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
-//    HttpEntity<MultiValueMap<String, String>> request = new 
HttpEntity<>(map, headers);
-//
-//    //default values with primitive
-//    String result = template.postForObject(cseUrlPrefix + 
"/javaprimitiveint", request, String.class);
-//    TestMgr.check("Hello 0bobo", result);
-//
-//    result = template.postForObject(cseUrlPrefix + "/javaprimitivenumber", 
request, String.class);
-//    TestMgr.check("Hello 0.0false", result);
-//
-//    result = template.postForObject(cseUrlPrefix + "/javaprimitivestr", 
request, String.class);
-//    TestMgr.check("Hello", result);
-//
-//    result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", 
request, String.class);
-//    TestMgr.check("Hello nullnull", result);
-//
-//    result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", 
null, String.class);
-//    TestMgr.check("Hello false,\0,0,0,0,0,0.0,0.0,null", result);
+    String microserviceName = "jaxrs";
+    for (String transport : DemoConst.transports) {
+      CategorizedTestCaseRunner.changeTransport(microserviceName, transport);
+
+      String cseUrlPrefix = "cse://" + microserviceName + 
"/JaxRSDefaultValues/";
+
+      HttpHeaders headers = new HttpHeaders();
+      
headers.setContentType(org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED);
+      MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+      HttpEntity<MultiValueMap<String, String>> request = new 
HttpEntity<>(map, headers);
+
+      //default values with primitive
+      String result = template.postForObject(cseUrlPrefix + 
"/javaprimitiveint", request, String.class);
+      TestMgr.check("Hello 0bobo", result);
+
+      result = template.postForObject(cseUrlPrefix + "/javaprimitivenumber", 
request, String.class);
+      TestMgr.check("Hello 0.0false", result);
+
+      result = template.postForObject(cseUrlPrefix + "/javaprimitivestr", 
request, String.class);
+      TestMgr.check("Hello", result);
+
+      result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", 
request, String.class);
+      TestMgr.check("Hello nullnull", result);
+
+      result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", 
null, String.class);
+      TestMgr.check("Hello false,\0,0,0,0,0,0.0,0.0,null", result);
+    }
   }
 }
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 f05604c..a58cbc5 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
@@ -22,14 +22,13 @@ import java.util.Map;
 import javax.ws.rs.core.Response.Status;
 
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
-import org.apache.servicecomb.demo.DemoConst;
+import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.demo.multiErrorCode.MultiRequest;
 import org.apache.servicecomb.demo.multiErrorCode.MultiResponse200;
 import org.apache.servicecomb.demo.multiErrorCode.MultiResponse400;
 import org.apache.servicecomb.demo.multiErrorCode.MultiResponse500;
 import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
-import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
@@ -40,6 +39,7 @@ import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.client.UnknownHttpStatusCodeException;
@@ -47,27 +47,33 @@ import 
org.springframework.web.client.UnknownHttpStatusCodeException;
 import io.vertx.core.json.Json;
 import io.vertx.core.json.JsonObject;
 
-public class MultiErrorCodeServiceClient {
+@Component
+public class MultiErrorCodeServiceClient implements CategorizedTestCase {
   private static final String SERVER = "cse://jaxrs";
 
   private static String serverDirectURL;
 
   private static RestTemplate template = RestTemplateBuilder.create();
 
-  public static void runTest() {
-    for (String transport : DemoConst.transports) {
-      ArchaiusUtils.setProperty("servicecomb.references.transport.jaxrs", 
transport);
-
-      // TODO fix this in SCB-1634
-//      testErrorCode();
-//      testErrorCodeWithHeader();
-//      testErrorCodeWithHeaderJAXRS();
-//      testErrorCodeWithHeaderJAXRSUsingRowType();
-//      testNoClientErrorCode();
-    }
+  @Override
+  public void testAllTransport() throws Exception {
+    testErrorCode();
+    testErrorCodeWithHeader();
+    testErrorCodeWithHeaderJAXRS();
+    testErrorCodeWithHeaderJAXRSUsingRowType();
+    testNoClientErrorCode();
+  }
 
+  @Override
+  public void testRestTransport() throws Exception {
     prepareServerDirectURL();
     testErrorCodeWrongType();
+    testErrorCodeWithHeaderJAXRSUsingRowTypeRest();
+  }
+
+  @Override
+  public void testHighwayTransport() throws Exception {
+
   }
 
   private static void prepareServerDirectURL() {
@@ -220,6 +226,23 @@ public class MultiErrorCodeServiceClient {
     TestMgr.check(t500.getMessage(), "internal error");
   }
 
+  private static void testErrorCodeWithHeaderJAXRSUsingRowTypeRest() {
+    // TODO recover this in SCB-1652
+    // using string
+//    MultiRequest request = new MultiRequest();
+//    request.setCode(200);
+//    request.setMessage("test message");
+//    String stringRequest = Json.encode(request);
+//
+//    ResponseEntity<MultiResponse200> result = template
+//        .postForEntity(SERVER + 
"/MultiErrorCodeService/errorCodeWithHeaderJAXRS", stringRequest,
+//            MultiResponse200.class);
+//    TestMgr.check(result.getStatusCodeValue(), 200);
+//    TestMgr.check(result.getBody().getMessage(), "test message");
+//    TestMgr.check(result.getBody().getCode(), 200);
+//    TestMgr.check(result.getHeaders().getFirst("x-code"), 200);
+  }
+
   private static void testErrorCodeWithHeaderJAXRSUsingRowType() {
     JsonObject requestJson = new JsonObject();
     requestJson.put("code", 200);
@@ -244,16 +267,6 @@ public class MultiErrorCodeServiceClient {
     TestMgr.check(result.getBody().getMessage(), "test message");
     TestMgr.check(result.getBody().getCode(), 200);
     TestMgr.check(result.getHeaders().getFirst("x-code"), 200);
-
-    // TODO recover this in SCB-1652
-    // using string
-//    result = template
-//        .postForEntity(SERVER + 
"/MultiErrorCodeService/errorCodeWithHeaderJAXRS", stringRequest,
-//            MultiResponse200.class);
-//    TestMgr.check(result.getStatusCodeValue(), 200);
-//    TestMgr.check(result.getBody().getMessage(), "test message");
-//    TestMgr.check(result.getBody().getCode(), 200);
-//    TestMgr.check(result.getHeaders().getFirst("x-code"), 200);
   }
 
   private static void testNoClientErrorCode() {
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamPojoClient.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamPojoClient.java
index 2f384f4..9e09bc1 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamPojoClient.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamPojoClient.java
@@ -20,25 +20,33 @@ package org.apache.servicecomb.demo.jaxrs.client.beanParam;
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 
+import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.provider.pojo.Invoker;
+import org.springframework.stereotype.Component;
 
-public class BeanParamPojoClient {
+@Component
+public class BeanParamPojoClient implements CategorizedTestCase {
   private BeanParamTestServiceIntf beanParamTestServiceIntf;
 
   public BeanParamPojoClient() {
     beanParamTestServiceIntf = Invoker.createProxy("jaxrs", "beanParamTest", 
BeanParamTestServiceIntf.class);
   }
 
-  public void testAllTransport() {
-    // TODO : WEAK highway not implement InvocationContext and BeanParam and 
Upload
-//    testBeanParam();
-//    testUpload();
+  @Override
+  public void testRestTransport() throws Exception {
+    testBeanParam();
+    testUpload();
+  }
+
+  @Override
+  public void testHighwayTransport() throws Exception {
+
   }
 
-  public void testRestOnly() {
+  @Override
+  public void testAllTransport() throws Exception {
     testBeanParam();
-    testUpload();
   }
 
   private void testBeanParam() {
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamRestTemplateClient.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamRestTemplateClient.java
index 401d3a2..69c5057 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamRestTemplateClient.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/beanParam/BeanParamRestTemplateClient.java
@@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.provider.springmvc.reference.CseHttpEntity;
 import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
@@ -30,9 +31,11 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
-public class BeanParamRestTemplateClient {
+@Component
+public class BeanParamRestTemplateClient implements CategorizedTestCase {
   RestTemplate restTemplate;
 
   public BeanParamRestTemplateClient() {
@@ -40,17 +43,23 @@ public class BeanParamRestTemplateClient {
   }
 
 
-  public void testAllTransport() {
-//    testBeanParam();
-//    testUpload();
+  @Override
+  public void testRestTransport() throws Exception {
+    testBeanParam();
+    testUpload();
+  }
+
+  @Override
+  public void testHighwayTransport() throws Exception {
+
   }
 
-  public void testRestOnly() {
+  @Override
+  public void testAllTransport() throws Exception {
     testBeanParam();
-    testUpload();
   }
 
-  public void testBeanParam() {
+  private void testBeanParam() {
     HttpHeaders headers = new HttpHeaders();
     headers.add("Cookie", "cookieSwaggerLong=11");
     headers.add("headerSwaggerInt", "2");
@@ -66,7 +75,7 @@ public class BeanParamRestTemplateClient {
         result.getBody());
   }
 
-  public void testUpload() {
+  private void testUpload() {
     BufferedInputStream bufferedInputStream0 = new BufferedInputStream(new 
ByteArrayInputStream("up0".getBytes()));
     BufferedInputStream bufferedInputStream1 = new BufferedInputStream(new 
ByteArrayInputStream("up1".getBytes()));
     BufferedInputStream bufferedInputStream2 = new BufferedInputStream(new 
ByteArrayInputStream("up2".getBytes()));
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
 
b/demo/demo-jaxrs/jaxrs-client/src/test/java/org/apache/servicecomb/demo/jaxrs/JaxrsIT.java
similarity index 61%
copy from 
demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
copy to 
demo/demo-jaxrs/jaxrs-client/src/test/java/org/apache/servicecomb/demo/jaxrs/JaxrsIT.java
index 4db55c9..df4d1ab 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/test/java/org/apache/servicecomb/demo/jaxrs/JaxrsIT.java
@@ -15,24 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo;
+package org.apache.servicecomb.demo.jaxrs;
 
-public interface CategorizedTestCase {
-  /**
-   * test case which only successful in REST transport
-   */
-  default void testRestTransport() throws Exception {
-  }
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.jaxrs.client.JaxrsClient;
+import org.junit.Before;
+import org.junit.Test;
 
-  /**
-   * test case which only successful in HIGHWAY transport
-   */
-  default void testHighwayTransport() throws Exception {
+public class JaxrsIT {
+
+  @Before
+  public void setUp() {
+    TestMgr.errors().clear();
   }
 
-  /**
-   * test case which successful in both REST and HIGHWAY transport
-   */
-  default void testAllTransport() throws Exception {
+  @Test
+  public void clientGetsNoError() throws Exception {
+    JaxrsClient.main(new String[0]);
+
+    assertThat(TestMgr.errors().isEmpty(), is(true));
   }
 }
diff --git a/demo/demo-pojo/pojo-client/pom.xml 
b/demo/demo-pojo/pojo-client/pom.xml
index 34475b2..04ce19a 100644
--- a/demo/demo-pojo/pojo-client/pom.xml
+++ b/demo/demo-pojo/pojo-client/pom.xml
@@ -48,10 +48,15 @@
   </properties>
   <build>
     <plugins>
+      <!-- Because other demos depend on this module, if add classpath, the 
depended module will fail dual to spring configuration files duplication.
+         So, we remove maven-dependency-plugin to make all integration tests 
run. In your applications, still need to add this to make packaged jar files 
run.
+       -->
+      <!--
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
       </plugin>
+      -->
       <plugin>
         <groupId>com.github.odavid.maven.plugins</groupId>
         <artifactId>mixin-maven-plugin</artifactId>
diff --git 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/CodeFirstPojoClient.java
 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/CodeFirstPojoClient.java
index 147d17e..ee91f31 100644
--- 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/CodeFirstPojoClient.java
+++ 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/CodeFirstPojoClient.java
@@ -71,8 +71,7 @@ public class CodeFirstPojoClient {
   private void testAll(CodeFirstPojoIntf codeFirst) {
     testCodeFirstUserMap(codeFirst);
     testCodeFirstUserArray(codeFirst);
-    // TODO: WEAK highway returns array
-//    testCodeFirstStrings(codeFirst);
+    testCodeFirstStrings(codeFirst);
     testCodeFirstBytes(codeFirst);
     testCodeFirstAddDate(codeFirst);
     testCodeFirstAddString(codeFirst);
diff --git 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClient.java
 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClient.java
index 1f3d012..a302b38 100644
--- 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClient.java
+++ 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClient.java
@@ -23,6 +23,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ForkJoinPool;
+import java.util.stream.IntStream;
 
 import javax.inject.Inject;
 
@@ -86,32 +88,29 @@ public class PojoClient {
       TestMgr.check("success", "failed");
       LOGGER.error("-------------- test failed -------------");
       LOGGER.error("", e);
-      System.err.println("-------------- test failed -------------");
+      LOGGER.error("-------------- test failed -------------");
     }
 
     TestMgr.summary();
   }
 
-  private static void testContextClassLoaderIsNull() {
-    // TODO: WEAK protostuff many classes use ContextClassLoader to load 
classes, if it is null,
-    // Will cause many components not work.
-//    IntStream.range(0, 100).parallel().forEach(item -> {
-//      if (Thread.currentThread().getName().equals("main")) {
-//        return;
-//      }
-//      // in web environment, this could be null, here we just mock a null 
class loader.
-//      Thread.currentThread().setContextClassLoader(null);
-//      TestMgr.check(null, test.postTestStatic(2));
-//    });
+  private static void testContextClassLoaderIsNull() throws Exception {
+    ForkJoinPool pool = new ForkJoinPool(4);
+    pool.submit(() ->
+        IntStream.range(0, 20).parallel().forEach(item -> {
+          if (Thread.currentThread().getName().equals("main")) {
+            return;
+          }
+          // in web environment, this could be null, here we just mock a null 
class loader.
+          Thread.currentThread().setContextClassLoader(null);
+          TestMgr.check(null, test.postTestStatic(2));
+        })).get();
   }
 
   public static void run() throws Exception {
     CategorizedTestCaseRunner.runCategorizedTestCase("pojo");
 
-    testContextClassLoaderIsNull();
-
     smartcare = BeanUtils.getBean("smartcare");
-
     String microserviceName = "pojo";
     codeFirstPojoClient.testCodeFirst(microserviceName);
 
@@ -120,6 +119,7 @@ public class PojoClient {
       TestMgr.setMsg(microserviceName, transport);
       LOGGER.info("test {}, transport {}", microserviceName, transport);
 
+      testContextClassLoaderIsNull();
       testNull(testFromXml);
       testNull(test);
 
@@ -228,24 +228,23 @@ public class PojoClient {
   }
 
   private static void testException(Test test) {
-    // TODO : WEAK highway support error code
-//    try {
-//      test.testException(456);
-//    } catch (InvocationException e) {
-//      TestMgr.check("456 error", e.getErrorData());
-//    }
-//
-//    try {
-//      test.testException(556);
-//    } catch (InvocationException e) {
-//      TestMgr.check("[556 error]", e.getErrorData());
-//    }
-
-//    try {
-//      test.testException(557);
-//    } catch (InvocationException e) {
-//      TestMgr.check("[[557 error]]", e.getErrorData());
-//    }
+    try {
+      test.testException(456);
+    } catch (InvocationException e) {
+      TestMgr.check("456 error", e.getErrorData());
+    }
+
+    try {
+      test.testException(556);
+    } catch (InvocationException e) {
+      TestMgr.check("[556 error]", e.getErrorData());
+    }
+
+    try {
+      test.testException(557);
+    } catch (InvocationException e) {
+      TestMgr.check("[[557 error]]", e.getErrorData());
+    }
   }
 
   private static void testInputArray(Test test) {
@@ -281,7 +280,6 @@ public class PojoClient {
   }
 
   private static void testEmptyHighway(Test test) {
-    // TODO : WEAK highway will never encoding empty string
     TestMgr.check("code is 'null'", test.getTestString(""));
   }
 
@@ -294,7 +292,6 @@ public class PojoClient {
   }
 
   private static void testNullHighway(Test test) {
-    // TODO: WEAK highway will never have request with null. When new User, 
the default name is nameA
     TestMgr.check("nameA", test.wrapParam(null).getName());
   }
 
diff --git 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
index d324463..1ab7f58 100644
--- 
a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
+++ 
b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
@@ -109,6 +109,16 @@ public class TestWeakPojo implements CategorizedTestCase {
   private ObjectInf objectInf;
 
   @Override
+  public void testRestTransport() throws Exception {
+
+  }
+
+  @Override
+  public void testHighwayTransport() throws Exception {
+
+  }
+
+  @Override
   public void testAllTransport() throws Exception {
     testDiffName();
 
diff --git 
a/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/SmartCareImpl.java
 
b/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/SmartCareImpl.java
index 69a4abd..7b34256 100644
--- 
a/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/SmartCareImpl.java
+++ 
b/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/SmartCareImpl.java
@@ -28,7 +28,6 @@ public class SmartCareImpl implements SmartCare {
 
   @Override
   public Response addApplication(Application application) {
-    // TODO: add application
     LOG.info(application.toString());
 
     Response resp = new Response();
@@ -40,7 +39,6 @@ public class SmartCareImpl implements SmartCare {
   @SuppressWarnings("divzero")
   @Override
   public Response delApplication(String appName) {
-    // TODO: delete application
     LOG.info(appName);
 
     try {
diff --git 
a/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/TestImpl.java
 
b/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/TestImpl.java
index 1d8fd4e..be1baca 100644
--- 
a/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/TestImpl.java
+++ 
b/demo/demo-pojo/pojo-server/src/main/java/org/apache/servicecomb/demo/pojo/server/TestImpl.java
@@ -88,7 +88,6 @@ public class TestImpl implements Test {
 
   @Override
   public User wrapParam(TestRequest request) {
-    // TODO: WEAK highway will never have request with null, so here check 
request.getUser() == null
     if (request == null || request.getUser() == null) {
       return null;
     }
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
index 4db55c9..51c733a 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCase.java
@@ -21,18 +21,15 @@ public interface CategorizedTestCase {
   /**
    * test case which only successful in REST transport
    */
-  default void testRestTransport() throws Exception {
-  }
+  void testRestTransport() throws Exception;
 
   /**
    * test case which only successful in HIGHWAY transport
    */
-  default void testHighwayTransport() throws Exception {
-  }
+  void testHighwayTransport() throws Exception;
 
   /**
    * test case which successful in both REST and HIGHWAY transport
    */
-  default void testAllTransport() throws Exception {
-  }
+  void testAllTransport() throws Exception;
 }
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCaseRunner.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCaseRunner.java
index 1bc637a..ee508cd 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCaseRunner.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CategorizedTestCaseRunner.java
@@ -38,7 +38,7 @@ public class CategorizedTestCaseRunner {
     }
   }
 
-  private static void changeTransport(String microserviceName, String 
transport) {
+  public static void changeTransport(String microserviceName, String 
transport) {
     ArchaiusUtils.setProperty("servicecomb.references.transport." + 
microserviceName, transport);
     TestMgr.setMsg(microserviceName, transport);
   }
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
index 417c351..087d518 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
@@ -57,30 +57,28 @@ public class CodeFirstRestTemplate {
     changeTransport(microserviceName, Const.RESTFUL);
     testOnlyRest(microserviceName, template, cseUrlPrefix);
 
-    for (String transport :  DemoConst.transports) {
+    for (String transport : DemoConst.transports) {
       changeTransport(microserviceName, transport);
       testAllTransport(microserviceName, template, cseUrlPrefix);
     }
   }
 
   protected void testAllTransport(String microserviceName, RestTemplate 
template, String cseUrlPrefix) {
-    // TODO : WEAK not supported now in HIGHWAY
-//    testCodeFirstUserMap(template, cseUrlPrefix);
-//    testCodeFirstTextPlain(template, cseUrlPrefix);
-//    testCodeFirstAppXml(template, cseUrlPrefix);
-//    testCodeFirstBytes(template, cseUrlPrefix);
-//    testCseResponse(microserviceName, template, cseUrlPrefix);
-//    testCodeFirstAddDate(template, cseUrlPrefix);
-
-//    testCodeFirstAdd(template, cseUrlPrefix);
-//    testCodeFirstAddString(template, cseUrlPrefix);
+    testCodeFirstUserMap(template, cseUrlPrefix);
+    testCodeFirstTextPlain(template, cseUrlPrefix);
+    testCodeFirstAppXml(template, cseUrlPrefix);
+    testCodeFirstBytes(template, cseUrlPrefix);
+    testCseResponse(microserviceName, template, cseUrlPrefix);
+    testCodeFirstAddDate(template, cseUrlPrefix);
+
+    testCodeFirstAdd(template, cseUrlPrefix);
+    testCodeFirstAddString(template, cseUrlPrefix);
     testCodeFirstIsTrue(template, cseUrlPrefix);
     testCodeFirstSayHi2(template, cseUrlPrefix);
     testCodeFirstSayHi(template, cseUrlPrefix);
     testCodeFirstSaySomething(template, cseUrlPrefix);
-    //            testCodeFirstRawJsonString(template, cseUrlPrefix);
     testCodeFirstSayHello(template, cseUrlPrefix);
-//    testCodeFirstReduce(template, cseUrlPrefix);
+    testCodeFirstReduce(template, cseUrlPrefix);
 
     testTraceIdOnContextContainsTraceId(template, cseUrlPrefix);
 
diff --git a/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml 
b/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
index da06df5..9c8be9e 100644
--- a/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
+++ b/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
@@ -196,8 +196,6 @@ definitions:
     type: object
     properties:
       index:
-        # TODO WEAK highway do not support map number(which IDL type is 
double) to integer
-        # type: number
         type: integer
         format: int32
       user:
@@ -218,8 +216,6 @@ definitions:
         type: integer
         format: int32
       index:
-        # TODO WEAK highway do not support map number(which IDL type is 
double) to integer
-        # type: number
         type: integer
         format: int32
     x-java-class: "org.apache.servicecomb.demo.server.User"
diff --git a/demo/demo-springmvc/springmvc-client/pom.xml 
b/demo/demo-springmvc/springmvc-client/pom.xml
index 9f15f93..970463f 100644
--- a/demo/demo-springmvc/springmvc-client/pom.xml
+++ b/demo/demo-springmvc/springmvc-client/pom.xml
@@ -65,10 +65,15 @@
   </properties>
   <build>
     <plugins>
+      <!-- Because other demos depend on this module, if add classpath, the 
depended module will fail dual to spring configuration files duplication.
+         So, we remove maven-dependency-plugin to make all integration tests 
run. In your applications, still need to add this to make packaged jar files 
run.
+       -->
+      <!--
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
       </plugin>
+      -->
       <plugin>
         <groupId>com.github.odavid.maven.plugins</groupId>
         <artifactId>mixin-maven-plugin</artifactId>
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
index 563fcdf..8e88096 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
@@ -113,8 +113,7 @@ public class CodeFirstRestTemplateSpringmvc extends 
CodeFirstRestTemplate {
     testBizkeeper.runAllTest();
     testResponseEntity("springmvc", template, cseUrlPrefix);
     testCodeFirstTestForm(template, cseUrlPrefix);
-    // TODO : WEAK not supported now in HIGHWAY
-//    testFallback(template, cseUrlPrefix);
+    testFallback(template, cseUrlPrefix);
 
     super.testAllTransport(microserviceName, template, cseUrlPrefix);
   }
@@ -249,7 +248,8 @@ public class CodeFirstRestTemplateSpringmvc extends 
CodeFirstRestTemplate {
     TestMgr.check(code + "null",
         template.postForEntity(cseUrlPrefix + "/testform", formEntiry, 
String.class).getBody());
     map.put("form2", "hello");
-    TestMgr.check(code + "hello", template.postForEntity(cseUrlPrefix + 
"/testform", formEntiry, String.class).getBody());
+    TestMgr
+        .check(code + "hello", template.postForEntity(cseUrlPrefix + 
"/testform", formEntiry, String.class).getBody());
   }
 
   private void testCodeFirstTestFormHighway(RestTemplate template, String 
cseUrlPrefix) {
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index 8ecfadf..1b299fe 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -243,26 +243,25 @@ public class SpringmvcClient {
       TestMgr.check(e.getStatusCode(), 400);
     }
 
-    // TODO: WEAK HttpServletRequest not supported in highway
-//    TestMgr.check("hi world [world]",
-//        template.getForObject(prefix + "/controller/sayhi?name=world",
-//            String.class));
-//
-//    TestMgr.check("hi world1 [world1]",
-//        template.getForObject(prefix + "/controller/sayhi?name={name}",
-//            String.class,
-//            "world1"));
-//    TestMgr.check("hi hi 中国 [hi 中国]",
-//        template.getForObject(prefix + "/controller/sayhi?name={name}",
-//            String.class,
-//            "hi 中国"));
-//
-//    Map<String, String> params = new HashMap<>();
-//    params.put("name", "world2");
-//    TestMgr.check("hi world2 [world2]",
-//        template.getForObject(prefix + "/controller/sayhi?name={name}",
-//            String.class,
-//            params));
+    TestMgr.check("hi world [world]",
+        template.getForObject(prefix + "/controller/sayhi?name=world",
+            String.class));
+
+    TestMgr.check("hi world1 [world1]",
+        template.getForObject(prefix + "/controller/sayhi?name={name}",
+            String.class,
+            "world1"));
+    TestMgr.check("hi hi 中国 [hi 中国]",
+        template.getForObject(prefix + "/controller/sayhi?name={name}",
+            String.class,
+            "hi 中国"));
+
+    Map<String, String> params = new HashMap<>();
+    params.put("name", "world2");
+    TestMgr.check("hi world2 [world2]",
+        template.getForObject(prefix + "/controller/sayhi?name={name}",
+            String.class,
+            params));
 
     TestMgr.check("hello world",
         template.postForObject(prefix + "/controller/sayhello/{name}",
@@ -275,16 +274,15 @@ public class SpringmvcClient {
             String.class,
             "hello 中国"));
 
-    // TODO: WEAK throw InvocationiException not supported in highway
-//    try {
-//      template.postForObject(prefix + "/controller/sayhello/{name}",
-//          null,
-//          String.class,
-//          "exception");
-//      TestMgr.check(true, false);
-//    } catch (InvocationException e) {
-//      TestMgr.check(e.getStatusCode(), 503);
-//    }
+    try {
+      template.postForObject(prefix + "/controller/sayhello/{name}",
+          null,
+          String.class,
+          "exception");
+      TestMgr.check(true, false);
+    } catch (InvocationException e) {
+      TestMgr.check(e.getStatusCode(), 503);
+    }
 
     HttpHeaders headers = new HttpHeaders();
     headers.add("name", "world");
@@ -306,8 +304,7 @@ public class SpringmvcClient {
   }
 
   private static void testController() {
-    // TODO: WEAK HttpServletRequest not supported in highway
-//    TestMgr.check("hi world [world]", controller.sayHi("world"));
+    TestMgr.check("hi world [world]", controller.sayHi("world"));
     Person user = new Person();
     user.setName("world");
     TestMgr.check("ha world", controller.saySomething("ha", user));
@@ -368,42 +365,51 @@ public class SpringmvcClient {
     String result = template.getForObject(cseUrlPrefix + "/query?d=10", 
String.class);
     TestMgr.check("Hello 20bobo4010", result);
     boolean failed = false;
+    result = null;
     try {
       result = template.getForObject(cseUrlPrefix + "/query2", String.class);
     } catch (InvocationException e) {
       failed = true;
       TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
     }
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
 
     failed = false;
+    result = null;
     try {
       result = template.getForObject(cseUrlPrefix + "/query2?d=2&e=2", 
String.class);
     } catch (InvocationException e) {
       failed = true;
       TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
     }
-    TestMgr.check(failed, true);
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
 
     failed = false;
+    result = null;
     try {
       result = template.getForObject(cseUrlPrefix + "/query2?a=&d=2&e=2", 
String.class);
     } catch (InvocationException e) {
       failed = true;
       TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
     }
-    TestMgr.check(failed, true);
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
 
     result = template.getForObject(cseUrlPrefix + "/query2?d=30&e=2", 
String.class);
     TestMgr.check("Hello 20bobo40302", result);
 
     failed = false;
+    result = null;
     try {
       result = template.getForObject(cseUrlPrefix + "/query3?a=2&b=2", 
String.class);
     } catch (InvocationException e) {
       failed = true;
       TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
     }
-    TestMgr.check(failed, true);
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
   }
 
   private static void testSpringMvcDefaultValuesAllTransport(RestTemplate 
template, String microserviceName) {
@@ -421,46 +427,54 @@ public class SpringmvcClient {
     result = template.postForObject(cseUrlPrefix + "/header", entity, 
String.class);
     TestMgr.check("Hello 20bobo30", result);
 
-    // TODO: WEAK InvocationException not supported in highway
-//    result = template.getForObject(cseUrlPrefix + "/query?d=10", 
String.class);
-//    TestMgr.check("Hello 20bobo4010", result);
-//    boolean failed = false;
-//    try {
-//      result = template.getForObject(cseUrlPrefix + "/query2", String.class);
-//    } catch (InvocationException e) {
-//      failed = true;
-//      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//    }
-//
-//    failed = false;
-//    try {
-//      result = template.getForObject(cseUrlPrefix + "/query2?d=2&e=2", 
String.class);
-//    } catch (InvocationException e) {
-//      failed = true;
-//      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//    }
-//    TestMgr.check(failed, true);
-//
-//    failed = false;
-//    try {
-//      result = template.getForObject(cseUrlPrefix + "/query2?a=&d=2&e=2", 
String.class);
-//    } catch (InvocationException e) {
-//      failed = true;
-//      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//    }
-//    TestMgr.check(failed, true);
-//
-//    result = template.getForObject(cseUrlPrefix + "/query2?d=30&e=2", 
String.class);
-//    TestMgr.check("Hello 20bobo40302", result);
-//
-//    failed = false;
-//    try {
-//      result = template.getForObject(cseUrlPrefix + "/query3?a=2&b=2", 
String.class);
-//    } catch (InvocationException e) {
-//      failed = true;
-//      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
-//    }
-//    TestMgr.check(failed, true);
+    result = template.getForObject(cseUrlPrefix + "/query?d=10", String.class);
+    TestMgr.check("Hello 20bobo4010", result);
+    boolean failed = false;
+    result = null;
+    try {
+      result = template.getForObject(cseUrlPrefix + "/query2", String.class);
+    } catch (InvocationException e) {
+      failed = true;
+      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+    }
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
+
+    failed = false;
+    result = null;
+    try {
+      result = template.getForObject(cseUrlPrefix + "/query2?d=2&e=2", 
String.class);
+    } catch (InvocationException e) {
+      failed = true;
+      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+    }
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
+
+    failed = false;
+    result = null;
+    try {
+      result = template.getForObject(cseUrlPrefix + "/query2?a=&d=2&e=2", 
String.class);
+    } catch (InvocationException e) {
+      failed = true;
+      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+    }
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
+
+    result = template.getForObject(cseUrlPrefix + "/query2?d=30&e=2", 
String.class);
+    TestMgr.check("Hello 20bobo40302", result);
+
+    failed = false;
+    result = null;
+    try {
+      result = template.getForObject(cseUrlPrefix + "/query3?a=2&b=2", 
String.class);
+    } catch (InvocationException e) {
+      failed = true;
+      TestMgr.check(e.getStatusCode(), HttpStatus.SC_BAD_REQUEST);
+    }
+    TestMgr.check(true, failed);
+    TestMgr.check(null, result);
 
     result = template.getForObject(cseUrlPrefix + "/query3?a=30&b=2", 
String.class);
     TestMgr.check("Hello 302", result);
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
index b7317c8..36d4c91 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
@@ -106,6 +106,16 @@ public class TestWeakSpringmvc implements 
CategorizedTestCase {
   private RestTemplate restTemplate = RestTemplateBuilder.create();
 
   @Override
+  public void testRestTransport() throws Exception {
+
+  }
+
+  @Override
+  public void testHighwayTransport() throws Exception {
+
+  }
+
+  @Override
   public void testAllTransport() throws Exception {
     getDiffName();
 
diff --git 
a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapper.java
 
b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapper.java
index 1a86e9b..7a5e695 100644
--- 
a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapper.java
+++ 
b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapper.java
@@ -99,6 +99,9 @@ public class ProtoMapper {
   public Message getRequestMessage(String operationId) {
     Service service = proto.getServices().get(0);
     ServiceMethod serviceMethod = service.getMethod(operationId);
+    if (serviceMethod == null) {
+      throw new IllegalArgumentException("operation not found, operation id=" 
+ operationId);
+    }
     return serviceMethod.getArgType();
   }
 
diff --git 
a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int32WriteSchemas.java
 
b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int32WriteSchemas.java
index 42b2f55..615afb6 100644
--- 
a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int32WriteSchemas.java
+++ 
b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int32WriteSchemas.java
@@ -62,6 +62,9 @@ public final class Int32WriteSchemas {
       }
 
       if (value instanceof String) {
+        if (((String) value).isEmpty()) {
+          return;
+        }
         int parsedValue = Integer.parseInt((String) value, 10);
         output.writeScalarInt32(tag, tagSize, parsedValue);
         return;
diff --git 
a/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
 
b/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
index b98f799..be3cda5 100644
--- 
a/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
+++ 
b/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
@@ -36,16 +36,17 @@ import io.vertx.core.net.SocketAddress;
 public class InvocationToHttpServletRequest extends AbstractHttpServletRequest 
{
   private RestOperationMeta swaggerOperation;
 
-  private SocketAddress sockerAddress;
-
   private Invocation invocation;
 
   public InvocationToHttpServletRequest(Invocation invocation) {
     this.swaggerOperation = 
invocation.getOperationMeta().getExtData(RestConst.SWAGGER_REST_OPERATION);
-    this.sockerAddress = (SocketAddress) 
invocation.getHandlerContext().get(Const.REMOTE_ADDRESS);
     this.invocation = invocation;
   }
 
+  private SocketAddress getSockerAddress() {
+    return (SocketAddress) 
invocation.getHandlerContext().get(Const.REMOTE_ADDRESS);
+  }
+
   @Override
   public String getParameter(String name) {
     RestParam param = swaggerOperation.getParamByName(name);
@@ -112,17 +113,17 @@ public class InvocationToHttpServletRequest extends 
AbstractHttpServletRequest {
 
   @Override
   public String getRemoteAddr() {
-    return this.sockerAddress == null ? "" : this.sockerAddress.host();
+    return this.getSockerAddress() == null ? "" : 
this.getSockerAddress().host();
   }
 
   @Override
   public String getRemoteHost() {
-    return this.sockerAddress == null ? "" : this.sockerAddress.host();
+    return this.getSockerAddress() == null ? "" : 
this.getSockerAddress().host();
   }
 
   @Override
   public int getRemotePort() {
-    return this.sockerAddress == null ? 0 : this.sockerAddress.port();
+    return this.getSockerAddress() == null ? 0 : 
this.getSockerAddress().port();
   }
 
   @Override
diff --git 
a/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
 
b/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
index 13619f4..3faa31f 100644
--- 
a/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
+++ 
b/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
@@ -71,8 +71,6 @@ public class TestInvocationToHttpServletRequest {
         result = operationMeta;
         operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
         result = swaggerOperation;
-        invocation.getHandlerContext();
-        result = handlerContext;
       }
     };
 
@@ -288,6 +286,8 @@ public class TestInvocationToHttpServletRequest {
         result = "127.0.0.2";
         socketAddress.port();
         result = 8088;
+        invocation.getHandlerContext();
+        result = handlerContext;
       }
     };
     String addr = request.getRemoteAddr();
diff --git 
a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
 
b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
index 014f2b7..bb28651 100644
--- 
a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
+++ 
b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
@@ -84,8 +84,8 @@ public final class HighwayCodec {
   @SuppressWarnings({"rawtypes", "unchecked"})
   public static void decodeRequest(Invocation invocation, RequestHeader 
header, OperationProtobuf operationProtobuf,
       Buffer bodyBuffer) throws Exception {
-    RequestRootDeserializer<Object> requestDesirializer = 
operationProtobuf.getRequestRootDeserializer();
-    Map<String, Object> swaggerArguments = 
requestDesirializer.deserialize(bodyBuffer.getBytes());
+    RequestRootDeserializer<Object> requestDeserializer = 
operationProtobuf.getRequestRootDeserializer();
+    Map<String, Object> swaggerArguments = 
requestDeserializer.deserialize(bodyBuffer.getBytes());
     addPrimitiveTypeDefaultValues(invocation, 
operationProtobuf.getOperationMeta(), swaggerArguments);
     invocation.setSwaggerArguments(swaggerArguments);
     invocation.mergeContext(header.getContext());
diff --git 
a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
 
b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
index 7635139..e77d364 100644
--- 
a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
+++ 
b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
@@ -22,10 +22,12 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf;
+import 
org.apache.servicecomb.codec.protobuf.definition.RequestRootDeserializer;
 import org.apache.servicecomb.codec.protobuf.definition.RequestRootSerializer;
 import org.apache.servicecomb.codec.protobuf.definition.ResponseRootSerializer;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.foundation.vertx.server.TcpParser;
@@ -46,19 +48,20 @@ import io.vertx.core.buffer.Buffer;
 import mockit.Mocked;
 
 public class TestHighwayCodec {
-
-  private RequestHeader header = null;
-
   private OperationProtobuf operationProtobuf = null;
 
   private Buffer bodyBuffer = null;
 
   private RequestRootSerializer requestSerializer = null;
 
+  private RequestRootDeserializer<Object> requestRootDeserializer = null;
+
   private SchemaMeta schemaMeta = null;
 
   private OperationMeta operationMeta = null;
 
+  private MicroserviceMeta microserviceMeta = null;
+
   private ByteBuf lByteBuf = null;
 
   private ByteBuffer nioBuffer = null;
@@ -75,18 +78,20 @@ public class TestHighwayCodec {
     serviceRegistry.init();
     RegistryUtils.setServiceRegistry(serviceRegistry);
 
-    header = Mockito.mock(RequestHeader.class);
-
     operationProtobuf = Mockito.mock(OperationProtobuf.class);
 
     bodyBuffer = Mockito.mock(Buffer.class);
 
     requestSerializer = Mockito.mock(RequestRootSerializer.class);
 
+    requestRootDeserializer = Mockito.mock(RequestRootDeserializer.class);
+
     schemaMeta = Mockito.mock(SchemaMeta.class);
 
     operationMeta = Mockito.mock(OperationMeta.class);
 
+    microserviceMeta = Mockito.mock(MicroserviceMeta.class);
+
     lByteBuf = Mockito.mock(ByteBuf.class);
 
     nioBuffer = Mockito.mock(ByteBuffer.class);
@@ -97,8 +102,6 @@ public class TestHighwayCodec {
   @After
   public void tearDown() {
 
-    header = null;
-
     operationProtobuf = null;
 
     bodyBuffer = null;
@@ -116,66 +119,25 @@ public class TestHighwayCodec {
     invocation = null;
   }
 
-  @Test
-  public void testDecodeRequest(@Mocked Endpoint endpoint) throws Exception {
-    // TODO : WK unit test
-//    commonMock();
-//    
Mockito.when(schemaMeta.getMicroserviceMeta().getProviderHandlerChain()).thenReturn(Collections.emptyList());
-//    Object[] args = new Object[] {};
-//    Mockito.when(schema.readObject(bodyBuffer)).thenReturn(args);
-//
-//    Invocation invocation = new Invocation(endpoint, operationMeta, null);
-//
-//    HighwayCodec.decodeRequest(invocation, header, operationProtobuf, 
bodyBuffer);
-//
-//    Assert.assertSame(args, invocation.getSwaggerArguments());
-  }
-
-  @Test
-  public void testDecodeResponse() throws Exception {
-    // TODO : WK unit test
-    //    Invocation invocation = Mockito.mock(Invocation.class);
-//    
Mockito.when(operationProtobuf.findResponseSchema(200)).thenReturn(Mockito.mock(WrapSchema.class));
-//
-//    Map<String, String> context = new HashMap<>();
-//    Mockito.when(invocation.getContext()).thenReturn(context);
-//
-//    TcpData tcpData = Mockito.mock(TcpData.class);
-//
-//    Mockito.when(tcpData.getHeaderBuffer()).thenReturn(bodyBuffer);
-//    commonMock();
-//
-//    ResponseHeader header = new ResponseHeader();
-//    header.setStatusCode(200);
-//    header.setContext(new HashMap<>());
-//    header.getContext().put("a", "10");
-//    Buffer responseBuf = HighwayCodec.encodeResponse(0, header, null, null);
-//
-//    TcpData tcp = new TcpData(responseBuf.slice(23, responseBuf.length()), 
null);
-//    Response response = HighwayCodec.decodeResponse(invocation, 
operationProtobuf, tcp);
-//    Assert.assertEquals("10", invocation.getContext().get("a"));
-//    Assert.assertEquals(200, response.getStatusCode());
-  }
 
   @Test
   public void testDecodeRequestTraceId(@Mocked Endpoint endpoint) throws 
Exception {
-    // TODO : WK unit test
-    //    commonMock();
-//
-//    Invocation invocation = new Invocation(endpoint, operationMeta, null);
-//
-//    invocation.addContext("X-B3-traceId", "test1");
-//    Assert.assertEquals("test1", invocation.getContext("X-B3-traceId"));
-//
-//    RequestHeader headers = new RequestHeader();
-//    Map<String, String> context = new HashMap<>();
-//    headers.setContext(context);
-//    HighwayCodec.decodeRequest(invocation, headers, operationProtobuf, 
bodyBuffer);
-//    Assert.assertEquals("test1", invocation.getContext("X-B3-traceId"));
-//
-//    context.put("X-B3-traceId", "test2");
-//    HighwayCodec.decodeRequest(invocation, headers, operationProtobuf, 
bodyBuffer);
-//    Assert.assertEquals("test2", invocation.getContext("X-B3-traceId"));
+    commonMock();
+
+    Invocation invocation = new Invocation(endpoint, operationMeta, null);
+
+    invocation.addContext("X-B3-traceId", "test1");
+    Assert.assertEquals("test1", invocation.getContext("X-B3-traceId"));
+
+    RequestHeader headers = new RequestHeader();
+    Map<String, String> context = new HashMap<>();
+    headers.setContext(context);
+    HighwayCodec.decodeRequest(invocation, headers, operationProtobuf, 
bodyBuffer);
+    Assert.assertEquals("test1", invocation.getContext("X-B3-traceId"));
+
+    context.put("X-B3-traceId", "test2");
+    HighwayCodec.decodeRequest(invocation, headers, operationProtobuf, 
bodyBuffer);
+    Assert.assertEquals("test2", invocation.getContext("X-B3-traceId"));
   }
 
   @Test
@@ -212,32 +174,14 @@ public class TestHighwayCodec {
     Assert.assertTrue(status);
   }
 
-  @Test
-  public void testReadRequestHeader() {
-    // TODO : WK unit test
-    //    boolean status = true;
-//    try {
-//      new MockUp<NotWrapSchema>() {
-//        @Mock
-//        public Object readObject(Input input) throws IOException {
-//          return new RequestHeader();
-//        }
-//      };
-//      bodyBuffer = Buffer.buffer("\"abc\"");
-//      RequestHeader requestHeader = 
HighwayCodec.readRequestHeader(bodyBuffer);
-//      Assert.assertNotNull(requestHeader);
-//      Assert.assertEquals(0, requestHeader.getFlags());
-//    } catch (Exception e) {
-//      status = false;
-//    }
-//    Assert.assertTrue(status);
-  }
-
   private void commonMock() {
     
Mockito.when(operationProtobuf.getRequestRootSerializer()).thenReturn(requestSerializer);
+    
Mockito.when(operationProtobuf.getRequestRootDeserializer()).thenReturn(requestRootDeserializer);
     Mockito.when(bodyBuffer.getByteBuf()).thenReturn(lByteBuf);
+    Mockito.when(bodyBuffer.getBytes()).thenReturn(new byte[0]);
     Mockito.when(lByteBuf.nioBuffer()).thenReturn(nioBuffer);
     
Mockito.when(operationProtobuf.getOperationMeta()).thenReturn(operationMeta);
     Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+    
Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
   }
 }

Reply via email to